Browse Source

Now correctly check against Interface methods

kindlich 6 years ago
parent
commit
d0e5b835c0
No known key found for this signature in database

+ 11
- 7
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaExpressionVisitor.java View File

23
 import java.io.FileOutputStream;
23
 import java.io.FileOutputStream;
24
 import java.io.IOException;
24
 import java.io.IOException;
25
 import java.lang.reflect.Modifier;
25
 import java.lang.reflect.Modifier;
26
-import java.util.*;
26
+import java.util.Arrays;
27
+import java.util.Comparator;
28
+import java.util.Objects;
29
+import java.util.StringJoiner;
27
 
30
 
28
 public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativeTranslator<Void> {
31
 public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativeTranslator<Void> {
29
 	private static final JavaMethod BOOLEAN_PARSE = JavaMethod.getNativeStatic(JavaClass.BOOLEAN, "parseBoolean", "(Ljava/lang/String;)Z");
32
 	private static final JavaMethod BOOLEAN_PARSE = JavaMethod.getNativeStatic(JavaClass.BOOLEAN, "parseBoolean", "(Ljava/lang/String;)Z");
374
 		BuiltinID builtin = expression.member.getBuiltin();
377
 		BuiltinID builtin = expression.member.getBuiltin();
375
 		if (builtin == null) {
378
 		if (builtin == null) {
376
 			expression.target.accept(this);
379
 			expression.target.accept(this);
377
-			
380
+
378
 			JavaMethod methodInfo = context.getJavaMethod(expression.member);
381
 			JavaMethod methodInfo = context.getJavaMethod(expression.member);
379
 			for (int i = 0; i < expression.arguments.typeArguments.length; i++) {
382
 			for (int i = 0; i < expression.arguments.typeArguments.length; i++) {
380
 				if (methodInfo.typeParameterArguments[i]) {
383
 				if (methodInfo.typeParameterArguments[i]) {
381
 					StoredType arguments = expression.arguments.typeArguments[i];
384
 					StoredType arguments = expression.arguments.typeArguments[i];
382
-					
385
+
383
 				}
386
 				}
384
 			}
387
 			}
385
 			for (Expression argument : expression.arguments.arguments) {
388
 			for (Expression argument : expression.arguments.arguments) {
3982
 		if (methodInfo == null)
3985
 		if (methodInfo == null)
3983
 			return false;
3986
 			return false;
3984
 
3987
 
3985
-		if (methodInfo.kind == JavaMethod.Kind.STATIC) {
3988
+		if (methodInfo.kind == JavaMethod.Kind.STATIC)
3986
 			getJavaWriter().invokeStatic(methodInfo);
3989
 			getJavaWriter().invokeStatic(methodInfo);
3987
-		} else if (methodInfo.kind == JavaMethod.Kind.COMPILED) {
3990
+		else if (methodInfo.kind == JavaMethod.Kind.COMPILED)
3988
 			Objects.requireNonNull(methodInfo.translation).translate(expression, this);
3991
 			Objects.requireNonNull(methodInfo.translation).translate(expression, this);
3989
-		} else {
3992
+		else if (methodInfo.cls.kind == JavaClass.Kind.INTERFACE)
3993
+			getJavaWriter().invokeInterface(methodInfo);
3994
+		else
3990
 			getJavaWriter().invokeVirtual(methodInfo);
3995
 			getJavaWriter().invokeVirtual(methodInfo);
3991
-		}
3992
 		if (methodInfo.genericResult)
3996
 		if (methodInfo.genericResult)
3993
 			getJavaWriter().checkCast(context.getInternalName(resultType));
3997
 			getJavaWriter().checkCast(context.getInternalName(resultType));
3994
 
3998
 

Loading…
Cancel
Save