Browse Source

Merge remote-tracking branch 'jared/development' into development

kindlich 5 years ago
parent
commit
0ad87d8de3
No known key found for this signature in database

+ 20
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/Modifiers.java View File

@@ -81,4 +81,24 @@ public class Modifiers {
81 81
 	public static boolean hasAccess(int modifiers) {
82 82
 		return (modifiers & (PRIVATE | PUBLIC | PROTECTED | INTERNAL)) > 0;
83 83
 	}
84
+    
85
+    public static String describe(int modifiers) {
86
+        StringBuilder builder = new StringBuilder();
87
+        if (isPublic(modifiers)) {
88
+            builder.append("public");
89
+        } else if (isPrivate(modifiers)) {
90
+            builder.append("private");
91
+        } else if (isProtected(modifiers)) {
92
+            builder.append("protected");
93
+        }
94
+        if (isAbstract(modifiers)) {
95
+            builder.append(" abstract");
96
+        } else if (isFinal(modifiers)) {
97
+            builder.append(" final");
98
+        } else if (isStatic(modifiers)) {
99
+            builder.append(" static");
100
+        }
101
+        return builder.toString();
102
+    }
103
+    
84 104
 }

+ 24
- 10
CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/member/TypeMemberGroup.java View File

@@ -5,26 +5,23 @@
5 5
  */
6 6
 package org.openzen.zenscript.codemodel.type.member;
7 7
 
8
-import java.util.ArrayList;
9
-import java.util.List;
10
-import java.util.Map;
11 8
 import org.openzen.zencode.shared.CodePosition;
12 9
 import org.openzen.zencode.shared.CompileException;
13 10
 import org.openzen.zencode.shared.CompileExceptionCode;
11
+import org.openzen.zenscript.codemodel.CompareType;
12
+import org.openzen.zenscript.codemodel.FunctionHeader;
14 13
 import org.openzen.zenscript.codemodel.expression.CallArguments;
14
+import org.openzen.zenscript.codemodel.expression.ConstExpression;
15 15
 import org.openzen.zenscript.codemodel.expression.Expression;
16 16
 import org.openzen.zenscript.codemodel.expression.GetFieldExpression;
17 17
 import org.openzen.zenscript.codemodel.expression.GetStaticFieldExpression;
18
+import org.openzen.zenscript.codemodel.expression.InvalidExpression;
19
+import org.openzen.zenscript.codemodel.expression.PostCallExpression;
18 20
 import org.openzen.zenscript.codemodel.expression.SetFieldExpression;
19 21
 import org.openzen.zenscript.codemodel.expression.SetStaticFieldExpression;
20 22
 import org.openzen.zenscript.codemodel.expression.SetterExpression;
21 23
 import org.openzen.zenscript.codemodel.expression.StaticSetterExpression;
22 24
 import org.openzen.zenscript.codemodel.generic.TypeParameter;
23
-import org.openzen.zenscript.codemodel.CompareType;
24
-import org.openzen.zenscript.codemodel.FunctionHeader;
25
-import org.openzen.zenscript.codemodel.expression.ConstExpression;
26
-import org.openzen.zenscript.codemodel.expression.InvalidExpression;
27
-import org.openzen.zenscript.codemodel.expression.PostCallExpression;
28 25
 import org.openzen.zenscript.codemodel.member.FunctionalMember;
29 26
 import org.openzen.zenscript.codemodel.member.ref.ConstMemberRef;
30 27
 import org.openzen.zenscript.codemodel.member.ref.FieldMemberRef;
@@ -35,6 +32,10 @@ import org.openzen.zenscript.codemodel.scope.TypeScope;
35 32
 import org.openzen.zenscript.codemodel.type.StoredType;
36 33
 import org.openzen.zenscript.codemodel.type.TypeID;
37 34
 
