You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2015/08/06 05:26:59 UTC

incubator-groovy git commit: GROOVY-7522: TupleConstructor overwrites empty default constructors

Repository: incubator-groovy
Updated Branches:
  refs/heads/master b6ff4efed -> 1000bc5ba


GROOVY-7522: TupleConstructor overwrites empty default constructors


Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/1000bc5b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/1000bc5b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/1000bc5b

Branch: refs/heads/master
Commit: 1000bc5ba68df90acfdf1a63691efb2a5c9f3d39
Parents: b6ff4ef
Author: Paul King <pa...@asert.com.au>
Authored: Tue Jul 28 23:45:14 2015 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Thu Aug 6 13:26:28 2015 +1000

----------------------------------------------------------------------
 .../groovy/tools/javac/JavaStubGenerator.java         |  5 +++++
 .../transform/TupleConstructorASTTransformation.java  |  7 +------
 .../transform/TupleConstructorTransformTest.groovy    | 14 ++++++++++++++
 3 files changed, 20 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/1000bc5b/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java b/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
index f68be5e..a8e8b2e 100644
--- a/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
+++ b/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
@@ -197,7 +197,12 @@ public class JavaStubGenerator {
                     // not required for stub generation
                 }
             };
+            int origNumConstructors = classNode.getDeclaredConstructors().size();
             verifier.visitClass(classNode);
+            // undo unwanted side-effect of verifier
+            if (origNumConstructors == 0 && classNode.getDeclaredConstructors().size() == 1) {
+                classNode.getDeclaredConstructors().clear();
+            }
             currentModule = classNode.getModule();
 
             boolean isInterface = isInterfaceOrTrait(classNode);

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/1000bc5b/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index 08be539..7554ea7 100644
--- a/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -127,12 +127,7 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
 
     public static void createConstructor(AbstractASTTransformation xform, ClassNode cNode, boolean includeFields, boolean includeProperties, boolean includeSuperFields, boolean includeSuperProperties, boolean callSuper, boolean force, List<String> excludes, List<String> includes, boolean useSetters, boolean defaults) {
         // no processing if existing constructors found
-        List<ConstructorNode> constructors = cNode.getDeclaredConstructors();
-        if (constructors.size() > 1 && !force) return;
-        boolean foundEmpty = constructors.size() == 1 && constructors.get(0).getFirstStatement() == null;
-        if (constructors.size() == 1 && !foundEmpty && !force) return;
-        // HACK: JavaStubGenerator could have snuck in a constructor we don't want
-        if (foundEmpty) constructors.remove(0);
+        if (!cNode.getDeclaredConstructors().isEmpty() && !force) return;
 
         List<FieldNode> superList = new ArrayList<FieldNode>();
         if (includeSuperProperties) {

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/1000bc5b/src/test/org/codehaus/groovy/transform/TupleConstructorTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/TupleConstructorTransformTest.groovy b/src/test/org/codehaus/groovy/transform/TupleConstructorTransformTest.groovy
index feb39c5..d53ab66 100644
--- a/src/test/org/codehaus/groovy/transform/TupleConstructorTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/TupleConstructorTransformTest.groovy
@@ -36,6 +36,20 @@ class TupleConstructorTransformTest extends GroovyShellTestCase {
         """
     }
 
+    void testExistingEmptyConstructorTakesPrecedence_groovy7522() {
+        assertScript """
+            @groovy.transform.TupleConstructor
+            class Cat {
+                String name
+                int age
+                Cat(String name) {}
+            }
+
+            assert new Cat("Mr. Bigglesworth").name == null
+            assert Cat.declaredConstructors.size() == 1
+        """
+    }
+
     void testIncludesAndExcludesTogetherResultsInError() {
         def message = shouldFail {
             evaluate """