29#if IMPORTER || EXPORTER
44 sealed partial class RuntimeManagedJavaType
47 sealed class DelegateInnerClassJavaType : FakeJavaType
50 readonly
Type fakeType;
58 internal DelegateInnerClassJavaType(RuntimeContext context,
string name,
Type delegateType) :
61#if IMPORTER || EXPORTER
62 this.fakeType = context.FakeTypes.GetDelegateType(delegateType);
64 this.fakeType = typeof(ikvm.@
internal.DelegateInterface<>).MakeGenericType(delegateType);
66 var invoke = delegateType.GetMethod(
"Invoke");
67 var parameters = invoke.GetParameters();
68 var argTypeWrappers =
new RuntimeJavaType[parameters.Length];
69 var sb =
new ValueStringBuilder();
73 for (
int i = 0; i < parameters.Length; i++)
75 var parameterType = parameters[i].ParameterType;
76 if (parameterType.IsByRef)
78 flags |=
MemberFlags.DelegateInvokeWithByRefParameter;
79 parameterType = RuntimeArrayJavaType.MakeArrayType(parameterType.GetElementType(), 1);
82 sb.Append(argTypeWrappers[i].SigName);
87 sb.Append(returnType.SigName);
88 SetMethods([
new DynamicOnlyJavaMethod(
this,
"Invoke", sb.ToString(), returnType, argTypeWrappers, flags)]);
92 internal override RuntimeJavaType DeclaringTypeWrapper => Context.ClassLoaderFactory.GetJavaTypeFromType(fakeType.GetGenericArguments()[0]);
94 internal override RuntimeClassLoader ClassLoader => DeclaringTypeWrapper.ClassLoader;
96 internal override Type TypeAsTBD => fakeType;
98 internal override bool IsFastClassLiteralSafe =>
true;
100 internal override MethodParametersEntry[] GetMethodParameters(RuntimeJavaMethod mw)
102 return DeclaringTypeWrapper.GetMethodParameters(DeclaringTypeWrapper.GetMethod(mw.Name, mw.Signature,
false));
IKVM.Reflection.Type Type
RuntimeClassLoaderFactory ClassLoaderFactory
Gets the RuntimeClassLoaderFactory associated with this instance of the runtime.
MemberFlags
Describes various options applied to a member.