From b7a4758d8a46c8ccd743358606b2144c424f17f5 Mon Sep 17 00:00:00 2001 From: John Wagenleitner Date: Sat, 5 Aug 2017 11:15:04 -0700 Subject: [PATCH] GROOVY-8245: @Newify(auto=false) not transforming declarations --- .../transform/NewifyASTTransformation.java | 10 ++++++++- .../transform/NewifyTransformTest.groovy | 22 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/org/codehaus/groovy/transform/NewifyASTTransformation.java b/src/main/org/codehaus/groovy/transform/NewifyASTTransformation.java index 55ae7de7fd8..8c31449f45d 100644 --- a/src/main/org/codehaus/groovy/transform/NewifyASTTransformation.java +++ b/src/main/org/codehaus/groovy/transform/NewifyASTTransformation.java @@ -178,7 +178,7 @@ public Expression transform(Expression expr) { } } else if (expr instanceof DeclarationExpression) { DeclarationExpression de = (DeclarationExpression) expr; - if (de == candidate || auto) { + if (shouldTransform(de)) { candidate = null; Expression left = de.getLeftExpression(); Expression right = transform(de.getRightExpression()); @@ -191,6 +191,14 @@ public Expression transform(Expression expr) { return expr.transformExpression(this); } + private boolean shouldTransform(DeclarationExpression exp) { + return exp == candidate || auto || hasClassesToNewify(); + } + + private boolean hasClassesToNewify() { + return classesToNewify != null && !classesToNewify.getExpressions().isEmpty(); + } + private void newifyClass(ClassNode cNode, boolean autoFlag, ListExpression list) { String cName = cNode.getName(); if (cNode.isInterface()) { diff --git a/src/test/org/codehaus/groovy/transform/NewifyTransformTest.groovy b/src/test/org/codehaus/groovy/transform/NewifyTransformTest.groovy index e3e9890fdee..d585c8a32c1 100644 --- a/src/test/org/codehaus/groovy/transform/NewifyTransformTest.groovy +++ b/src/test/org/codehaus/groovy/transform/NewifyTransformTest.groovy @@ -189,4 +189,26 @@ class NewifyTransformTest extends GroovyShellTestCase { assert !new Z().foo() ''' } + + // GROOVY-8245 + void testDeclarationWhenAutoIsFalse() { + assertScript ''' + class Foo { + static int answer = 7 + Foo() { + answer = 42 + } + } + @Newify(auto=false, value=Foo) + class Bar { + static { + Foo foo = Foo() + } + static void method() {} + } + assert Foo.answer == 7 + Bar.method() + assert Foo.answer == 42 + ''' + } } \ No newline at end of file