コード例 #1
0
        public override void Search(PEFile module, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            var metadata   = module.Metadata;
            var typeSystem = module.GetTypeSystemOrNull();

            if (typeSystem == null)
            {
                return;
            }

            foreach (var handle in metadata.MethodDefinitions)
            {
                cancellationToken.ThrowIfCancellationRequested();
                var md = metadata.GetMethodDefinition(handle);
                if (!md.HasBody() || !MethodIsLiteralMatch(module, md))
                {
                    continue;
                }
                var method = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                if (!CheckVisibility(method))
                {
                    continue;
                }
                OnFoundResult(method);
            }

            foreach (var handle in metadata.FieldDefinitions)
            {
                cancellationToken.ThrowIfCancellationRequested();
                var fd = metadata.GetFieldDefinition(handle);
                if (!fd.HasFlag(System.Reflection.FieldAttributes.Literal))
                {
                    continue;
                }
                var constantHandle = fd.GetDefaultValue();
                if (constantHandle.IsNil)
                {
                    continue;
                }
                var constant = metadata.GetConstant(constantHandle);
                var blob     = metadata.GetBlobReader(constant.Value);
                if (!IsLiteralMatch(metadata, blob.ReadConstant(constant.TypeCode)))
                {
                    continue;
                }
                IField field = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                if (!CheckVisibility(field))
                {
                    continue;
                }
                OnFoundResult(field);
            }
        }
コード例 #2
0
        public override void Search(PEFile module, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            var typeSystem = module.GetTypeSystemOrNull();

            if (typeSystem == null)
            {
                return;
            }

            var root = ((MetadataModule)typeSystem.MainModule).RootNamespace;

            Search(module, root);
        }
コード例 #3
0
        public override void Search(PEFile module)
        {
            if (searchTermToken.IsNil)
            {
                return;
            }
            var typeSystem = module.GetTypeSystemOrNull();

            if (typeSystem == null)
            {
                return;
            }

            switch (searchTermToken.Kind)
            {
            case HandleKind.TypeDefinition:
                var type = ((MetadataModule)typeSystem.MainModule).GetDefinition((TypeDefinitionHandle)searchTermToken);
                addResult(ResultFromEntity(type));
                break;
            }
        }
コード例 #4
0
        public override void Search(PEFile module, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            var metadata   = module.Metadata;
            var typeSystem = module.GetTypeSystemOrNull();

            if (typeSystem == null)
            {
                return;
            }

            if (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Type)
            {
                foreach (var handle in metadata.TypeDefinitions)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                    string languageSpecificName = language.GetEntityName(module, handle, fullNameSearch, omitGenerics);
                    if (languageSpecificName != null && !IsMatch(languageSpecificName))
                    {
                        continue;
                    }
                    var type = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                    if (!CheckVisibility(type))
                    {
                        continue;
                    }
                    OnFoundResult(type);
                }
            }

            if (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Member || searchKind == MemberSearchKind.Method)
            {
                foreach (var handle in metadata.MethodDefinitions)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                    string languageSpecificName = language.GetEntityName(module, handle, fullNameSearch, omitGenerics);
                    if (languageSpecificName != null && !IsMatch(languageSpecificName))
                    {
                        continue;
                    }
                    var method = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                    if (!CheckVisibility(method))
                    {
                        continue;
                    }
                    OnFoundResult(method);
                }
            }

            if (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Member || searchKind == MemberSearchKind.Field)
            {
                foreach (var handle in metadata.FieldDefinitions)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                    string languageSpecificName = language.GetEntityName(module, handle, fullNameSearch, omitGenerics);
                    if (languageSpecificName != null && !IsMatch(languageSpecificName))
                    {
                        continue;
                    }
                    var field = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                    if (!CheckVisibility(field))
                    {
                        continue;
                    }
                    OnFoundResult(field);
                }
            }

            if (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Member || searchKind == MemberSearchKind.Property)
            {
                foreach (var handle in metadata.PropertyDefinitions)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                    string languageSpecificName = language.GetEntityName(module, handle, fullNameSearch, omitGenerics);
                    if (languageSpecificName != null && !IsMatch(languageSpecificName))
                    {
                        continue;
                    }
                    var property = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                    if (!CheckVisibility(property))
                    {
                        continue;
                    }
                    OnFoundResult(property);
                }
            }

            if (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Member || searchKind == MemberSearchKind.Event)
            {
                foreach (var handle in metadata.EventDefinitions)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                    string languageSpecificName = language.GetEntityName(module, handle, fullNameSearch, omitGenerics);
                    if (!IsMatch(languageSpecificName))
                    {
                        continue;
                    }
                    var @event = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                    if (!CheckVisibility(@event))
                    {
                        continue;
                    }
                    OnFoundResult(@event);
                }
            }
        }
