浏览代码

Fix access modifiers

Stan Hebben 6 年前
父节点
当前提交
b6aa875e42
共有 38 个文件被更改,包括 221 次插入93 次删除
  1. 11
    11
      CodeFormatter/src/main/java/org/openzen/zenscript/formatter/MemberFormatter.java
  2. 1
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/AccessScope.java
  3. 9
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/HighLevelDefinition.java
  4. 1
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CallArguments.java
  5. 9
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetterExpression.java
  6. 7
    5
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/InterfaceCastExpression.java
  7. 8
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/StaticGetterExpression.java
  8. 10
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/CallerMember.java
  9. 9
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/CasterMember.java
  10. 11
    3
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ConstMember.java
  11. 7
    6
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ConstructorMember.java
  12. 8
    8
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/DefinitionMember.java
  13. 12
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FieldMember.java
  14. 11
    3
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FunctionalMember.java
  15. 11
    2
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/GetterMember.java
  16. 3
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/IDefinitionMember.java
  17. 12
    4
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ImplementationMember.java
  18. 11
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/InnerDefinitionMember.java
  19. 12
    5
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/MethodMember.java
  20. 11
    3
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/SetterMember.java
  21. 6
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/StaticInitializerMember.java
  22. 1
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ref/CasterMemberRef.java
  23. 2
    3
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ref/ImplementationMemberRef.java
  24. 3
    3
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/member/TypeMemberBuilder.java
  25. 4
    4
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/member/TypeMembers.java
  26. 3
    4
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaMemberVisitor.java
  27. 2
    2
      JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareClassMethodVisitor.java
  28. 1
    1
      JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareExpansionMethodVisitor.java
  29. 2
    2
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaExpansionMemberCompiler.java
  30. 4
    4
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaMemberCompiler.java
  31. 4
    0
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceExpressionFormatter.java
  32. 1
    1
      ModuleSerializer/src/main/java/org/openzen/zenscript/moduleserializer/encoder/DefinitionSerializer.java
  33. 1
    1
      ModuleSerializer/src/main/java/org/openzen/zenscript/moduleserializer/encoder/MemberSerializer.java
  34. 0
    1
      Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedFunctionalMember.java
  35. 0
    1
      Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedGetter.java
  36. 0
    1
      Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedSetter.java
  37. 7
    6
      Validator/src/main/java/org/openzen/zenscript/validator/visitors/DefinitionMemberValidator.java
  38. 6
    5
      Validator/src/main/java/org/openzen/zenscript/validator/visitors/ExpressionValidator.java

+ 11
- 11
CodeFormatter/src/main/java/org/openzen/zenscript/formatter/MemberFormatter.java 查看文件

58
 	@Override
58
 	@Override
