diff --git a/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FieldMember.java b/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FieldMember.java index d25752ff..e70c8d3a 100644 --- a/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FieldMember.java +++ b/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FieldMember.java @@ -152,6 +152,16 @@ public TypeID getType() { return type; } + @Override + public void setType(TypeID type) { + super.setType(type); + + if (autoGetter != null) + this.autoGetter.setType(type); + if (autoSetter != null) + this.autoSetter.setType(type); + } + @Override public Modifiers getModifiers() { return modifiers; diff --git a/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/GetterMember.java b/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/GetterMember.java index 14a8413f..b6e18a40 100644 --- a/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/GetterMember.java +++ b/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/GetterMember.java @@ -31,13 +31,18 @@ public void setBody(Statement body) { this.body = body; if (type == BasicTypeID.UNDETERMINED) { - body.getReturnType().ifPresent(returnType -> { - this.type = returnType; - this.header = new FunctionHeader(type); - }); + body.getReturnType().ifPresent(this::setType); } } + public void setType(TypeID type) { + if (type == null) { + throw new NullPointerException(); + } + this.type = type; + this.header = new FunctionHeader(type); + } + @Override public String getCanonicalName() { return definition.getFullName() + ":get:" + name; diff --git a/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/PropertyMember.java b/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/PropertyMember.java index d150cf9e..14a2cb91 100644 --- a/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/PropertyMember.java +++ b/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/PropertyMember.java @@ -14,7 +14,7 @@ public PropertyMember(CodePosition position, HighLevelDefinition definition, Mod if (type == null) throw new NullPointerException(); - this.type = type; + this.setType(type); } public TypeID getType() { diff --git a/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/SetterMember.java b/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/SetterMember.java index 796aaeca..42c2cdbe 100644 --- a/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/SetterMember.java +++ b/CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/SetterMember.java @@ -34,6 +34,15 @@ public void setBody(Statement body) { this.body = body; } + public void setType(TypeID type) { + if (type == null) { + throw new NullPointerException(); + } + this.type = type; + this.parameter = new FunctionParameter(type, "$"); + this.header = new FunctionHeader(BasicTypeID.VOID, this.parameter); + } + @Override public String getCanonicalName() { return definition.getFullName() + ":get:" + name; @@ -67,9 +76,7 @@ public R accept(C context, MemberVisitorWithContext visitor) { @Override public void inferFromOverride(MethodInstance overrides) { if (type == BasicTypeID.UNDETERMINED) { - this.type = overrides.getHeader().getReturnType(); - parameter = new FunctionParameter(overrides.getHeader().getReturnType(), "$"); - header = new FunctionHeader(BasicTypeID.VOID, parameter); + setType(overrides.getHeader().getReturnType()); } } diff --git a/ScriptingEngineTester/src/main/resources/zencode_tests/classes/field_with_initializer.zc b/ScriptingEngineTester/src/main/resources/zencode_tests/classes/field_with_initializer.zc new file mode 100644 index 00000000..b138a88c --- /dev/null +++ b/ScriptingEngineTester/src/main/resources/zencode_tests/classes/field_with_initializer.zc @@ -0,0 +1,7 @@ +#output: Hello World + +public class MyClass { + public static var myVariable = "Hello World"; +} + +println(MyClass.myVariable);