| 
				
			 | 
			
			
				
				@@ -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
			 | 
			
			
				
				 	} 
			 |