Repository: groovy
Updated Branches:
refs/heads/master 49238eddd -> be7834c73
GROOVY-8281: Final field is null in trait, but it has assigned value
Project:
http://git-wip-us.apache.org/repos/asf/groovy/repoCommit:
http://git-wip-us.apache.org/repos/asf/groovy/commit/be7834c7Tree:
http://git-wip-us.apache.org/repos/asf/groovy/tree/be7834c7Diff:
http://git-wip-us.apache.org/repos/asf/groovy/diff/be7834c7Branch: refs/heads/master
Commit: be7834c73ff967372f7714bad3ec1c5b662d1456
Parents: 49238ed
Author: Paul King <
[hidden email]>
Authored: Tue Jul 10 21:51:57 2018 +1000
Committer: Paul King <
[hidden email]>
Committed: Tue Jul 10 21:51:57 2018 +1000
----------------------------------------------------------------------
.../transform/trait/TraitASTTransformation.java | 49 ++++++++++----------
.../traitx/TraitASTTransformationTest.groovy | 26 +++++++++--
2 files changed, 46 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/be7834c7/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
index f52ee6c..55d894c 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
@@ -452,32 +452,33 @@ public class TraitASTTransformation extends AbstractASTTransformation implements
returnS(initCode.getExpression())
);
helper.addMethod(fieldInitializer);
- }
- BlockStatement code = (BlockStatement) selectedMethod.getCode();
- MethodCallExpression mce;
- if (field.isStatic()) {
- if (staticFieldHelper != null) {
- target = staticFieldHelper;
- }
- mce = new MethodCallExpression(
- new ClassExpression(INVOKERHELPER_CLASSNODE),
- "invokeStaticMethod",
- new ArgumentListExpression(
- thisObject,
- new ConstantExpression(Traits.helperSetterName(field)),
- initCode.getExpression()
- )
- );
} else {
- mce = new MethodCallExpression(
- new CastExpression(createReceiverType(field.isStatic(), fieldHelper), thisObject),
- Traits.helperSetterName(field),
- new CastExpression(field.getOriginType(),initCode.getExpression())
- );
+ BlockStatement code = (BlockStatement) selectedMethod.getCode();
+ MethodCallExpression mce;
+ if (field.isStatic()) {
+ if (staticFieldHelper != null) {
+ target = staticFieldHelper;
+ }
+ mce = new MethodCallExpression(
+ new ClassExpression(INVOKERHELPER_CLASSNODE),
+ "invokeStaticMethod",
+ new ArgumentListExpression(
+ thisObject,
+ new ConstantExpression(Traits.helperSetterName(field)),
+ initCode.getExpression()
+ )
+ );
+ } else {
+ mce = new MethodCallExpression(
+ new CastExpression(createReceiverType(field.isStatic(), fieldHelper), thisObject),
+ Traits.helperSetterName(field),
+ new CastExpression(field.getOriginType(),initCode.getExpression())
+ );
+ }
+ mce.setImplicitThis(false);
+ mce.setSourcePosition(initialExpression);
+ code.addStatement(new ExpressionStatement(mce));
}
- mce.setImplicitThis(false);
- mce.setSourcePosition(initialExpression);
- code.addStatement(new ExpressionStatement(mce));
}
// define setter/getter helper methods (setter added even for final fields for legacy compatibility)
target.addMethod(
http://git-wip-us.apache.org/repos/asf/groovy/blob/be7834c7/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
index cd12aa3..439e680 100644
--- a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
@@ -524,7 +524,7 @@ assert MyEnum.X.bar == 123 && MyEnum.Y.bar == 0
@groovy.transform.CompileStatic
class StringProvider implements Provider<String> {}
def c = new StringProvider()
- assert c.get('foo') == 'foo\'
+ assert c.get('foo') == 'foo'
'''
}
@@ -1344,7 +1344,8 @@ class Person implements ListTrait<String> {
}
def p = new Person()
p.foo()
-assert p.get(0) == 'bar\''''
+assert p.get(0) == 'bar'
+'''
}
void testAnnotationShouldBeCarriedOver() {
@@ -2423,10 +2424,10 @@ assert c.b() == 2
String version
}
def module = configure(Module) {
- name = 'test\'
- version = '1.0\'
+ name = 'test'
+ version = '1.0'
}
- assert module.value == 'test-1.0\'
+ assert module.value == 'test-1.0'
'''
assertScript '''
@@ -2458,4 +2459,19 @@ assert c.b() == 2
'''
}
+ //GROOVY-8281
+ void testFinalFieldsDependency() {
+ assertScript '''
+ trait MyTrait {
+ private final String foo = 'foo'
+ private final String foobar = foo.toUpperCase() + 'bar'
+ int foobarSize() { foobar.size() }
+ }
+
+ class Baz implements MyTrait {}
+
+ assert new Baz().foobarSize() == 6
+ '''
+ }
+
}