IKVM11  11
Java SE 11 Virtual Machine for .NET
Loading...
Searching...
No Matches
IkvmReflectionMemberSymbol.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Immutable;
3using System.Linq;
4
11using Type = IKVM.Reflection.Type;
12
14{
15
17 {
18
19 readonly IkvmReflectionModuleSymbol _module;
20 readonly IkvmReflectionTypeSymbol? _type;
21 readonly MemberInfo _underlyingMember;
22
31 base(context)
32 {
33 _module = module ?? throw new ArgumentNullException(nameof(module));
34 _type = type;
35 _underlyingMember = underlyingMember ?? throw new ArgumentNullException(nameof(underlyingMember));
36 }
37
43 protected internal override IkvmReflectionTypeSymbol ResolveTypeSymbol(Type type)
44 {
45 if (_type != null && type == _type.UnderlyingType)
46 return _type;
47 else if (type.Module == _underlyingMember.Module)
48 return _module.GetOrCreateTypeSymbol(type);
49 else
50 return base.ResolveTypeSymbol(type);
51 }
52
58 protected internal override IkvmReflectionConstructorSymbol ResolveConstructorSymbol(ConstructorInfo ctor)
59 {
60 if (_type != null && ctor.DeclaringType == _type.UnderlyingType)
61 return _type.GetOrCreateConstructorSymbol(ctor);
62 else if (ctor.DeclaringType != null && ctor.Module == _underlyingMember.Module)
63 return _module.GetOrCreateTypeSymbol(ctor.DeclaringType).GetOrCreateConstructorSymbol(ctor);
64 else
65 return base.ResolveConstructorSymbol(ctor);
66 }
67
73 protected internal override IkvmReflectionMethodSymbol ResolveMethodSymbol(MethodInfo method)
74 {
75 if (_type != null && method.DeclaringType == _type.UnderlyingType)
76 return _type.GetOrCreateMethodSymbol(method);
77 else if (method.DeclaringType != null && method.Module == _underlyingMember.Module)
78 return _module.GetOrCreateTypeSymbol(method.DeclaringType).GetOrCreateMethodSymbol(method);
79 else
80 return base.ResolveMethodSymbol(method);
81 }
82
88 protected internal override IkvmReflectionFieldSymbol ResolveFieldSymbol(FieldInfo field)
89 {
90 if (_type != null && field.DeclaringType == _type.UnderlyingType)
91 return _type.GetOrCreateFieldSymbol(field);
92 else if (field.DeclaringType != null && field.Module == _underlyingMember.Module)
93 return _module.GetOrCreateTypeSymbol(field.DeclaringType).GetOrCreateFieldSymbol(field);
94 else
95 return base.ResolveFieldSymbol(field);
96 }
97
98
104 protected internal override IkvmReflectionPropertySymbol ResolvePropertySymbol(PropertyInfo property)
105 {
106
107 if (_type != null && property.DeclaringType == _type.UnderlyingType)
108 return _type.GetOrCreatePropertySymbol(property);
109 else if (property.DeclaringType != null && property.Module == _underlyingMember.Module)
110 return _module.GetOrCreateTypeSymbol(property.DeclaringType).GetOrCreatePropertySymbol(property);
111 else
112 return base.ResolvePropertySymbol(property);
113 }
114
120 protected internal override IkvmReflectionEventSymbol ResolveEventSymbol(EventInfo @event)
121 {
122 if (_type != null && @event.DeclaringType == _type.UnderlyingType)
123 return _type.GetOrCreateEventSymbol(@event);
124 else if (@event.DeclaringType != null && @event.Module == _underlyingMember.Module)
125 return _module.GetOrCreateTypeSymbol(@event.DeclaringType).GetOrCreateEventSymbol(@event);
126 else
127 return base.ResolveEventSymbol(@event);
128 }
129
130 internal MemberInfo UnderlyingMember => _underlyingMember;
131
132 internal IkvmReflectionModuleSymbol ContainingModule => _module;
133
134 internal IkvmReflectionTypeSymbol? ContainingType => _type;
135
136 public virtual ITypeSymbol? DeclaringType => _underlyingMember.DeclaringType is Type t ? Context.GetOrCreateTypeSymbol(t) : null;
137
138 public virtual global::System.Reflection.MemberTypes MemberType => (global::System.Reflection.MemberTypes)_underlyingMember.MemberType;
139
140 public virtual int MetadataToken => _underlyingMember.MetadataToken;
141
142 public virtual IModuleSymbol Module => Context.GetOrCreateModuleSymbol(_underlyingMember.Module);
143
144 public virtual string Name => _underlyingMember.Name;
145
146 public override bool IsMissing => _underlyingMember.__IsMissing;
147
148 public virtual ImmutableArray<CustomAttributeSymbol> GetCustomAttributes()
149 {
150 return ResolveCustomAttributes(_underlyingMember.GetCustomAttributesData());
151 }
152
153 public virtual ImmutableArray<CustomAttributeSymbol> GetCustomAttributes(ITypeSymbol attributeType)
154 {
155 return ResolveCustomAttributes(_underlyingMember.GetCustomAttributesData()).Where(i => i.AttributeType == attributeType).ToImmutableArray();
156 }
157
158 public virtual bool IsDefined(ITypeSymbol attributeType)
159 {
160 return _underlyingMember.IsDefined(((IkvmReflectionTypeSymbol)attributeType).UnderlyingType, false);
161 }
162
163 }
164
165}
IKVM.Reflection.Module Module
IKVM.Reflection.Type Type
IKVM.Reflection.ConstructorInfo ConstructorInfo
IKVM.Reflection.EventInfo EventInfo
IKVM.Reflection.FieldInfo FieldInfo
IKVM.Reflection.MemberInfo MemberInfo
IKVM.Reflection.PropertyInfo PropertyInfo
IKVM.Reflection.MethodInfo MethodInfo
global::java.lang.invoke.LambdaForm.Name Name
virtual bool IsDefined(ITypeSymbol attributeType)
Indicates whether one or more instance of attributeType is defined on this member.
virtual int MetadataToken
Gets a value that identifies a metadata element.
override bool IsMissing
Returns true if the symbol is missing.
virtual ImmutableArray< CustomAttributeSymbol > GetCustomAttributes(ITypeSymbol attributeType)
Returns an array of custom attributes defined on this member, identified by type, or an empty array i...
virtual ? ITypeSymbol DeclaringType
Gets the class that declares this member.
virtual ImmutableArray< CustomAttributeSymbol > GetCustomAttributes()
Returns an array of all of the custom attributes defined on this member, excluding named attributes,...
IkvmReflectionMemberSymbol(IkvmReflectionSymbolContext context, IkvmReflectionModuleSymbol module, IkvmReflectionTypeSymbol? type, MemberInfo underlyingMember)
Initializes a new instance.
virtual global::System.Reflection.MemberTypes MemberType
When overridden in a derived class, gets a value indicating the type of the member - method,...
Implementation of IModuleSymbol derived from System.Reflection.
string Name
Gets a string representing the name of the module with the path removed.
Holds references to symbols derived from System.Reflection.
IkvmReflectionTypeSymbol GetOrCreateTypeSymbol(Type type)
Gets or creates a IkvmReflectionTypeSymbol for the specified Type.
IkvmReflectionModuleSymbol GetOrCreateModuleSymbol(Module module)
Gets or creates a IkvmReflectionModuleSymbol for the specified Module.
IkvmReflectionSymbolContext Context
Gets the associated IkvmReflectionSymbolContext.
Obtains information about the attributes of a member and provides access to member metadata.
Performs reflection on a module.
Represents type declarations: class types, interface types, array types, value types,...