47 readonly
Type remappedType;
57 base(context, name, type)
59 var attr = Context.
AttributeHelper.GetRemappedType(type) ??
throw new InvalidOperationException();
60 remappedType = attr.Type;
63 internal override Type TypeAsTBD => remappedType;
65 internal override bool IsRemapped =>
true;
67 protected override void LazyPublishMethods()
69 const BindingFlags bindingFlags = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
71 var list =
new List<RuntimeJavaMethod>();
73 foreach (var ctor
in type.GetConstructors(bindingFlags))
74 AddMethod(list, ctor);
76 foreach (var method
in type.GetMethods(bindingFlags))
77 AddMethod(list, method);
80 if (remappedType.IsInterface)
82 var nestedHelper = type.GetNestedType(
"__Helper", BindingFlags.Public | BindingFlags.Static);
83 foreach (var m
in Context.
AttributeHelper.GetRemappedInterfaceMethods(type))
85 var method = remappedType.GetMethod(m.MappedTo);
86 var mbHelper = method;
90 GetNameSigFromMethodBase(method, out var name, out var sig, out var retType, out var paramTypes,
ref flags);
91 if (nestedHelper !=
null)
93 mbHelper = nestedHelper.GetMethod(m.Name);
98 var mw =
new RemappedJavaMethod(
this, m.Name, sig, method, retType, paramTypes, modifiers,
false, mbHelper,
null);
99 mw.SetDeclaredExceptions(m.Throws);
104 SetMethods(list.ToArray());
107 private void AddMethod(List<RuntimeJavaMethod> list,
MethodBase method)
110 if ((flags &
HideFromJavaFlags.Code) == 0 && (remappedType.IsSealed || !method.Name.StartsWith(
"instancehelper_")) && (!remappedType.IsSealed || method.IsStatic))
111 list.Add(CreateRemappedMethodWrapper(method, flags));
114 protected override void LazyPublishFields()
116 var list =
new List<RuntimeJavaField>();
117 var fields = type.GetFields(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
118 foreach (var field
in fields)
122 list.Add(CreateFieldWrapper(field, hideFromJavaFlags));
124 SetFields(list.ToArray());
131 GetNameSigFromMethodBase(mb, out var name, out var sig, out var retType, out var paramTypes,
ref flags);
134 var hideFromReflection = mbHelper !=
null && (hideFromJavaflags &
HideFromJavaFlags.Reflection) != 0;
136 if (!mb.IsStatic && !mb.IsConstructor)
139 Type[] argTypes =
new Type[parameters.Length + 1];
140 argTypes[0] = remappedType;
141 for (
int i = 0; i < parameters.Length; i++)
143 argTypes[i + 1] = parameters[i].ParameterType;
145 MethodInfo helper = type.GetMethod(
"instancehelper_" + mb.Name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static,
null, argTypes,
null);
150 mbNonvirtualHelper = type.GetMethod(
"nonvirtualhelper/" + mb.Name, BindingFlags.NonPublic | BindingFlags.Static,
null, argTypes,
null);
153 return new RemappedJavaMethod(
this, name, sig, mb, retType, paramTypes, modifiers, hideFromReflection, mbHelper, mbNonvirtualHelper);
Maintains services relevant to an instane of the IKVM runtime.
AttributeHelper AttributeHelper
Gets the AttributeHelper associated with this instance of the runtime.