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 2022/02/01 17:55:51 UTC

[groovy] 08/11: 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 GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git

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

    GROOVY-10197: namedArgs.containsKey(propertyName) isn't implicit-this
    
    Conflicts:
    	src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
---
 .../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 a9271cf..2b70572 100644
--- a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -37,6 +37,7 @@ import org.codehaus.groovy.ast.expr.BooleanExpression;
 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;
@@ -337,11 +338,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); // GROOVY-10197
+            block.addStatement(ifS(containsProperty, assignS(varX(pNode), propX(namedArgs, pNode.getName()))));
         }
         block.addStatement(stmt(callX(CHECK_METHOD_TYPE, "checkPropNames", args(varX("this"), namedArgs))));
         return block;
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()
-    }
 }
-