|
|
@@ -49,6 +49,7 @@ import org.openzen.zenscript.codemodel.type.ISymbol;
|
|
49
|
49
|
import org.openzen.zenscript.codemodel.type.StoredType;
|
|
50
|
50
|
import org.openzen.zenscript.codemodel.type.StringTypeID;
|
|
51
|
51
|
import org.openzen.zenscript.codemodel.type.TypeID;
|
|
|
52
|
+import org.openzen.zenscript.codemodel.type.member.BuiltinID;
|
|
52
|
53
|
import org.openzen.zenscript.codemodel.type.member.TypeMembers;
|
|
53
|
54
|
import org.openzen.zenscript.codemodel.type.storage.AutoStorageTag;
|
|
54
|
55
|
import org.openzen.zenscript.javashared.JavaClass;
|
|
|
@@ -76,12 +77,23 @@ public class JavaNativeModule {
|
|
76
|
77
|
|
|
77
|
78
|
public final Map<String, ISymbol> globals = new HashMap<>();
|
|
78
|
79
|
|
|
79
|
|
- public JavaNativeModule(ZSPackage pkg, String name, String basePackage, GlobalTypeRegistry registry, boolean allowNonAnnotated) {
|
|
|
80
|
+ public JavaNativeModule(
|
|
|
81
|
+ ZSPackage pkg,
|
|
|
82
|
+ String name,
|
|
|
83
|
+ String basePackage,
|
|
|
84
|
+ GlobalTypeRegistry registry,
|
|
|
85
|
+ boolean allowNonAnnotated,
|
|
|
86
|
+ JavaNativeModule[] dependencies)
|
|
|
87
|
+ {
|
|
80
|
88
|
this.pkg = pkg;
|
|
81
|
89
|
this.basePackage = basePackage;
|
|
82
|
90
|
module = new Module(name);
|
|
83
|
91
|
this.registry = registry;
|
|
84
|
92
|
|
|
|
93
|
+ for (JavaNativeModule dependency : dependencies) {
|
|
|
94
|
+ definitionByClass.putAll(dependency.definitionByClass);
|
|
|
95
|
+ }
|
|
|
96
|
+
|
|
85
|
97
|
this.allowNonAnnonated = allowNonAnnotated;
|
|
86
|
98
|
compiled = new JavaCompiledModule(module);
|
|
87
|
99
|
|
|
|
@@ -262,15 +274,23 @@ public class JavaNativeModule {
|
|
262
|
274
|
compiled.setFieldInfo(member, new JavaField(javaClass, field.getName(), getDescriptor(field.getType())));
|
|
263
|
275
|
}
|
|
264
|
276
|
|
|
|
277
|
+ boolean hasConstructor = false;
|
|
265
|
278
|
for (java.lang.reflect.Constructor constructor : cls.getConstructors()) {
|
|
266
|
279
|
ZenCodeType.Constructor constructorAnnotation = (ZenCodeType.Constructor)constructor.getAnnotation(ZenCodeType.Constructor.class);
|
|
267
|
280
|
if (constructorAnnotation != null || !annotated) {
|
|
268
|
281
|
ConstructorMember member = asConstructor(definition, constructor);
|
|
269
|
282
|
definition.addMember(member);
|
|
270
|
283
|
compiled.setMethodInfo(member, getMethod(javaClass, constructor));
|
|
|
284
|
+ hasConstructor = true;
|
|
271
|
285
|
}
|
|
272
|
286
|
}
|
|
273
|
287
|
|
|
|
288
|
+ if (!hasConstructor) {
|
|
|
289
|
+ // no constructor! make a private constructor so the compiler doesn't add one
|
|
|
290
|
+ ConstructorMember member = new ConstructorMember(CodePosition.BUILTIN, definition, Modifiers.PRIVATE, new FunctionHeader(BasicTypeID.VOID), BuiltinID.CLASS_DEFAULT_CONSTRUCTOR);
|
|
|
291
|
+ definition.addMember(member);
|
|
|
292
|
+ }
|
|
|
293
|
+
|
|
274
|
294
|
for (Method method : cls.getDeclaredMethods()) {
|
|
275
|
295
|
ZenCodeType.Method methodAnnotation = method.getAnnotation(ZenCodeType.Method.class);
|
|
276
|
296
|
if (methodAnnotation != null) {
|