|
|
@@ -39,6 +39,7 @@ import org.openzen.zenscript.codemodel.member.CasterMember;
|
|
39
|
39
|
import org.openzen.zenscript.codemodel.member.ConstructorMember;
|
|
40
|
40
|
import org.openzen.zenscript.codemodel.member.FieldMember;
|
|
41
|
41
|
import org.openzen.zenscript.codemodel.member.GetterMember;
|
|
|
42
|
+import org.openzen.zenscript.codemodel.member.ImplementationMember;
|
|
42
|
43
|
import org.openzen.zenscript.codemodel.member.MethodMember;
|
|
43
|
44
|
import org.openzen.zenscript.codemodel.member.OperatorMember;
|
|
44
|
45
|
import org.openzen.zenscript.codemodel.member.SetterMember;
|
|
|
@@ -56,6 +57,7 @@ import org.openzen.zenscript.codemodel.type.storage.AutoStorageTag;
|
|
56
|
57
|
import org.openzen.zenscript.javashared.JavaClass;
|
|
57
|
58
|
import org.openzen.zenscript.javashared.JavaCompiledModule;
|
|
58
|
59
|
import org.openzen.zenscript.javashared.JavaField;
|
|
|
60
|
+import org.openzen.zenscript.javashared.JavaImplementation;
|
|
59
|
61
|
import org.openzen.zenscript.javashared.JavaMethod;
|
|
60
|
62
|
import stdlib.Strings;
|
|
61
|
63
|
|
|
|
@@ -207,6 +209,10 @@ public class JavaNativeModule {
|
|
207
|
209
|
return methodMember.ref(registry.getForDefinition(definition).stored());
|
|
208
|
210
|
}
|
|
209
|
211
|
|
|
|
212
|
+ private boolean isInBasePackage(String className) {
|
|
|
213
|
+ return className.startsWith(basePackage + ".");
|
|
|
214
|
+ }
|
|
|
215
|
+
|
|
210
|
216
|
private ZSPackage getPackage(String className) {
|
|
211
|
217
|
if (!className.contains("."))
|
|
212
|
218
|
return pkg;
|
|
|
@@ -246,6 +252,7 @@ public class JavaNativeModule {
|
|
246
|
252
|
TypeID type = loadType(bound);
|
|
247
|
253
|
parameter.addBound(new ParameterTypeBound(CodePosition.NATIVE, type));
|
|
248
|
254
|
}
|
|
|
255
|
+ typeParameters[i] = parameter;
|
|
249
|
256
|
}
|
|
250
|
257
|
|
|
251
|
258
|
HighLevelDefinition definition;
|
|
|
@@ -263,6 +270,19 @@ public class JavaNativeModule {
|
|
263
|
270
|
} else {
|
|
264
|
271
|
definition = new ClassDefinition(CodePosition.NATIVE, module, classPkg, className, Modifiers.PUBLIC);
|
|
265
|
272
|
javaClass = JavaClass.fromInternalName(internalName, JavaClass.Kind.CLASS);
|
|
|
273
|
+
|
|
|
274
|
+ if (cls.getSuperclass() != null && shouldLoadClass(cls.getSuperclass())) {
|
|
|
275
|
+ definition.setSuperType(loadType(cls.getSuperclass(), false, false));
|
|
|
276
|
+ }
|
|
|
277
|
+ }
|
|
|
278
|
+
|
|
|
279
|
+ for (Class<?> iface : cls.getInterfaces()) {
|
|
|
280
|
+ if (shouldLoadClass(iface)) {
|
|
|
281
|
+ TypeID type = loadType(iface, false, false);
|
|
|
282
|
+ ImplementationMember member = new ImplementationMember(CodePosition.NATIVE, definition, Modifiers.PUBLIC, type);
|
|
|
283
|
+ definition.members.add(member);
|
|
|
284
|
+ compiled.setImplementationInfo(member, new JavaImplementation(true, javaClass));
|
|
|
285
|
+ }
|
|
266
|
286
|
}
|
|
267
|
287
|
|
|
268
|
288
|
definition.typeParameters = typeParameters;
|
|
|
@@ -318,7 +338,6 @@ public class JavaNativeModule {
|
|
318
|
338
|
GetterMember member = asGetter(definition, method, getter);
|
|
319
|
339
|
definition.addMember(member);
|
|
320
|
340
|
compiled.setMethodInfo(member, getMethod(javaClass, method, member.getType()));
|
|
321
|
|
- continue;
|
|
322
|
341
|
}
|
|
323
|
342
|
|
|
324
|
343
|
ZenCodeType.Setter setter = method.getAnnotation(ZenCodeType.Setter.class);
|
|
|
@@ -326,7 +345,6 @@ public class JavaNativeModule {
|
|
326
|
345
|
SetterMember member = asSetter(definition, method, setter);
|
|
327
|
346
|
definition.addMember(member);
|
|
328
|
347
|
compiled.setMethodInfo(member, getMethod(javaClass, method, BasicTypeID.VOID.stored));
|
|
329
|
|
- continue;
|
|
330
|
348
|
}
|
|
331
|
349
|
|
|
332
|
350
|
ZenCodeType.Operator operator = method.getAnnotation(ZenCodeType.Operator.class);
|
|
|
@@ -334,7 +352,6 @@ public class JavaNativeModule {
|
|
334
|
352
|
OperatorMember member = asOperator(definition, method, operator);
|
|
335
|
353
|
definition.addMember(member);
|
|
336
|
354
|
compiled.setMethodInfo(member, getMethod(javaClass, method, member.header.getReturnType()));
|
|
337
|
|
- continue;
|
|
338
|
355
|
}
|
|
339
|
356
|
|
|
340
|
357
|
ZenCodeType.Caster caster = method.getAnnotation(ZenCodeType.Caster.class);
|
|
|
@@ -342,7 +359,6 @@ public class JavaNativeModule {
|
|
342
|
359
|
CasterMember member = asCaster(definition, method, caster);
|
|
343
|
360
|
definition.addMember(member);
|
|
344
|
361
|
compiled.setMethodInfo(member, getMethod(javaClass, method, member.toType));
|
|
345
|
|
- continue;
|
|
346
|
362
|
}
|
|
347
|
363
|
|
|
348
|
364
|
/*if (!annotated) {
|
|
|
@@ -355,6 +371,10 @@ public class JavaNativeModule {
|
|
355
|
371
|
return definition;
|
|
356
|
372
|
}
|
|
357
|
373
|
|
|
|
374
|
+ private boolean shouldLoadClass(Class<?> cls) {
|
|
|
375
|
+ return isInBasePackage(cls.getName());
|
|
|
376
|
+ }
|
|
|
377
|
+
|
|
358
|
378
|
private boolean isGetterName(String name) {
|
|
359
|
379
|
return name.startsWith("get") || name.startsWith("is") || name.startsWith("has");
|
|
360
|
380
|
}
|