35
+import java.util.ArrayList;
36
+import java.util.List;
37
+import java.util.Map;
38
+
38 39
 /**
39 40
  *
40 41
  * @author Hoofdgebruiker
@@ -335,15 +336,28 @@ public class TypeMemberGroup {
335 336
 	
336 337
 	public FunctionalMemberRef selectMethod(CodePosition position, TypeScope scope, CallArguments arguments, boolean allowNonStatic, boolean allowStatic) throws CompileException {
337 338
 		// try to match with exact types
339
+        List<TypeMember<FunctionalMemberRef>> possibleMethods = new ArrayList<>();
338 340
 		for (TypeMember<FunctionalMemberRef> method : methods) {
339 341
 			if (!(method.member.isStatic() ? allowStatic : allowNonStatic))
340 342
 				continue;
341 343
 			
342 344
 			FunctionHeader header = method.member.getHeader().instanceForCall(position, scope.getTypeRegistry(), arguments);
343 345
 			if (header.matchesExactly(position, arguments, scope))
344
-				return method.member;
346
+			    possibleMethods.add(method);
345 347
 		}
346
-		
348
+        if (!possibleMethods.isEmpty()) {
349
+            TypeMember<FunctionalMemberRef> selectedMethod = null;
350
+            for (TypeMember<FunctionalMemberRef> method : possibleMethods) {
351
+                if (selectedMethod == null) {
352
+                    selectedMethod = method;
353
+                    continue;
354
+                }
355
+                
356
+                selectedMethod = selectedMethod.resolve(method);
357
+            }
358
+            if (selectedMethod != null)
359
+                return selectedMethod.member;
360
+        }
347 361
 		// try to match with approximate types
348 362
 		FunctionalMemberRef selected = null;
349 363
 		for (TypeMember<FunctionalMemberRef> method : methods) {

+ 9
- 8
CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/member/TypeMembers.java View File

@@ -5,15 +5,11 @@
5 5
  */
6 6
 package org.openzen.zenscript.codemodel.type.member;
7 7
 
8
-import java.util.ArrayList;
9
-import java.util.HashMap;
10
-import java.util.List;
11
-import java.util.Map;
12
-import java.util.Set;
13 8
 import org.openzen.zencode.shared.CodePosition;
14 9
 import org.openzen.zencode.shared.CompileException;
15 10
 import org.openzen.zencode.shared.CompileExceptionCode;
16 11
 import org.openzen.zenscript.codemodel.CompareType;
12
+import org.openzen.zenscript.codemodel.GenericName;
17 13
 import org.openzen.zenscript.codemodel.OperatorType;
18 14
 import org.openzen.zenscript.codemodel.expression.CallArguments;
19 15
 import org.openzen.zenscript.codemodel.expression.CheckNullExpression;
@@ -42,14 +38,19 @@ import org.openzen.zenscript.codemodel.partial.PartialMemberGroupExpression;
42 38
 import org.openzen.zenscript.codemodel.partial.PartialStaticMemberGroupExpression;
43 39
 import org.openzen.zenscript.codemodel.partial.PartialTypeExpression;
44 40
 import org.openzen.zenscript.codemodel.partial.PartialVariantOptionExpression;
41
+import org.openzen.zenscript.codemodel.scope.TypeScope;
45 42
 import org.openzen.zenscript.codemodel.type.BasicTypeID;
46 43
 import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
47
-import org.openzen.zenscript.codemodel.GenericName;
48 44
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
49
-import org.openzen.zenscript.codemodel.scope.TypeScope;
50 45
 import org.openzen.zenscript.codemodel.type.StoredType;
51 46
 import org.openzen.zenscript.codemodel.type.TypeID;
52 47
 
48
+import java.util.ArrayList;
49
+import java.util.HashMap;
50
+import java.util.List;
51
+import java.util.Map;
52
+import java.util.Set;
53
+
53 54
 /**
54 55
  *
55 56
  * @author Hoofdgebruiker
@@ -559,7 +560,7 @@ public final class TypeMembers {
559 560
 			if (implementation.member.implementsType.type.getNormalized() == toType.type)
560 561
 				return castEquivalent(position, new InterfaceCastExpression(position, value, implementation.member), toType);
561 562
 		}
562
-		if (extendsType(toType.type))
563
+		if (extendsOrImplements(toType.type))
563 564
 			return new SupertypeCastExpression(position, value, toType);
564 565
 		
565 566
 		return new InvalidExpression(position, toType, CompileExceptionCode.INVALID_CAST, "Could not cast " + toString() + " to " + toType);

+ 1
- 1
JavaIntegration/src/main/java/org/openzen/zencode/java/JavaNativeModule.java View File

@@ -562,7 +562,7 @@ public class JavaNativeModule {
562 562
 		final String actualName = split[split.length-1];
563 563
 
564 564
 		for (HighLevelDefinition value : this.definitionByClass.values()) {
565
-			if(value.name.equals(actualName) && value.pkg.equals(zsPackage))
565
+			if(actualName.equals(value.name) && value.pkg.equals(zsPackage))
566 566
 				return registry.getForMyDefinition(value);
567 567
 		}
568 568
 

Loading…
Cancel
Save