internal IEnumerable<ConstructorInfo> CoreGetDeclaredConstructors(NameFilter optionalNameFilter)
        {
            //
            // - It may sound odd to get a non-null name filter for a constructor search, but Type.GetMember() is an api that does this.
            //
            // - All GetConstructor() apis act as if BindingFlags.DeclaredOnly were specified. So the ReflectedType will always be the declaring type and so is not passed to this method.
            //
            RuntimeNamedTypeInfo definingType = AnchoringTypeDefinitionForDeclaredMembers;
            if (definingType != null)
            {
                MetadataReader reader = definingType.Reader;
                RuntimeTypeInfo contextType = this;
                foreach (MethodHandle methodHandle in definingType.DeclaredMethodAndConstructorHandles)
                {
                    Method method = methodHandle.GetMethod(reader);

                    if (!MetadataReaderExtensions.IsConstructor(ref method, reader))
                        continue;

                    if (optionalNameFilter == null || optionalNameFilter.Matches(method.Name, reader))
                        yield return RuntimePlainConstructorInfo.GetRuntimePlainConstructorInfo(methodHandle, definingType, contextType);
                }
            }

            foreach (RuntimeConstructorInfo syntheticConstructor in SyntheticConstructors)
            {
                if (optionalNameFilter == null || optionalNameFilter.Matches(syntheticConstructor.IsStatic ? ConstructorInfo.TypeConstructorName : ConstructorInfo.ConstructorName))
                    yield return syntheticConstructor;
            }
        }
 internal sealed override IEnumerable<Type> CoreGetDeclaredNestedTypes(NameFilter optionalNameFilter)
 {
     foreach (TypeDefinitionHandle nestedTypeHandle in _typeDefinition.NestedTypes)
     {
         if (optionalNameFilter == null || optionalNameFilter.Matches(nestedTypeHandle.GetTypeDefinition(_reader).Name, _reader))
             yield return nestedTypeHandle.GetNamedType(_reader);
     }
 }
 private IEnumerable<ConstructorInfo> CoreGetDeclaredSyntheticConstructors(NameFilter optionalNameFilter)
 {
     foreach (RuntimeConstructorInfo syntheticConstructor in SyntheticConstructors)
     {
         if (optionalNameFilter == null || optionalNameFilter.Matches(syntheticConstructor.IsStatic ? ConstructorInfo.TypeConstructorName : ConstructorInfo.ConstructorName))
             yield return syntheticConstructor;
     }
 }
 private IEnumerable<MethodInfo> CoreGetDeclaredSyntheticMethods(NameFilter optionalNameFilter)
 {
     foreach (RuntimeMethodInfo syntheticMethod in SyntheticMethods)
     {
         if (optionalNameFilter == null || optionalNameFilter.Matches(syntheticMethod.Name))
             yield return syntheticMethod;
     }
 }
 internal sealed override IEnumerable<EventInfo> CoreGetDeclaredEvents(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType, RuntimeTypeInfo contextTypeInfo)
 {
     MetadataReader reader = Reader;
     foreach (EventHandle eventHandle in DeclaredEventHandles)
     {
         if (optionalNameFilter == null || optionalNameFilter.Matches(eventHandle.GetEvent(reader).Name, reader))
             yield return NativeFormatRuntimeEventInfo.GetRuntimeEventInfo(eventHandle, this, contextTypeInfo, reflectedType);
     }
 }
 internal IEnumerable<EventInfo> CoreGetDeclaredEvents(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType)
 {
     RuntimeNamedTypeInfo definingType = AnchoringTypeDefinitionForDeclaredMembers;
     if (definingType != null)
     {
         return definingType.CoreGetDeclaredEvents(optionalNameFilter, reflectedType, this);
     }
     return Empty<EventInfo>.Enumerable;
 }
 internal sealed override IEnumerable<PropertyInfo> CoreGetDeclaredProperties(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType, RuntimeTypeInfo contextTypeInfo)
 {
     MetadataReader reader = Reader;
     foreach (PropertyHandle propertyHandle in DeclaredPropertyHandles)
     {
         if (optionalNameFilter == null || optionalNameFilter.Matches(propertyHandle.GetProperty(reader).Name, reader))
             yield return NativeFormatRuntimePropertyInfo.GetRuntimePropertyInfo(propertyHandle, this, contextTypeInfo, reflectedType);
     }
 }
        internal IEnumerable<MethodInfo> CoreGetDeclaredMethods(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType)
        {
            RuntimeNamedTypeInfo definingType = AnchoringTypeDefinitionForDeclaredMembers;
            if (definingType != null)
            {
                // If there is a definingType, we do not support Synthetic constructors
                Debug.Assert(Object.ReferenceEquals(SyntheticMethods, Empty<RuntimeMethodInfo>.Enumerable));

                return definingType.CoreGetDeclaredMethods(optionalNameFilter, reflectedType, this);
            }

            return CoreGetDeclaredSyntheticMethods(optionalNameFilter);
        }
        internal sealed override IEnumerable<MethodInfo> CoreGetDeclaredMethods(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType, RuntimeTypeInfo contextTypeInfo)
        {
            MetadataReader reader = Reader;
            foreach (MethodHandle methodHandle in DeclaredMethodAndConstructorHandles)
            {
                Method method = methodHandle.GetMethod(reader);

                if (MetadataReaderExtensions.IsConstructor(ref method, reader))
                    continue;

                if (optionalNameFilter == null || optionalNameFilter.Matches(method.Name, reader))
                    yield return RuntimeNamedMethodInfo<NativeFormatMethodCommon>.GetRuntimeNamedMethodInfo(new NativeFormatMethodCommon(methodHandle, this, contextTypeInfo), reflectedType);
            }
        }
        internal sealed override IEnumerable<ConstructorInfo> CoreGetDeclaredConstructors(NameFilter optionalNameFilter, RuntimeTypeInfo contextTypeInfo)
        {
            //
            // - It may sound odd to get a non-null name filter for a constructor search, but Type.GetMember() is an api that does this.
            //
            // - All GetConstructor() apis act as if BindingFlags.DeclaredOnly were specified. So the ReflectedType will always be the declaring type and so is not passed to this method.
            //
            MetadataReader reader = Reader;
            foreach (MethodHandle methodHandle in DeclaredMethodAndConstructorHandles)
            {
                Method method = methodHandle.GetMethod(reader);

                if (!MetadataReaderExtensions.IsConstructor(ref method, reader))
                    continue;

                if (optionalNameFilter == null || optionalNameFilter.Matches(method.Name, reader))
                    yield return RuntimePlainConstructorInfo<NativeFormatMethodCommon>.GetRuntimePlainConstructorInfo(new NativeFormatMethodCommon(methodHandle, this, contextTypeInfo));
            }
        }
        internal IEnumerable<ConstructorInfo> CoreGetDeclaredConstructors(NameFilter optionalNameFilter)
        {
            //
            // - It may sound odd to get a non-null name filter for a constructor search, but Type.GetMember() is an api that does this.
            //
            // - All GetConstructor() apis act as if BindingFlags.DeclaredOnly were specified. So the ReflectedType will always be the declaring type and so is not passed to this method.
            //
            RuntimeNamedTypeInfo definingType = AnchoringTypeDefinitionForDeclaredMembers;

            if (definingType != null)
            {
                // If there is a definingType, we do not support Synthetic constructors
                Debug.Assert(Object.ReferenceEquals(SyntheticConstructors, Empty<RuntimeConstructorInfo>.Enumerable));

                return definingType.CoreGetDeclaredConstructors(optionalNameFilter, this);
            }

            return CoreGetDeclaredSyntheticConstructors(optionalNameFilter);
        }
        internal IEnumerable<MethodInfo> CoreGetDeclaredMethods(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType)
        {
            RuntimeNamedTypeInfo definingType = AnchoringTypeDefinitionForDeclaredMembers;
            if (definingType != null)
            {
                MetadataReader reader = definingType.Reader;
                foreach (MethodHandle methodHandle in definingType.DeclaredMethodAndConstructorHandles)
                {
                    Method method = methodHandle.GetMethod(reader);

                    if (MetadataReaderExtensions.IsConstructor(ref method, reader))
                        continue;

                    if (optionalNameFilter == null || optionalNameFilter.Matches(method.Name, reader))
                        yield return RuntimeNamedMethodInfo.GetRuntimeNamedMethodInfo(methodHandle, definingType, this);
                }
            }

            foreach (RuntimeMethodInfo syntheticMethod in SyntheticMethods)
            {
                if (optionalNameFilter == null || optionalNameFilter.Matches(syntheticMethod.Name))
                    yield return syntheticMethod;
            }
        }
 //
 // - All GetNestedType() apis act as if BindingFlags.DeclaredOnly were specified. So the ReflectedType will always be the declaring type and so is not passed to this method.
 //
 // This method is left unsealed as RuntimeNamedTypeInfo and others need to override with specific implementations.
 //
 internal virtual IEnumerable<Type> CoreGetDeclaredNestedTypes(NameFilter optionalNameFilter)
 {
     return Array.Empty<Type>();
 }
 // Metadata providing implementations of RuntimeNamedTypeInfo implement the following methods
 // to provide filtered access to the various reflection objects by reading metadata directly.
 // The loop of examining methods is done in a metadata specific manner for greater efficiency.
 internal abstract IEnumerable <ConstructorInfo> CoreGetDeclaredConstructors(NameFilter optionalNameFilter, RuntimeTypeInfo contextTypeInfo);
 //
 // - All GetNestedType() apis act as if BindingFlags.DeclaredOnly were specified. So the ReflectedType will always be the declaring type and so is not passed to this method.
 //
 // This method is left unsealed as RuntimeNamedTypeInfo and others need to override with specific implementations.
 //
 internal virtual IEnumerable <Type> CoreGetDeclaredNestedTypes(NameFilter optionalNameFilter)
 {
     return(Array.Empty <Type>());
 }
 internal abstract IEnumerable <PropertyInfo> CoreGetDeclaredProperties(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType, RuntimeTypeInfo contextTypeInfo);
 internal abstract IEnumerable <FieldInfo> CoreGetDeclaredFields(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType, RuntimeTypeInfo contextTypeInfo);
 internal abstract IEnumerable<PropertyInfo> CoreGetDeclaredProperties(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType, RuntimeTypeInfo contextTypeInfo);
 internal sealed override IEnumerable <Type> CoreGetDeclaredNestedTypes(NameFilter optionalNameFilter)
 {
     return(GenericTypeDefinitionTypeInfo.CoreGetDeclaredNestedTypes(optionalNameFilter));
 }
 internal abstract IEnumerable<FieldInfo> CoreGetDeclaredFields(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType, RuntimeTypeInfo contextTypeInfo);
