You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2021/08/13 18:16:27 UTC

[groovy] branch master updated: GROOVY-10197: namedArgs.containsKey(propertyName) isn't implicit-this

This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new 981e6b9  GROOVY-10197: namedArgs.containsKey(propertyName) isn't implicit-this
981e6b9 is described below

commit 981e6b9d9f6c8c2312f2f05afe89429788d8b59f
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Fri Aug 13 13:09:47 2021 -0500

    GROOVY-10197: namedArgs.containsKey(propertyName) isn't implicit-this
---
 .../TupleConstructorASTTransformation.java         | 10 ++++-----
 src/test/groovy/transform/stc/MiscSTCTest.groovy   | 24 +++++++++++++++++++++-
 .../classgen/asm/sc/MiscStaticCompileTest.groovy   |  8 --------
 3 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index 28bd7c8..b2cdad3 100644
--- a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -36,6 +36,7 @@ import org.codehaus.groovy.ast.PropertyNode;
 import org.codehaus.groovy.ast.expr.ClosureExpression;
 import org.codehaus.groovy.ast.expr.ConstantExpression;
 import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.MethodCallExpression;
 import org.codehaus.groovy.ast.expr.VariableExpression;
 import org.codehaus.groovy.ast.stmt.BlockStatement;
 import org.codehaus.groovy.ast.stmt.EmptyStatement;
@@ -333,11 +334,10 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
         for (PropertyNode pNode : cNode.getProperties()) {
             if (pNode.isStatic()) continue;
 
-            // if namedArgs.containsKey(propertyName) setProperty(propertyName, namedArgs.get(propertyName));
-            Statement ifStatement = ifS(
-                    callX(namedArgs, "containsKey", constX(pNode.getName())),
-                    assignS(varX(pNode), propX(namedArgs, pNode.getName())));
-            block.addStatement(ifStatement);
+            // if (namedArgs.containsKey(propertyName)) propertyNode= namedArgs.propertyName;
+            MethodCallExpression containsProperty = callX(namedArgs, "containsKey", constX(pNode.getName()));
+            containsProperty.setImplicitThis(false);
+            block.addStatement(ifS(containsProperty, assignS(varX(pNode), propX(namedArgs, pNode.getName()))));
             props.add(pNode);
         }
         boolean pojo = !cNode.getAnnotations(POJO_TYPE).isEmpty();
diff --git a/src/test/groovy/transform/stc/MiscSTCTest.groovy b/src/test/groovy/transform/stc/MiscSTCTest.groovy
index 94be0de..9bde8b8 100644
--- a/src/test/groovy/transform/stc/MiscSTCTest.groovy
+++ b/src/test/groovy/transform/stc/MiscSTCTest.groovy
@@ -172,7 +172,7 @@ class MiscSTCTest extends StaticTypeCheckingTestCase {
             1
         '''
     }
-    
+
     void testCompareEnumToNull() {
         assertScript '''
             enum MyEnum { a,b }
@@ -183,6 +183,28 @@ class MiscSTCTest extends StaticTypeCheckingTestCase {
         '''
     }
 
+    // GROOVY-10197
+    void testEnumMethodOverride() {
+        assertScript '''
+            enum E {
+                CONST {
+                    int getValue() { 1 }
+                }
+                int getValue() { -1 }
+            }
+            assert E.CONST.value == 1
+        '''
+        assertScript '''
+            enum E {
+                CONST {
+                    final int value = 1
+                }
+                int getValue() { -1 }
+            }
+            assert E.CONST.value == 1
+        '''
+    }
+
     void testMethodReturnTypeInferenceShouldNotWorkBecauseNotSameSourceUnit() {
         shouldFailWithMessages '''
             import groovy.transform.stc.MiscSTCTest.MiscSTCTestSupport as A
diff --git a/src/test/org/codehaus/groovy/classgen/asm/sc/MiscStaticCompileTest.groovy b/src/test/org/codehaus/groovy/classgen/asm/sc/MiscStaticCompileTest.groovy
index 4377ab0..ee2b851 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/MiscStaticCompileTest.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/MiscStaticCompileTest.groovy
@@ -31,17 +31,9 @@ class MiscStaticCompileTest extends MiscSTCTest implements StaticCompilationTest
             for(int i in 1..3){
               new File(dir, "testEachFileRecurse${i}.txt").createNewFile()
             }
-
             dir.eachFileRecurse(FileType.FILES) { File spec ->
             }
-
             dir.deleteDir()
         '''
     }
-
-    @Override
-    void testCompareEnumToNull() {
-        super.testCompareEnumToNull()
-    }
 }
-