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 """