59
 	public Void visitConst(ConstMember member) {
59
 	public Void visitConst(ConstMember member) {
60
 		visit(true);
60
 		visit(true);
61
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
61
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
62
 		output.append("const")
62
 		output.append("const")
63
 				.append(member.name)
63
 				.append(member.name)
64
 				.append(" as ")
64
 				.append(" as ")
72
 	@Override
72
 	@Override
73
 	public Void visitField(FieldMember member) {
73
 	public Void visitField(FieldMember member) {
74
 		visit(true);
74
 		visit(true);
75
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
75
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
76
 		output.append(member.isFinal() ? "val " : "var ")
76
 		output.append(member.isFinal() ? "val " : "var ")
77
 				.append(member.name)
77
 				.append(member.name)
78
 				.append(" as ")
78
 				.append(" as ")
89
 	@Override
89
 	@Override
90
 	public Void visitConstructor(ConstructorMember member) {
90
 	public Void visitConstructor(ConstructorMember member) {
91
 		visit(false);
91
 		visit(false);
92
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
92
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
93
 		output.append("this");
93
 		output.append("this");
94
 		FormattingUtils.formatHeader(output, settings, member.header, typeFormatter);
94
 		FormattingUtils.formatHeader(output, settings, member.header, typeFormatter);
95
 		formatBody(member.body);
95
 		formatBody(member.body);
99
 	@Override
99
 	@Override
100
 	public Void visitDestructor(DestructorMember member) {
100
 	public Void visitDestructor(DestructorMember member) {
101
 		visit(false);
101
 		visit(false);
102
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
102
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
103
 		output.append("this");
103
 		output.append("this");
104
 		formatBody(member.body);
104
 		formatBody(member.body);
105
 		return null;
105
 		return null;
108
 	@Override
108
 	@Override
109
 	public Void visitMethod(MethodMember member) {
109
 	public Void visitMethod(MethodMember member) {
110
 		visit(false);
110
 		visit(false);
111
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
111
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
112
 		output.append(member.name);
112
 		output.append(member.name);
113
 		FormattingUtils.formatHeader(output, settings, member.header, typeFormatter);
113
 		FormattingUtils.formatHeader(output, settings, member.header, typeFormatter);
114
 		formatBody(member.body);
114
 		formatBody(member.body);
118
 	@Override
118
 	@Override
119
 	public Void visitGetter(GetterMember member) {
119
 	public Void visitGetter(GetterMember member) {
120
 		visit(false);
120
 		visit(false);
121
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
121
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
122
 		output.append("get ");
122
 		output.append("get ");
123
 		output.append(member.name);
123
 		output.append(member.name);
124
 		output.append(" as ");
124
 		output.append(" as ");
130
 	@Override
130
 	@Override
131
 	public Void visitSetter(SetterMember member) {
131
 	public Void visitSetter(SetterMember member) {
132
 		visit(false);
132
 		visit(false);
133
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
133
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
134
 		output.append("set ");
134
 		output.append("set ");
135
 		output.append(member.name);
135
 		output.append(member.name);
136
 		output.append(" as ");
136
 		output.append(" as ");
142
 	@Override
142
 	@Override
143
 	public Void visitOperator(OperatorMember member) {
143
 	public Void visitOperator(OperatorMember member) {
144
 		visit(false);
144
 		visit(false);
145
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
145
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
146
 		switch (member.operator) {
146
 		switch (member.operator) {
147
 			case ADD: output.append("+"); break;
147
 			case ADD: output.append("+"); break;
148
 			case SUB: output.append("-"); break;
148
 			case SUB: output.append("-"); break;
184
 	@Override
184
 	@Override
185
 	public Void visitCaster(CasterMember member) {
185
 	public Void visitCaster(CasterMember member) {
186
 		visit(false);
186
 		visit(false);
187
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
187
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
188
 		output.append(" as ");
188
 		output.append(" as ");
189
 		output.append(typeFormatter.format(member.toType));
189
 		output.append(typeFormatter.format(member.toType));
190
 		formatBody(member.body);
190
 		formatBody(member.body);
200
 	@Override
200
 	@Override
201
 	public Void visitCaller(CallerMember member) {
201
 	public Void visitCaller(CallerMember member) {
202
 		visit(false);
202
 		visit(false);
203
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
203
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
204
 		FormattingUtils.formatHeader(output, settings, member.header, typeFormatter);
204
 		FormattingUtils.formatHeader(output, settings, member.header, typeFormatter);
205
 		formatBody(member.body);
205
 		formatBody(member.body);
206
 		return null;
206
 		return null;
209
 	@Override
209
 	@Override
210
 	public Void visitImplementation(ImplementationMember implementation) {
210
 	public Void visitImplementation(ImplementationMember implementation) {
211
 		visit(false);
211
 		visit(false);
212
-		FormattingUtils.formatModifiers(output, implementation.modifiers & ~Modifiers.FINAL);
212
+		FormattingUtils.formatModifiers(output, implementation.getSpecifiedModifiers());
213
 		output.append("implements ");
213
 		output.append("implements ");
214
 		output.append(implementation.type.accept(typeFormatter));
214
 		output.append(implementation.type.accept(typeFormatter));
215
 		if (settings.classBracketOnSameLine) {
215
 		if (settings.classBracketOnSameLine) {

+ 1
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/AccessScope.java 查看文件

23
 	public boolean hasAccessTo(AccessScope other, int access) {
23
 	public boolean hasAccessTo(AccessScope other, int access) {
24
 		if (Modifiers.isPublic(access))
24
 		if (Modifiers.isPublic(access))
25
 			return true;
25
 			return true;
26
-		if (definition == other.definition)
26
+		if (definition == other.definition || definition.isOuterOf(other.definition) || other.definition.isOuterOf(definition))
27
 			return true;
27
 			return true;
28
 		if (Modifiers.isPrivate(access))
28
 		if (Modifiers.isPrivate(access))
29
 			return false;
29
 			return false;

+ 9
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/HighLevelDefinition.java 查看文件

227
 		
227
 		
228
 		return null;
228
 		return null;
229
 	}
229
 	}
230
+
231
+	public boolean isOuterOf(HighLevelDefinition definition) {
232
+		if (definition.outerDefinition == this)
233
+			return true;
234
+		if (definition.outerDefinition == null)
235
+			return false;
236
+		
237
+		return isOuterOf(definition.outerDefinition);
238
+	}
230
 }
239
 }

+ 1
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CallArguments.java 查看文件

57
 		CallArguments result = this;
57
 		CallArguments result = this;
58
 		
58
 		
59
 		for (int i = 0; i < arguments.length; i++) {
59
 		for (int i = 0; i < arguments.length; i++) {
60
-			arguments[i] = arguments[i].castImplicit(position, scope, header.parameters[i].type);
60
+			arguments[i] = arguments[i].normalize(scope).castImplicit(position, scope, header.parameters[i].type);
61
 		}
61
 		}
62
 		
62
 		
63
 		if (arguments.length < header.parameters.length) {
63
 		if (arguments.length < header.parameters.length) {

+ 9
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetterExpression.java 查看文件

6
 package org.openzen.zenscript.codemodel.expression;
6
 package org.openzen.zenscript.codemodel.expression;
7
 
7
 
8
 import org.openzen.zencode.shared.CodePosition;
8
 import org.openzen.zencode.shared.CodePosition;
9
+import org.openzen.zencode.shared.CompileException;
9
 import org.openzen.zenscript.codemodel.member.ref.GetterMemberRef;
10
 import org.openzen.zenscript.codemodel.member.ref.GetterMemberRef;
10
 import org.openzen.zenscript.codemodel.scope.TypeScope;
11
 import org.openzen.zenscript.codemodel.scope.TypeScope;
12
+import org.openzen.zenscript.codemodel.type.member.TypeMembers;
11
 
13
 
12
 /**
14
 /**
13
  *
15
  *
44
 	public Expression normalize(TypeScope scope) {
46
 	public Expression normalize(TypeScope scope) {
45
 		return new GetterExpression(position, target.normalize(scope), getter);
47
 		return new GetterExpression(position, target.normalize(scope), getter);
46
 	}
48
 	}
49
+	
50
+	@Override
51
+	public Expression assign(CodePosition position, TypeScope scope, Expression value) throws CompileException {
52
+		return scope.getTypeMembers(getter.getOwnerType())
53
+				.getOrCreateGroup(getter.member.name, false)
54
+				.setter(position, scope, target, value, false);
55
+	}
47
 }
56
 }

+ 7
- 5
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/InterfaceCastExpression.java 查看文件

6
 package org.openzen.zenscript.codemodel.expression;
6
 package org.openzen.zenscript.codemodel.expression;
7
 
7
 
8
 import org.openzen.zencode.shared.CodePosition;
8
 import org.openzen.zencode.shared.CodePosition;
9
+import org.openzen.zenscript.codemodel.member.ref.ImplementationMemberRef;
9
 import org.openzen.zenscript.codemodel.scope.TypeScope;
10
 import org.openzen.zenscript.codemodel.scope.TypeScope;
10
-import org.openzen.zenscript.codemodel.type.StoredType;
11
 
11
 
12
 /**
12
 /**
13
  *
13
  *
15
  */
15
  */
16
 public class InterfaceCastExpression extends Expression {
16
 public class InterfaceCastExpression extends Expression {
17
 	public final Expression value;
17
 	public final Expression value;
18
+	public final ImplementationMemberRef implementation;
18
 	
19
 	
19
-	public InterfaceCastExpression(CodePosition position, Expression value, StoredType toType) {
20
-		super(position, toType, value.thrownType);
20
+	public InterfaceCastExpression(CodePosition position, Expression value, ImplementationMemberRef implementation) {
21
+		super(position, implementation.implementsType, value.thrownType);
21
 		
22
 		
22
 		this.value = value;
23
 		this.value = value;
24
+		this.implementation = implementation;
23
 	}
25
 	}
24
 
26
 
25
 	@Override
27
 	@Override
35
 	@Override
37
 	@Override
36
 	public Expression transform(ExpressionTransformer transformer) {
38
 	public Expression transform(ExpressionTransformer transformer) {
37
 		Expression tValue = value.transform(transformer);
39
 		Expression tValue = value.transform(transformer);
38
-		return value == tValue ? this : new InterfaceCastExpression(position, tValue, type);
40
+		return value == tValue ? this : new InterfaceCastExpression(position, tValue, implementation);
39
 	}
41
 	}
40
 
42
 
41
 	@Override
43
 	@Override
42
 	public Expression normalize(TypeScope scope) {
44
 	public Expression normalize(TypeScope scope) {
43
-		return new InterfaceCastExpression(position, value.normalize(scope), type.getNormalized());
45
+		return new InterfaceCastExpression(position, value.normalize(scope), implementation);
44
 	}
46
 	}
45
 }
47
 }

+ 8
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/StaticGetterExpression.java 查看文件

6
 package org.openzen.zenscript.codemodel.expression;
6
 package org.openzen.zenscript.codemodel.expression;
7
 
7
 
8
 import org.openzen.zencode.shared.CodePosition;
8
 import org.openzen.zencode.shared.CodePosition;
9
+import org.openzen.zencode.shared.CompileException;
9
 import org.openzen.zenscript.codemodel.member.ref.GetterMemberRef;
10
 import org.openzen.zenscript.codemodel.member.ref.GetterMemberRef;
10
 import org.openzen.zenscript.codemodel.scope.TypeScope;
11
 import org.openzen.zenscript.codemodel.scope.TypeScope;
11
 
12
 
41
 	public Expression normalize(TypeScope scope) {
42
 	public Expression normalize(TypeScope scope) {
42
 		return this;
43
 		return this;
43
 	}
44
 	}
45
+	
46
+	@Override
47
+	public Expression assign(CodePosition position, TypeScope scope, Expression value) throws CompileException {
48
+		return scope.getTypeMembers(getter.getOwnerType())
49
+				.getOrCreateGroup(getter.member.name, false)
50
+				.staticSetter(position, scope, value);
51
+	}
44
 }
52
 }

+ 10
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/CallerMember.java 查看文件

9
 import org.openzen.zenscript.codemodel.FunctionHeader;
9
 import org.openzen.zenscript.codemodel.FunctionHeader;
10
 import org.openzen.zenscript.codemodel.GenericMapper;
10
 import org.openzen.zenscript.codemodel.GenericMapper;
11
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
11
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
12
+import org.openzen.zenscript.codemodel.Modifiers;
12
 import org.openzen.zenscript.codemodel.member.ref.DefinitionMemberRef;
13
 import org.openzen.zenscript.codemodel.member.ref.DefinitionMemberRef;
13
 import org.openzen.zenscript.codemodel.member.ref.FunctionalMemberRef;
14
 import org.openzen.zenscript.codemodel.member.ref.FunctionalMemberRef;
14
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
15
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
63
 		return visitor.visitCaller(context, this);
64
 		return visitor.visitCaller(context, this);
64
 	}
65
 	}
65
 	
66
 	
67
+	@Override
68
+	public int getEffectiveModifiers() {
69
+		int result = super.getEffectiveModifiers();
70
+		if (overrides != null && overrides.getTarget().getDefinition().isInterface())
71
+			result |= Modifiers.PUBLIC;
72
+		
73
+		return result;
74
+	}
75
+	
66
 	public void setOverrides(GlobalTypeRegistry registry, FunctionalMemberRef overrides) {
76
 	public void setOverrides(GlobalTypeRegistry registry, FunctionalMemberRef overrides) {
67
 		this.overrides = overrides;
77
 		this.overrides = overrides;
68
 		header = header.inferFromOverride(registry, overrides.getHeader());
78
 		header = header.inferFromOverride(registry, overrides.getHeader());

+ 9
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/CasterMember.java 查看文件

76
 		return visitor.visitCaster(context, this);
76
 		return visitor.visitCaster(context, this);
77
 	}
77
 	}
78
 	
78
 	
79
+	@Override
80
+	public int getEffectiveModifiers() {
81
+		int result = super.getEffectiveModifiers();
82
+		if (overrides != null && overrides.getTarget().getDefinition().isInterface())
83
+			result |= Modifiers.PUBLIC;
84
+		
85
+		return result;
86
+	}
87
+	
79
 	public void setOverrides(GlobalTypeRegistry registry, CasterMemberRef overrides) {
88
 	public void setOverrides(GlobalTypeRegistry registry, CasterMemberRef overrides) {
80
 		this.overrides = overrides;
89
 		this.overrides = overrides;
81
 	}
90
 	}

+ 11
- 3
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ConstMember.java 查看文件

57
 	public DefinitionMemberRef getOverrides() {
57
 	public DefinitionMemberRef getOverrides() {
58
 		return null;
58
 		return null;
59
 	}
59
 	}
60
+	
61
+	@Override
62
+	public int getEffectiveModifiers() {
63
+		int result = modifiers;
64
+		if (definition.isInterface())
65
+			result |= Modifiers.PUBLIC;
66
+		if (!Modifiers.hasAccess(result))
67
+			result |= Modifiers.INTERNAL;
68
+		
69
+		return result;
70
+	}
60
 
71
 
61
 	@Override
72
 	@Override
62
 	public void normalize(TypeScope scope) {
73
 	public void normalize(TypeScope scope) {
63
-		if (!Modifiers.hasAccess(modifiers))
64
-			modifiers |= Modifiers.INTERNAL;
65
-		
66
 		type = type.getNormalized();
74
 		type = type.getNormalized();
67
 		value = value.normalize(scope);
75
 		value = value.normalize(scope);
68
 	}
76
 	}

+ 7
- 6
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ConstructorMember.java 查看文件

92
 	public DefinitionMemberRef getOverrides() {
92
 	public DefinitionMemberRef getOverrides() {
93
 		return null;
93
 		return null;
94
 	}
94
 	}
95
-
95
+	
96
 	@Override
96
 	@Override
97
-	public void normalize(TypeScope scope) {
97
+	public int getEffectiveModifiers() {
98
+		int result = modifiers;
98
 		if (definition instanceof EnumDefinition)
99
 		if (definition instanceof EnumDefinition)
99
-			modifiers |= Modifiers.PRIVATE;
100
-		else if (!Modifiers.hasAccess(modifiers))
101
-			modifiers |= Modifiers.INTERNAL;
100
+			result |= Modifiers.PRIVATE;
101
+		else if (!Modifiers.hasAccess(result))
102
+			result |= Modifiers.INTERNAL;
102
 		
103
 		
103
-		super.normalize(scope);
104
+		return result;
104
 	}
105
 	}
105
 }
106
 }

+ 8
- 8
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/DefinitionMember.java 查看文件

18
 public abstract class DefinitionMember extends Taggable implements IDefinitionMember {
18
 public abstract class DefinitionMember extends Taggable implements IDefinitionMember {
19
 	public final CodePosition position;
19
 	public final CodePosition position;
20
 	public final HighLevelDefinition definition;
20
 	public final HighLevelDefinition definition;
21
-	public int modifiers;
21
+	protected final int modifiers;
22
 	public MemberAnnotation[] annotations = MemberAnnotation.NONE;
22
 	public MemberAnnotation[] annotations = MemberAnnotation.NONE;
23
 	
23
 	
24
 	public DefinitionMember(CodePosition position, HighLevelDefinition definition, int modifiers) {
24
 	public DefinitionMember(CodePosition position, HighLevelDefinition definition, int modifiers) {
33
 	}
33
 	}
34
 	
34
 	
35
 	@Override
35
 	@Override
36
-	public int getModifiers() {
36
+	public int getSpecifiedModifiers() {
37
 		return modifiers;
37
 		return modifiers;
38
 	}
38
 	}
39
 	
39
 	
48
 	}
48
 	}
49
 	
49
 	
50
 	public boolean isStatic() {
50
 	public boolean isStatic() {
51
-		return Modifiers.isStatic(modifiers);
51
+		return Modifiers.isStatic(getEffectiveModifiers());
52
 	}
52
 	}
53
 	
53
 	
54
 	public boolean isFinal() {
54
 	public boolean isFinal() {
55
-		return Modifiers.isFinal(modifiers);
55
+		return Modifiers.isFinal(getEffectiveModifiers());
56
 	}
56
 	}
57
 	
57
 	
58
 	public boolean isExtern() {
58
 	public boolean isExtern() {
59
-		return Modifiers.isExtern(modifiers);
59
+		return Modifiers.isExtern(getEffectiveModifiers());
60
 	}
60
 	}
61
 	
61
 	
62
 	public boolean isPrivate() {
62
 	public boolean isPrivate() {
63
-		return Modifiers.isPrivate(modifiers);
63
+		return Modifiers.isPrivate(getEffectiveModifiers());
64
 	}
64
 	}
65
 	
65
 	
66
 	public boolean isPublic() {
66
 	public boolean isPublic() {
67
-		return Modifiers.isPublic(modifiers);
67
+		return Modifiers.isPublic(getEffectiveModifiers());
68
 	}
68
 	}
69
 	
69
 	
70
 	public boolean isProtected() {
70
 	public boolean isProtected() {
71
-		return Modifiers.isProtected(modifiers);
71
+		return Modifiers.isProtected(getEffectiveModifiers());
72
 	}
72
 	}
73
 }
73
 }

+ 12
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FieldMember.java 查看文件

5
  */
5
  */
6
 package org.openzen.zenscript.codemodel.member;
6
 package org.openzen.zenscript.codemodel.member;
7
 
7
 
8
+import java.lang.reflect.Modifier;
8
 import org.openzen.zencode.shared.CodePosition;
9
 import org.openzen.zencode.shared.CodePosition;
9
 import org.openzen.zenscript.codemodel.FunctionHeader;
10
 import org.openzen.zenscript.codemodel.FunctionHeader;
10
 import org.openzen.zenscript.codemodel.GenericMapper;
11
 import org.openzen.zenscript.codemodel.GenericMapper;
11
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
12
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
13
+import org.openzen.zenscript.codemodel.Modifiers;
12
 import org.openzen.zenscript.codemodel.expression.Expression;
14
 import org.openzen.zenscript.codemodel.expression.Expression;
13
 import org.openzen.zenscript.codemodel.expression.GetFieldExpression;
15
 import org.openzen.zenscript.codemodel.expression.GetFieldExpression;
14
 import org.openzen.zenscript.codemodel.expression.GetFunctionParameterExpression;
16
 import org.openzen.zenscript.codemodel.expression.GetFunctionParameterExpression;
121
 	@Override
123
 	@Override
122
 	public void registerTo(TypeMembers members, TypeMemberPriority priority, GenericMapper mapper) {
124
 	public void registerTo(TypeMembers members, TypeMemberPriority priority, GenericMapper mapper) {
123
 		members.addField(new FieldMemberRef(members.type, this, mapper), priority);
125
 		members.addField(new FieldMemberRef(members.type, this, mapper), priority);
126
+		
127
+		if (autoGetter != null)
128
+			autoGetter.registerTo(members, priority, mapper);
129
+		if (autoSetter != null)
130
+			autoSetter.registerTo(members, priority, mapper);
124
 	}
131
 	}
125
 	
132
 	
126
 	@Override
133
 	@Override
147
 	public DefinitionMemberRef getOverrides() {
154
 	public DefinitionMemberRef getOverrides() {
148
 		return null;
155
 		return null;
149
 	}
156
 	}
157
+	
158
+	@Override
159
+	public int getEffectiveModifiers() {
160
+		return modifiers;
161
+	}
150
 
162
 
151
 	@Override
163
 	@Override
152
 	public void normalize(TypeScope scope) {
164
 	public void normalize(TypeScope scope) {

+ 11
- 3
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FunctionalMember.java 查看文件

60
 	public BuiltinID getBuiltin() {
60
 	public BuiltinID getBuiltin() {
61
 		return builtin;
61
 		return builtin;
62
 	}
62
 	}
63
+	
64
+	@Override
65
+	public int getEffectiveModifiers() {
66
+		int result = modifiers;
67
+		if (definition.isInterface())
68
+			result |= Modifiers.PUBLIC;
69
+		if (!Modifiers.hasAccess(result))
70
+			result |= Modifiers.INTERNAL;
71
+		
72
+		return result;
73
+	}
63
 
74
 
64
 	@Override
75
 	@Override
65
 	public void normalize(TypeScope scope) {
76
 	public void normalize(TypeScope scope) {
66
-		if (!Modifiers.hasAccess(modifiers))
67
-			modifiers |= Modifiers.INTERNAL;
68
-		
69
 		header = header.normalize(scope.getTypeRegistry());
77
 		header = header.normalize(scope.getTypeRegistry());
70
 		if (body != null)
78
 		if (body != null)
71
 			body = body.normalize(scope, ConcatMap.empty(LoopStatement.class, LoopStatement.class));
79
 			body = body.normalize(scope, ConcatMap.empty(LoopStatement.class, LoopStatement.class));

+ 11
- 2
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/GetterMember.java 查看文件

79
 	public GetterMemberRef getOverrides() {
79
 	public GetterMemberRef getOverrides() {
80
 		return overrides;
80
 		return overrides;
81
 	}
81
 	}
82
+	
83
+	@Override
84
+	public int getEffectiveModifiers() {
85
+		int result = modifiers;
86
+		if (definition.isInterface() || (overrides != null && overrides.getTarget().getDefinition().isInterface()))
87
+			result |= Modifiers.PUBLIC;
88
+		if (!Modifiers.hasAccess(result))
89
+			result |= Modifiers.INTERNAL;
90
+		
91
+		return result;
92
+	}
82
 
93
 
83
 	@Override
94
 	@Override
84
 	public void normalize(TypeScope scope) {
95
 	public void normalize(TypeScope scope) {
85
-		if (!Modifiers.hasAccess(modifiers))
86
-			modifiers |= Modifiers.INTERNAL;
87
 		if (body != null)
96
 		if (body != null)
88
 			body = body.normalize(scope, ConcatMap.empty(LoopStatement.class, LoopStatement.class));
97
 			body = body.normalize(scope, ConcatMap.empty(LoopStatement.class, LoopStatement.class));
89
 	}
98
 	}

+ 3
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/IDefinitionMember.java 查看文件

25
 public interface IDefinitionMember {
25
 public interface IDefinitionMember {
26
 	public CodePosition getPosition();
26
 	public CodePosition getPosition();
27
 	
27
 	
28
-	public int getModifiers();
28
+	public int getSpecifiedModifiers();
29
+	
30
+	public int getEffectiveModifiers();
29
 	
31
 	
30
 	public MemberAnnotation[] getAnnotations();
32
 	public MemberAnnotation[] getAnnotations();
31
 	
33
 	

+ 12
- 4
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ImplementationMember.java 查看文件

42
 	@Override
42
 	@Override
43
 	public void registerTo(TypeMembers members, TypeMemberPriority priority, GenericMapper mapper) {
43
 	public void registerTo(TypeMembers members, TypeMemberPriority priority, GenericMapper mapper) {
44
 		TypeID instancedType = mapper == null ? type : mapper.map(position, type.stored()).type;
44
 		TypeID instancedType = mapper == null ? type : mapper.map(position, type.stored()).type;
45
-		members.addImplementation(new ImplementationMemberRef(this, members.type, instancedType), priority);
45
+		members.addImplementation(new ImplementationMemberRef(this, members.type, instancedType.stored(members.type.getSpecifiedStorage())), priority);
46
 		
46
 		
47
 		TypeMembers interfaceTypeMembers = members.getMemberCache().get(instancedType.stored(members.type.getActualStorage()));
47
 		TypeMembers interfaceTypeMembers = members.getMemberCache().get(instancedType.stored(members.type.getActualStorage()));
48
 		interfaceTypeMembers.copyMembersTo(position, members, TypeMemberPriority.INTERFACE);
48
 		interfaceTypeMembers.copyMembersTo(position, members, TypeMemberPriority.INTERFACE);
72
 	public DefinitionMemberRef getOverrides() {
72
 	public DefinitionMemberRef getOverrides() {
73
 		return null;
73
 		return null;
74
 	}
74
 	}
75
+	
76
+	@Override
77
+	public int getEffectiveModifiers() {
78
+		int result = modifiers;
79
+		if (definition.isInterface())
80
+			result |= Modifiers.PUBLIC;
81
+		if (!Modifiers.hasAccess(result))
82
+			result |= Modifiers.PUBLIC;
83
+		
84
+		return result;
85
+	}
75
 
86
 
76
 	@Override
87
 	@Override
77
 	public void normalize(TypeScope scope) {
88
 	public void normalize(TypeScope scope) {
78
-		if (!Modifiers.hasAccess(modifiers))
79
-			modifiers |= Modifiers.PUBLIC;
80
-		
81
 		for (IDefinitionMember member : members)
89
 		for (IDefinitionMember member : members)
82
 			member.normalize(scope);
90
 			member.normalize(scope);
83
 	}
91
 	}

+ 11
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/InnerDefinitionMember.java 查看文件

64
 	public DefinitionMemberRef getOverrides() {
64
 	public DefinitionMemberRef getOverrides() {
65
 		return null;
65
 		return null;
66
 	}
66
 	}
67
+	
68
+	@Override
69
+	public int getEffectiveModifiers() {
70
+		int result = modifiers;
71
+		if (definition.isInterface())
72
+			result |= Modifiers.PUBLIC;
73
+		if (!Modifiers.hasAccess(result))
74
+			result |= Modifiers.INTERNAL;
75
+		
76
+		return result;
77
+	}
67
 
78
 
68
 	@Override
79
 	@Override
69
 	public void normalize(TypeScope scope) {
80
 	public void normalize(TypeScope scope) {

+ 12
- 5
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/MethodMember.java 查看文件

59
 	public <C, R> R accept(C context, MemberVisitorWithContext<C, R> visitor) {
59
 	public <C, R> R accept(C context, MemberVisitorWithContext<C, R> visitor) {
60
 		return visitor.visitMethod(context, this);
60
 		return visitor.visitMethod(context, this);
61
 	}
61
 	}
62
+	
63
+	@Override
64
+	public int getEffectiveModifiers() {
65
+		int result = super.getEffectiveModifiers();
66
+		if (overrides != null) {
67
+			if (overrides.getTarget().isPublic())
68
+				result |= Modifiers.PUBLIC;
69
+			if (overrides.getTarget().isProtected())
70
+				result |= Modifiers.PROTECTED;
71
+		}
72
+		return result;
73
+	}
62
 
74
 
63
 	@Override
75
 	@Override
64
 	public FunctionalMemberRef getOverrides() {
76
 	public FunctionalMemberRef getOverrides() {
68
 	public void setOverrides(GlobalTypeRegistry registry, FunctionalMemberRef overrides) {
80
 	public void setOverrides(GlobalTypeRegistry registry, FunctionalMemberRef overrides) {
69
 		this.overrides = overrides;
81
 		this.overrides = overrides;
70
 		header = header.inferFromOverride(registry, overrides.getHeader());
82
 		header = header.inferFromOverride(registry, overrides.getHeader());
71
-		
72
-		if (overrides.getTarget().isPublic())
73
-			modifiers |= Modifiers.PUBLIC;
74
-		if (overrides.getTarget().isProtected())
75
-			modifiers |= Modifiers.PROTECTED;
76
 	}
83
 	}
77
 }
84
 }

+ 11
- 3
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/SetterMember.java 查看文件

79
 	public SetterMemberRef getOverrides() {
79
 	public SetterMemberRef getOverrides() {
80
 		return overrides;
80
 		return overrides;
81
 	}
81
 	}
82
+	
83
+	@Override
84
+	public int getEffectiveModifiers() {
85
+		int result = modifiers;
86
+		if (definition.isInterface() || (overrides != null && overrides.getTarget().getDefinition().isInterface()))
87
+			result |= Modifiers.PUBLIC;
88
+		if (!Modifiers.hasAccess(result))
89
+			result |= Modifiers.INTERNAL;
90
+		
91
+		return result;
92
+	}
82
 
93
 
83
 	@Override
94
 	@Override
84
 	public void normalize(TypeScope scope) {
95
 	public void normalize(TypeScope scope) {
85
-		if (!Modifiers.hasAccess(modifiers))
86
-			modifiers |= Modifiers.INTERNAL;
87
-		
88
 		if (body != null)
96
 		if (body != null)
89
 			body = body.normalize(scope, ConcatMap.empty(LoopStatement.class, LoopStatement.class));
97
 			body = body.normalize(scope, ConcatMap.empty(LoopStatement.class, LoopStatement.class));
90
 	}
98
 	}

+ 6
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/StaticInitializerMember.java 查看文件

10
 import org.openzen.zenscript.codemodel.FunctionHeader;
10
 import org.openzen.zenscript.codemodel.FunctionHeader;
11
 import org.openzen.zenscript.codemodel.GenericMapper;
11
 import org.openzen.zenscript.codemodel.GenericMapper;
12
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
12
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
13
+import org.openzen.zenscript.codemodel.Modifiers;
13
 import org.openzen.zenscript.codemodel.member.ref.DefinitionMemberRef;
14
 import org.openzen.zenscript.codemodel.member.ref.DefinitionMemberRef;
14
 import org.openzen.zenscript.codemodel.scope.TypeScope;
15
 import org.openzen.zenscript.codemodel.scope.TypeScope;
15
 import org.openzen.zenscript.codemodel.statement.LoopStatement;
16
 import org.openzen.zenscript.codemodel.statement.LoopStatement;
60
 	public DefinitionMemberRef getOverrides() {
61
 	public DefinitionMemberRef getOverrides() {
61
 		return null;
62
 		return null;
62
 	}
63
 	}
64
+	
65
+	@Override
66
+	public int getEffectiveModifiers() {
67
+		return modifiers;
68
+	}
63
 
69
 
64
 	@Override
70
 	@Override
65
 	public void normalize(TypeScope scope) {
71
 	public void normalize(TypeScope scope) {

+ 1
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ref/CasterMemberRef.java 查看文件

55
 	}
55
 	}
56
 	
56
 	
57
 	public boolean isImplicit() {
57
 	public boolean isImplicit() {
58
-		return Modifiers.isImplicit(member.modifiers);
58
+		return Modifiers.isImplicit(member.getSpecifiedModifiers());
59
 	}
59
 	}
60
 
60
 
61
 	@Override
61
 	@Override

+ 2
- 3
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ref/ImplementationMemberRef.java 查看文件

11
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
11
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
12
 import org.openzen.zenscript.codemodel.member.ImplementationMember;
12
 import org.openzen.zenscript.codemodel.member.ImplementationMember;
13
 import org.openzen.zenscript.codemodel.type.StoredType;
13
 import org.openzen.zenscript.codemodel.type.StoredType;
14
-import org.openzen.zenscript.codemodel.type.TypeID;
15
 
14
 
16
 /**
15
 /**
17
  *
16
  *
20
 public class ImplementationMemberRef implements DefinitionMemberRef {
19
 public class ImplementationMemberRef implements DefinitionMemberRef {
21
 	public final ImplementationMember member;
20
 	public final ImplementationMember member;
22
 	private final StoredType type;
21
 	private final StoredType type;
23
-	public final TypeID implementsType;
22
+	public final StoredType implementsType;
24
 	
23
 	
25
-	public ImplementationMemberRef(ImplementationMember member, StoredType owner, TypeID implementsType) {
24
+	public ImplementationMemberRef(ImplementationMember member, StoredType owner, StoredType implementsType) {
26
 		this.member = member;
25
 		this.member = member;
27
 		this.type = owner;
26
 		this.type = owner;
28
 		this.implementsType = implementsType;
27
 		this.implementsType = implementsType;

+ 3
- 3
CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/member/TypeMemberBuilder.java 查看文件

251
 			members.addConstructor(new ConstructorMember(
251
 			members.addConstructor(new ConstructorMember(
252
 					BUILTIN,
252
 					BUILTIN,
253
 					definition,
253
 					definition,
254
-					0,
254
+					Modifiers.PUBLIC,
255
 					new FunctionHeader(VOID.stored, indexGetParameters),
255
 					new FunctionHeader(VOID.stored, indexGetParameters),
256
 					ARRAY_CONSTRUCTOR_SIZED).ref(type));
256
 					ARRAY_CONSTRUCTOR_SIZED).ref(type));
257
 		}
257
 		}
264
 		new ConstructorMember(
264
 		new ConstructorMember(
265
 				BUILTIN,
265
 				BUILTIN,
266
 				definition,
266
 				definition,
267
-				0,
267
+				Modifiers.PUBLIC,
268
 				initialValueConstructorHeader,
268
 				initialValueConstructorHeader,
269
 				ARRAY_CONSTRUCTOR_INITIAL_VALUE)
269
 				ARRAY_CONSTRUCTOR_INITIAL_VALUE)
270
 				.registerTo(members, TypeMemberPriority.SPECIFIED, null);
270
 				.registerTo(members, TypeMemberPriority.SPECIFIED, null);
279
 		members.addConstructor(new ConstructorMember(
279
 		members.addConstructor(new ConstructorMember(
280
 				BUILTIN,
280
 				BUILTIN,
281
 				definition,
281
 				definition,
282
-				0,
282
+				Modifiers.PUBLIC,
283
 				lambdaConstructorHeader,
283
 				lambdaConstructorHeader,
284
 				ARRAY_CONSTRUCTOR_LAMBDA).ref(type));
284
 				ARRAY_CONSTRUCTOR_LAMBDA).ref(type));
285
 		
285
 		

+ 4
- 4
CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/member/TypeMembers.java 查看文件

94
 		}
94
 		}
95
 		
95
 		
96
 		for (TypeMember<ImplementationMemberRef> implementation : implementations) {
96
 		for (TypeMember<ImplementationMemberRef> implementation : implementations) {
97
-			if (implementation.member.implementsType.equals(other)) // TODO: for some reason duplicate types are generated
97
+			if (implementation.member.implementsType.type == other)
98
 				return true;
98
 				return true;
99
-			if (cache.get(implementation.member.implementsType.stored(type.getActualStorage())).extendsOrImplements(other))
99
+			if (cache.get(implementation.member.implementsType).extendsOrImplements(other))
100
 				return true;
100
 				return true;
101
 		}
101
 		}
102
 		
102
 		
487
 				return castEquivalent(position, caster.member.cast(position, value, implicit), toType);
487
 				return castEquivalent(position, caster.member.cast(position, value, implicit), toType);
488
 		}
488
 		}
489
 		for (TypeMember<ImplementationMemberRef> implementation : implementations) {
489
 		for (TypeMember<ImplementationMemberRef> implementation : implementations) {
490
-			if (implementation.member.implementsType.getNormalized() == toType.type)
491
-				return castEquivalent(position, new InterfaceCastExpression(position, value, toType.type.stored(type.getActualStorage())), toType);
490
+			if (implementation.member.implementsType.type.getNormalized() == toType.type)
491
+				return castEquivalent(position, new InterfaceCastExpression(position, value, implementation.member), toType);
492
 		}
492
 		}
493
 		if (extendsType(toType.type))
493
 		if (extendsType(toType.type))
494
 			return new SupertypeCastExpression(position, value, toType);
494
 			return new SupertypeCastExpression(position, value, toType);

+ 3
- 4
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaMemberVisitor.java 查看文件

1
 package org.openzen.zenscript.javabytecode.compiler.definitions;
1
 package org.openzen.zenscript.javabytecode.compiler.definitions;
2
 
2
 
3
-import org.openzen.zenscript.javashared.JavaTypeGenericVisitor;
4
 import org.objectweb.asm.ClassWriter;
3
 import org.objectweb.asm.ClassWriter;
5
 import org.objectweb.asm.Label;
4
 import org.objectweb.asm.Label;
6
 import org.objectweb.asm.Opcodes;
5
 import org.objectweb.asm.Opcodes;
43
 	@Override
42
 	@Override
44
 	public Void visitConst(ConstMember member) {
43
 	public Void visitConst(ConstMember member) {
45
 		JavaField field = member.getTag(JavaField.class);
44
 		JavaField field = member.getTag(JavaField.class);
46
-        writer.visitField(CompilerUtils.calcAccess(member.modifiers), field.name, field.descriptor, field.signature, null).visitEnd();
45
+        writer.visitField(CompilerUtils.calcAccess(member.getEffectiveModifiers()), field.name, field.descriptor, field.signature, null).visitEnd();
47
         return null;
46
         return null;
48
 	}
47
 	}
49
 
48
 
50
 	@Override
49
 	@Override
51
 	public Void visitField(FieldMember member) {
50
 	public Void visitField(FieldMember member) {
52
 		JavaField field = member.getTag(JavaField.class);
51
 		JavaField field = member.getTag(JavaField.class);
53
-        writer.visitField(CompilerUtils.calcAccess(member.modifiers), field.name, field.descriptor, field.signature, null).visitEnd();
52
+        writer.visitField(CompilerUtils.calcAccess(member.getEffectiveModifiers()), field.name, field.descriptor, field.signature, null).visitEnd();
54
         return null;
53
         return null;
55
     }
54
     }
56
 
55
 
120
     public Void visitMethod(MethodMember member) {
119
     public Void visitMethod(MethodMember member) {
121
         CompilerUtils.tagMethodParameters(context, member.header, member.isStatic());
120
         CompilerUtils.tagMethodParameters(context, member.header, member.isStatic());
122
 
121
 
123
-        final boolean isAbstract = member.body == null || Modifiers.isAbstract(member.modifiers);
122
+        final boolean isAbstract = member.body == null || Modifiers.isAbstract(member.getEffectiveModifiers());
124
         final JavaMethod method = member.getTag(JavaMethod.class);
123
         final JavaMethod method = member.getTag(JavaMethod.class);
125
 
124
 
126
 		final Label methodStart = new Label();
125
 		final Label methodStart = new Label();

+ 2
- 2
JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareClassMethodVisitor.java 查看文件

303
 					baseMethod.name,
303
 					baseMethod.name,
304
 					true,
304
 					true,
305
 					context.getMethodDescriptor(header),
305
 					context.getMethodDescriptor(header),
306
-					JavaModifiers.getJavaModifiers(member.modifiers),
306
+					JavaModifiers.getJavaModifiers(member.getEffectiveModifiers()),
307
 					header.getReturnType().type instanceof GenericTypeID);
307
 					header.getReturnType().type instanceof GenericTypeID);
308
 		} else if (method == null) {
308
 		} else if (method == null) {
309
 			method = new JavaMethod(
309
 			method = new JavaMethod(
312
 					name,
312
 					name,
313
 					true,
313
 					true,
314
 					context.getMethodDescriptor(header),
314
 					context.getMethodDescriptor(header),
315
-					JavaModifiers.getJavaModifiers(member.modifiers),
315
+					JavaModifiers.getJavaModifiers(member.getEffectiveModifiers()),
316
 					header.getReturnType().type instanceof GenericTypeID);
316
 					header.getReturnType().type instanceof GenericTypeID);
317
 		}
317
 		}
318
 		
318
 		

+ 1
- 1
JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareExpansionMethodVisitor.java 查看文件

161
 		if (nativeTag != null && nativeClass != null)
161
 		if (nativeTag != null && nativeClass != null)
162
 			method = nativeClass.getMethod(nativeTag.value);
162
 			method = nativeClass.getMethod(nativeTag.value);
163
 		if (method == null)
163
 		if (method == null)
164
-			method = new JavaMethod(cls, getKind(member), name, true, context.getMethodDescriptor(header), JavaModifiers.getJavaModifiers(member.modifiers), header.getReturnType().type instanceof GenericTypeID); 
164
+			method = new JavaMethod(cls, getKind(member), name, true, context.getMethodDescriptor(header), JavaModifiers.getJavaModifiers(member.getEffectiveModifiers()), header.getReturnType().type instanceof GenericTypeID); 
165
 		
165
 		
166
 		if (method.compile) {
166
 		if (method.compile) {
167
 			if (DEBUG_EMPTY && cls.empty)
167
 			if (DEBUG_EMPTY && cls.empty)

+ 2
- 2
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaExpansionMemberCompiler.java 查看文件

66
 		begin(ElementType.METHOD);
66
 		begin(ElementType.METHOD);
67
 		output.append(indent);
67
 		output.append(indent);
68
 		
68
 		
69
-		modifiers(member.modifiers | Modifiers.STATIC);
69
+		modifiers(member.getEffectiveModifiers() | Modifiers.STATIC);
70
 		if (member.isStatic())
70
 		if (member.isStatic())
71
 			JavaSourceUtils.formatTypeParameters(scope.typeVisitor, output, header.typeParameters, true);
71
 			JavaSourceUtils.formatTypeParameters(scope.typeVisitor, output, header.typeParameters, true);
72
 		else
72
 		else
82
 	@Override
82
 	@Override
83
 	public Void visitConst(ConstMember member) {
83
 	public Void visitConst(ConstMember member) {
84
 		begin(ElementType.FIELD);
84
 		begin(ElementType.FIELD);
85
-		modifiers(member.modifiers | Modifiers.STATIC | Modifiers.FINAL);
85
+		modifiers(member.getEffectiveModifiers() | Modifiers.STATIC | Modifiers.FINAL);
86
 		output.append(scope.type(member.type));
86
 		output.append(scope.type(member.type));
87
 		output.append(" ");
87
 		output.append(" ");
88
 		output.append(member.name);
88
 		output.append(member.name);

+ 4
- 4
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaMemberCompiler.java 查看文件

92
 		if (isInterface && hasBody)
92
 		if (isInterface && hasBody)
93
 			output.append("default ");
93
 			output.append("default ");
94
 		
94
 		
95
-		modifiers(member.modifiers);
95
+		modifiers(member.getEffectiveModifiers());
96
 		JavaSourceUtils.formatTypeParameters(scope.typeVisitor, output, header.typeParameters, true);
96
 		JavaSourceUtils.formatTypeParameters(scope.typeVisitor, output, header.typeParameters, true);
97
 		output.append(scope.typeVisitor.process(header.getReturnType()));
97
 		output.append(scope.typeVisitor.process(header.getReturnType()));
98
 		output.append(" ");
98
 		output.append(" ");
110
 		begin(ElementType.FIELD);
110
 		begin(ElementType.FIELD);
111
 		
111
 		
112
 		output.append(indent);
112
 		output.append(indent);
113
-		modifiers(member.modifiers | Modifiers.STATIC | Modifiers.FINAL);
113
+		modifiers(member.getEffectiveModifiers() | Modifiers.STATIC | Modifiers.FINAL);
114
 		output.append(scope.type(member.type));
114
 		output.append(scope.type(member.type));
115
 		output.append(" ");
115
 		output.append(" ");
116
 		output.append(member.name);
116
 		output.append(member.name);
155
 		begin(ElementType.CONSTRUCTOR);
155
 		begin(ElementType.CONSTRUCTOR);
156
 		
156
 		
157
 		output.append(indent);
157
 		output.append(indent);
158
-		modifiers(member.modifiers);
158
+		modifiers(member.getEffectiveModifiers());
159
 		JavaSourceUtils.formatTypeParameters(scope.typeVisitor, output, member.header.typeParameters, true);
159
 		JavaSourceUtils.formatTypeParameters(scope.typeVisitor, output, member.header.typeParameters, true);
160
 		output.append(scope.cls.getName());
160
 		output.append(scope.cls.getName());
161
 		formatParameters(member.isStatic(), member.header);
161
 		formatParameters(member.isStatic(), member.header);
234
 			
234
 			
235
 			begin(ElementType.FIELD);
235
 			begin(ElementType.FIELD);
236
 			output.append(indent);
236
 			output.append(indent);
237
-			modifiers(member.modifiers);
237
+			modifiers(member.getEffectiveModifiers());
238
 			output.append("final ").append(scope.type(member.type)).append(" as").append(interfaceName).append(" = new ").append(implementationName).append("();\n");
238
 			output.append("final ").append(scope.type(member.type)).append(" as").append(interfaceName).append(" = new ").append(implementationName).append("();\n");
239
 			
239
 			
240
 			begin(ElementType.INNERCLASS);
240
 			begin(ElementType.INNERCLASS);

+ 4
- 0
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceExpressionFormatter.java 查看文件

462
 	public ExpressionString visitGetter(GetterExpression expression) {
462
 	public ExpressionString visitGetter(GetterExpression expression) {
463
 		if (expression.getter.member.builtin != null)
463
 		if (expression.getter.member.builtin != null)
464
 			return visitBuiltinGetter(expression, expression.getter.member.builtin);
464
 			return visitBuiltinGetter(expression, expression.getter.member.builtin);
465
+		if (expression.getter.member.hasTag(JavaField.class)) {
466
+			JavaField field = expression.getter.member.getTag(JavaField.class);
467
+			return expression.target.accept(this).unaryPostfix(JavaOperator.MEMBER, "." + field.name);
468
+		}
465
 		
469
 		
466
 		JavaMethod method = expression.getter.getTag(JavaMethod.class);
470
 		JavaMethod method = expression.getter.getTag(JavaMethod.class);
467
 		StringBuilder result = new StringBuilder();
471
 		StringBuilder result = new StringBuilder();

+ 1
- 1
ModuleSerializer/src/main/java/org/openzen/zenscript/moduleserializer/encoder/DefinitionSerializer.java 查看文件

84
 		for (InnerDefinitionMember innerDefinition : innerDefinitions) {
84
 		for (InnerDefinitionMember innerDefinition : innerDefinitions) {
85
 			System.out.println("Inner definition: " + innerDefinition.definition.name);
85
 			System.out.println("Inner definition: " + innerDefinition.definition.name);
86
 			output.serialize(innerDefinition.position);
86
 			output.serialize(innerDefinition.position);
87
-			output.writeUInt(innerDefinition.modifiers);
87
+			output.writeUInt(innerDefinition.getSpecifiedModifiers());
88
 			innerDefinition.innerDefinition.accept(moduleContext, this);
88
 			innerDefinition.innerDefinition.accept(moduleContext, this);
89
 		}
89
 		}
90
 		
90
 		

+ 1
- 1
ModuleSerializer/src/main/java/org/openzen/zenscript/moduleserializer/encoder/MemberSerializer.java 查看文件

61
 		if ((flags & MemberEncoding.FLAG_POSITION) > 0)
61
 		if ((flags & MemberEncoding.FLAG_POSITION) > 0)
62
 			output.serialize(member.getPosition());
62
 			output.serialize(member.getPosition());
63
 		
63
 		
64
-		output.writeUInt(member.getModifiers());
64
+		output.writeUInt(member.getSpecifiedModifiers());
65
 		
65
 		
66
 		if (member.getAnnotations().length > 0) {
66
 		if (member.getAnnotations().length > 0) {
67
 			output.enqueueCode(output -> {
67
 			output.enqueueCode(output -> {

+ 0
- 1
Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedFunctionalMember.java 查看文件

52
 	protected void inferHeaders(BaseScope scope) throws CompileException {
52
 	protected void inferHeaders(BaseScope scope) throws CompileException {
53
 		if ((implementation != null && !Modifiers.isPrivate(modifiers))) {
53
 		if ((implementation != null && !Modifiers.isPrivate(modifiers))) {
54
 			fillOverride(scope, implementation.getCompiled().type.stored(BorrowStorageTag.THIS));
54
 			fillOverride(scope, implementation.getCompiled().type.stored(BorrowStorageTag.THIS));
55
-			getCompiled().modifiers |= Modifiers.PUBLIC;
56
 		} else if (implementation == null && Modifiers.isOverride(modifiers)) {
55
 		} else if (implementation == null && Modifiers.isOverride(modifiers)) {
57
 			if (definition.getSuperType() == null)
56
 			if (definition.getSuperType() == null)
58
 				throw new CompileException(position, CompileExceptionCode.OVERRIDE_WITHOUT_BASE, "Override specified without base type");
57
 				throw new CompileException(position, CompileExceptionCode.OVERRIDE_WITHOUT_BASE, "Override specified without base type");

+ 0
- 1
Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedGetter.java 查看文件

72
 	private void inferHeaders(BaseScope scope) throws CompileException {
72
 	private void inferHeaders(BaseScope scope) throws CompileException {
73
 		if ((implementation != null && !Modifiers.isPrivate(modifiers))) {
73
 		if ((implementation != null && !Modifiers.isPrivate(modifiers))) {
74
 			fillOverride(scope, implementation.getCompiled().type.stored(BorrowStorageTag.THIS));
74
 			fillOverride(scope, implementation.getCompiled().type.stored(BorrowStorageTag.THIS));
75
-			compiled.modifiers |= Modifiers.PUBLIC;
76
 		} else if (implementation == null && Modifiers.isOverride(modifiers)) {
75
 		} else if (implementation == null && Modifiers.isOverride(modifiers)) {
77
 			if (definition.getSuperType() == null)
76
 			if (definition.getSuperType() == null)
78
 				throw new CompileException(position, CompileExceptionCode.OVERRIDE_WITHOUT_BASE, "Override specified without base type");
77
 				throw new CompileException(position, CompileExceptionCode.OVERRIDE_WITHOUT_BASE, "Override specified without base type");

+ 0
- 1
Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedSetter.java 查看文件

71
 	private void inferHeaders(BaseScope scope) throws CompileException {
71
 	private void inferHeaders(BaseScope scope) throws CompileException {
72
 		if ((implementation != null && !Modifiers.isPrivate(modifiers))) {
72
 		if ((implementation != null && !Modifiers.isPrivate(modifiers))) {
73
 			fillOverride(scope, implementation.getCompiled().type.stored(scope.getThisType().getSpecifiedStorage()));
73
 			fillOverride(scope, implementation.getCompiled().type.stored(scope.getThisType().getSpecifiedStorage()));
74
-			compiled.modifiers |= Modifiers.PUBLIC;
75
 		} else if (implementation == null && Modifiers.isOverride(modifiers)) {
74
 		} else if (implementation == null && Modifiers.isOverride(modifiers)) {
76
 			if (definition.getSuperType() == null)
75
 			if (definition.getSuperType() == null)
77
 				throw new CompileException(position, CompileExceptionCode.OVERRIDE_WITHOUT_BASE, "Override specified without base type");
76
 				throw new CompileException(position, CompileExceptionCode.OVERRIDE_WITHOUT_BASE, "Override specified without base type");

+ 7
- 6
Validator/src/main/java/org/openzen/zenscript/validator/visitors/DefinitionMemberValidator.java 查看文件

77
 	public Void visitConst(ConstMember member) {
77
 	public Void visitConst(ConstMember member) {
78
 		ValidationUtils.validateModifiers(
78
 		ValidationUtils.validateModifiers(
79
 				validator,
79
 				validator,
80
-				member.modifiers,
80
+				member.getEffectiveModifiers(),
81
 				Modifiers.PUBLIC | Modifiers.PROTECTED | Modifiers.PRIVATE,
81
 				Modifiers.PUBLIC | Modifiers.PROTECTED | Modifiers.PRIVATE,
82
 				member.position,
82
 				member.position,
83
 				"Invalid modifier");
83
 				"Invalid modifier");
87
 					member.position,
87
 					member.position,
88
 					"Expression type doesn't match const type");
88
 					"Expression type doesn't match const type");
89
 		}
89
 		}
90
+		member.value.accept(new ExpressionValidator(validator, new FieldInitializerScope(member)));
90
 		return null;
91
 		return null;
91
 	}
92
 	}
92
 	
93
 	
294
 	}
295
 	}
295
 	
296
 	
296
 	private void validateFunctional(FunctionalMember member, StatementScope scope) {
297
 	private void validateFunctional(FunctionalMember member, StatementScope scope) {
297
-		if (Modifiers.isOverride(member.modifiers) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
298
+		if (Modifiers.isOverride(member.getEffectiveModifiers()) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
298
 			if (member.getOverrides() == null) {
299
 			if (member.getOverrides() == null) {
299
 				validator.logError(ValidationLogEntry.Code.OVERRIDE_MISSING_BASE, member.position, "Overridden method not identified");
300
 				validator.logError(ValidationLogEntry.Code.OVERRIDE_MISSING_BASE, member.position, "Overridden method not identified");
300
 			} else {
301
 			} else {
310
 	}
311
 	}
311
 	
312
 	
312
 	private void validateGetter(GetterMember member, StatementScope scope) {
313
 	private void validateGetter(GetterMember member, StatementScope scope) {
313
-		if (Modifiers.isOverride(member.modifiers) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
314
+		if (Modifiers.isOverride(member.getEffectiveModifiers()) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
314
 			if (member.getOverrides() == null) {
315
 			if (member.getOverrides() == null) {
315
 				validator.logError(ValidationLogEntry.Code.OVERRIDE_MISSING_BASE, member.position, "Overridden method not identified");
316
 				validator.logError(ValidationLogEntry.Code.OVERRIDE_MISSING_BASE, member.position, "Overridden method not identified");
316
 			}
317
 			}
325
 	}
326
 	}
326
 	
327
 	
327
 	private void validateSetter(SetterMember member, StatementScope scope) {
328
 	private void validateSetter(SetterMember member, StatementScope scope) {
328
-		if (Modifiers.isOverride(member.modifiers) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
329
+		if (Modifiers.isOverride(member.getEffectiveModifiers()) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
329
 			if (member.getOverrides() == null) {
330
 			if (member.getOverrides() == null) {
330
 				validator.logError(ValidationLogEntry.Code.OVERRIDE_MISSING_BASE, member.position, "Overridden method not identified");
331
 				validator.logError(ValidationLogEntry.Code.OVERRIDE_MISSING_BASE, member.position, "Overridden method not identified");
331
 			}
332
 			}
339
 	}
340
 	}
340
 	
341
 	
341
 	private class FieldInitializerScope implements ExpressionScope {
342
 	private class FieldInitializerScope implements ExpressionScope {
342
-		private final FieldMember field;
343
+		private final DefinitionMember field;
343
 		
344
 		
344
-		public FieldInitializerScope(FieldMember field) {
345
+		public FieldInitializerScope(DefinitionMember field) {
345
 			this.field = field;
346
 			this.field = field;
346
 		}
347
 		}
347
 		
348
 		

+ 6
- 5
Validator/src/main/java/org/openzen/zenscript/validator/visitors/ExpressionValidator.java 查看文件

336
 	@Override
336
 	@Override
337
 	public Void visitGetter(GetterExpression expression) {
337
 	public Void visitGetter(GetterExpression expression) {
338
 		checkMemberAccess(expression.position, expression.getter);
338
 		checkMemberAccess(expression.position, expression.getter);
339
-		checkStatic(expression.position, expression.getter);
339
+		checkNotStatic(expression.position, expression.getter);
340
 		return expression.target.accept(this);
340
 		return expression.target.accept(this);
341
 	}
341
 	}
342
 	
342
 	
725
 	}
725
 	}
726
 	
726
 	
727
 	private void checkMemberAccess(CodePosition position, DefinitionMemberRef member) {
727
 	private void checkMemberAccess(CodePosition position, DefinitionMemberRef member) {
728
-		if (!scope.getAccessScope().hasAccessTo(member.getTarget().getAccessScope(), member.getTarget().getModifiers()))
728
+		if (!scope.getAccessScope().hasAccessTo(member.getTarget().getAccessScope(), member.getTarget().getEffectiveModifiers())) {
729
 			validator.logError(ValidationLogEntry.Code.NO_ACCESS, position, "no access to " + member.describe());
729
 			validator.logError(ValidationLogEntry.Code.NO_ACCESS, position, "no access to " + member.describe());
730
+		}
730
 	}
731
 	}
731
 
732
 
732
 	private void checkFieldAccess(CodePosition position, FieldMemberRef field) {
733
 	private void checkFieldAccess(CodePosition position, FieldMemberRef field) {
733
-		if (!scope.getAccessScope().equals(field.getTarget().getAccessScope()))
734
+		if (!scope.getAccessScope().hasAccessTo(field.getTarget().getAccessScope(), Modifiers.PRIVATE))
734
 			validator.logError(ValidationLogEntry.Code.NO_ACCESS, position, "fields are private");
735
 			validator.logError(ValidationLogEntry.Code.NO_ACCESS, position, "fields are private");
735
 	}
736
 	}
736
 	
737
 	
737
 	private void checkStatic(CodePosition position, DefinitionMemberRef member) {
738
 	private void checkStatic(CodePosition position, DefinitionMemberRef member) {
738
-		if (!Modifiers.isStatic(member.getTarget().getModifiers()))
739
+		if (!Modifiers.isStatic(member.getTarget().getSpecifiedModifiers()))
739
 			validator.logError(ValidationLogEntry.Code.MUST_BE_STATIC, position, "Member is not static");
740
 			validator.logError(ValidationLogEntry.Code.MUST_BE_STATIC, position, "Member is not static");
740
 	}
741
 	}
741
 	
742
 	
742
 	private void checkNotStatic(CodePosition position, DefinitionMemberRef member) {
743
 	private void checkNotStatic(CodePosition position, DefinitionMemberRef member) {
743
-		if (Modifiers.isStatic(member.getTarget().getModifiers()))
744
+		if (Modifiers.isStatic(member.getTarget().getSpecifiedModifiers()))
744
 			validator.logError(ValidationLogEntry.Code.MUST_NOT_BE_STATIC, position, "Member must not be static");
745
 			validator.logError(ValidationLogEntry.Code.MUST_NOT_BE_STATIC, position, "Member must not be static");
745
 	}
746
 	}
746
 	
747
 	

正在加载...
取消
保存