Example #21
0
 internal sealed override IEnumerable <Type> CoreGetDeclaredNestedTypes(NameFilter optionalNameFilter)
 {
     throw ReflectionCoreExecution.ExecutionDomain.CreateMissingMetadataException(this);
 }
 internal sealed override IEnumerable<Type> CoreGetDeclaredNestedTypes(NameFilter optionalNameFilter)
 {
     throw ReflectionCoreExecution.ExecutionDomain.CreateMissingMetadataException(this);
 }
 internal sealed override IEnumerable<Type> CoreGetDeclaredNestedTypes(NameFilter optionalNameFilter)
 {
     return GenericTypeDefinitionTypeInfo.CoreGetDeclaredNestedTypes(optionalNameFilter);
 }
 internal sealed override IEnumerable <Type> CoreGetDeclaredNestedTypes(NameFilter optionalNameFilter)
 {
     return(Array.Empty <Type>());
 }
 internal sealed override IEnumerable<Type> CoreGetDeclaredNestedTypes(NameFilter optionalNameFilter)
 {
     return Array.Empty<Type>();
 }
        internal sealed override IEnumerable <ConstructorInfo> CoreGetDeclaredConstructors(NameFilter optionalNameFilter, RuntimeTypeInfo contextTypeInfo)
        {
            //
            // - It may sound odd to get a non-null name filter for a constructor search, but Type.GetMember() is an api that does this.
            //
            // - All GetConstructor() apis act as if BindingFlags.DeclaredOnly were specified. So the ReflectedType will always be the declaring type and so is not passed to this method.
            //
            MetadataReader reader = Reader;

            foreach (MethodDefinitionHandle methodHandle in DeclaredMethodAndConstructorHandles)
            {
                MethodDefinition method = reader.GetMethodDefinition(methodHandle);

                if (!EcmaMetadataHelpers.IsConstructor(ref method, reader))
                {
                    continue;
                }

                if (optionalNameFilter == null || optionalNameFilter.Matches(method.Name, reader))
                {
                    yield return(RuntimePlainConstructorInfo <EcmaFormatMethodCommon> .GetRuntimePlainConstructorInfo(new EcmaFormatMethodCommon(methodHandle, this, contextTypeInfo)));
                }
            }
        }
 // Metadata providing implementations of RuntimeNamedTypeInfo implement the following methods
 // to provide filtered access to the various reflection objects by reading metadata directly.
 // The loop of examining methods is done in a metadata specific manner for greater efficiency.
 internal abstract IEnumerable<ConstructorInfo> CoreGetDeclaredConstructors(NameFilter optionalNameFilter, RuntimeTypeInfo contextTypeInfo);
        internal sealed override IEnumerable <PropertyInfo> CoreGetDeclaredProperties(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType, RuntimeTypeInfo contextTypeInfo)
        {
            MetadataReader reader = Reader;

            foreach (PropertyDefinitionHandle propertyHandle in DeclaredPropertyHandles)
            {
                if (optionalNameFilter == null || optionalNameFilter.Matches(reader.GetPropertyDefinition(propertyHandle).Name, reader))
                {
                    yield return(EcmaFormatRuntimePropertyInfo.GetRuntimePropertyInfo(propertyHandle, this, contextTypeInfo, reflectedType));
                }
            }
        }
 internal IEnumerable<EventInfo> CoreGetDeclaredEvents(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType)
 {
     RuntimeNamedTypeInfo definingType = AnchoringTypeDefinitionForDeclaredMembers;
     if (definingType != null)
     {
         MetadataReader reader = definingType.Reader;
         foreach (EventHandle eventHandle in definingType.DeclaredEventHandles)
         {
             if (optionalNameFilter == null || optionalNameFilter.Matches(eventHandle.GetEvent(reader).Name, reader))
                 yield return RuntimeEventInfo.GetRuntimeEventInfo(eventHandle, definingType, this);
         }
     }
 }
 internal IEnumerable<PropertyInfo> CoreGetDeclaredProperties(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType)
 {
     RuntimeNamedTypeInfo definingType = AnchoringTypeDefinitionForDeclaredMembers;
     if (definingType != null)
     {
         MetadataReader reader = definingType.Reader;
         foreach (PropertyHandle propertyHandle in definingType.DeclaredPropertyHandles)
         {
             if (optionalNameFilter == null || optionalNameFilter.Matches(propertyHandle.GetProperty(reader).Name, reader))
                 yield return RuntimePropertyInfo.GetRuntimePropertyInfo(propertyHandle, definingType, this, reflectedType);
         }
     }
 }