コード例 #5
0
        public override void Search(PEFile module)
        {
            var metadata   = module.Metadata;
            var typeSystem = module.GetTypeSystemOrNull();

            if (typeSystem == null)
            {
                return;
            }

            if (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Type)
            {
                foreach (var handle in metadata.TypeDefinitions)
                {
                    string languageSpecificName = language.GetEntityName(module, handle, fullNameSearch);
                    if (languageSpecificName != null && !IsMatch(languageSpecificName))
                    {
                        continue;
                    }
                    var type = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                    addResult(ResultFromEntity(type));
                }
            }

            if (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Member || searchKind == MemberSearchKind.Method)
            {
                foreach (var handle in metadata.MethodDefinitions)
                {
                    // TODO use method semantics to skip accessors
                    string languageSpecificName = language.GetEntityName(module, handle, fullNameSearch);
                    if (languageSpecificName != null && !IsMatch(languageSpecificName))
                    {
                        continue;
                    }
                    var method = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                    addResult(ResultFromEntity(method));
                }
            }

            if (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Member || searchKind == MemberSearchKind.Field)
            {
                foreach (var handle in metadata.FieldDefinitions)
                {
                    string languageSpecificName = language.GetEntityName(module, handle, fullNameSearch);
                    if (languageSpecificName != null && !IsMatch(languageSpecificName))
                    {
                        continue;
                    }
                    var field = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                    addResult(ResultFromEntity(field));
                }
            }

            if (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Member || searchKind == MemberSearchKind.Property)
            {
                foreach (var handle in metadata.PropertyDefinitions)
                {
                    string languageSpecificName = language.GetEntityName(module, handle, fullNameSearch);
                    if (languageSpecificName != null && !IsMatch(languageSpecificName))
                    {
                        continue;
                    }
                    var property = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                    addResult(ResultFromEntity(property));
                }
            }

            if (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Member || searchKind == MemberSearchKind.Event)
            {
                foreach (var handle in metadata.EventDefinitions)
                {
                    string languageSpecificName = language.GetEntityName(module, handle, fullNameSearch);
                    if (!IsMatch(languageSpecificName))
                    {
                        continue;
                    }
                    var @event = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
                    addResult(ResultFromEntity(@event));
                }
            }
        }
コード例 #6
0
        public override void Search(PEFile module, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            if (searchTermToken.IsNil)
            {
                return;
            }
            var typeSystem = module.GetTypeSystemOrNull();

            if (typeSystem == null)
            {
                return;
            }
            var metadataModule = (MetadataModule)typeSystem.MainModule;
            int row            = module.Metadata.GetRowNumber(searchTermToken);

            switch (searchTermToken.Kind)
            {
            case HandleKind.TypeDefinition:
                if (row < 1 || row > module.Metadata.TypeDefinitions.Count)
                {
                    break;
                }
                var type = metadataModule.GetDefinition((TypeDefinitionHandle)searchTermToken);
                if (!CheckVisibility(type))
                {
                    break;
                }
                OnFoundResult(type);
                break;

            case HandleKind.MethodDefinition:
                if (row < 1 || row > module.Metadata.MethodDefinitions.Count)
                {
                    break;
                }
                var method = metadataModule.GetDefinition((MethodDefinitionHandle)searchTermToken);
                if (!CheckVisibility(method))
                {
                    break;
                }
                OnFoundResult(method);
                break;

            case HandleKind.FieldDefinition:
                if (row < 1 || row > module.Metadata.FieldDefinitions.Count)
                {
                    break;
                }
                var field = metadataModule.GetDefinition((FieldDefinitionHandle)searchTermToken);
                if (!CheckVisibility(field))
                {
                    break;
                }
                OnFoundResult(field);
                break;

            case HandleKind.PropertyDefinition:
                if (row < 1 || row > module.Metadata.PropertyDefinitions.Count)
                {
                    break;
                }
                var property = metadataModule.GetDefinition((PropertyDefinitionHandle)searchTermToken);
                if (!CheckVisibility(property))
                {
                    break;
                }
                OnFoundResult(property);
                break;

            case HandleKind.EventDefinition:
                if (row < 1 || row > module.Metadata.EventDefinitions.Count)
                {
                    break;
                }
                var @event = metadataModule.GetDefinition((EventDefinitionHandle)searchTermToken);
                if (!CheckVisibility(@event))
                {
                    break;
                }
                OnFoundResult(@event);
                break;
            }
        }
コード例 #7
0
        public override void Search(PEFile module)
        {
            if (searchTermToken.IsNil)
            {
                return;
            }
            var typeSystem = module.GetTypeSystemOrNull();

            if (typeSystem == null)
            {
                return;
            }
            var metadataModule = (MetadataModule)typeSystem.MainModule;
            int row            = module.Metadata.GetRowNumber(searchTermToken);

            switch (searchTermToken.Kind)
            {
            case HandleKind.TypeDefinition:
                if (row < 1 || row > module.Metadata.TypeDefinitions.Count)
                {
                    break;
                }
                var type = metadataModule.GetDefinition((TypeDefinitionHandle)searchTermToken);
                addResult(ResultFromEntity(type));
                break;

            case HandleKind.MethodDefinition:
                if (row < 1 || row > module.Metadata.MethodDefinitions.Count)
                {
                    break;
                }
                var method = metadataModule.GetDefinition((MethodDefinitionHandle)searchTermToken);
                addResult(ResultFromEntity(method));
                break;

            case HandleKind.FieldDefinition:
                if (row < 1 || row > module.Metadata.FieldDefinitions.Count)
                {
                    break;
                }
                var field = metadataModule.GetDefinition((FieldDefinitionHandle)searchTermToken);
                addResult(ResultFromEntity(field));
                break;

            case HandleKind.PropertyDefinition:
                if (row < 1 || row > module.Metadata.PropertyDefinitions.Count)
                {
                    break;
                }
                var property = metadataModule.GetDefinition((PropertyDefinitionHandle)searchTermToken);
                addResult(ResultFromEntity(property));
                break;

            case HandleKind.EventDefinition:
                if (row < 1 || row > module.Metadata.EventDefinitions.Count)
                {
                    break;
                }
                var @event = metadataModule.GetDefinition((EventDefinitionHandle)searchTermToken);
                addResult(ResultFromEntity(@event));
                break;
            }
        }