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 14fcb08c0c GROOVY-11641: roll back
14fcb08c0c is described below

commit 14fcb08c0c2665d52ffdcd5b7aeeb30a06d6b1b0
Author: Eric Milles <eric.mil...@thomsonreuters.com>
AuthorDate: Wed May 7 13:17:17 2025 -0500

    GROOVY-11641: roll back
---
 src/main/java/groovy/lang/MetaClassImpl.java       | 12 ---------
 .../PropertyExpressionTransformer.java             |  4 ---
 .../transform/trait/TraitReceiverTransformer.java  |  2 --
 .../traitx/TraitASTTransformationTest.groovy       | 31 +++++++++++-----------
 4 files changed, 15 insertions(+), 34 deletions(-)

diff --git a/src/main/java/groovy/lang/MetaClassImpl.java 
b/src/main/java/groovy/lang/MetaClassImpl.java
index a6e4264fd1..6f5c181fd6 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -110,7 +110,6 @@ import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.function.BiConsumer;
-import java.util.regex.Pattern;
 
 import static groovy.lang.Tuple.tuple;
 import static java.lang.Character.isUpperCase;
@@ -145,11 +144,6 @@ public class MetaClassImpl implements MetaClass, 
MutableMetaClass {
     private static final MetaMethod AMBIGUOUS_LISTENER_METHOD = new 
DummyMetaMethod();
     private static final Comparator<CachedClass> CACHED_CLASS_NAME_COMPARATOR 
= Comparator.comparing(CachedClass::getName);
     private static final boolean PERMISSIVE_PROPERTY_ACCESS = 
SystemUtil.getBooleanSafe("groovy.permissive.property.access");
-    private static final Pattern TRAIT_FIELD;
-    static {
-        final var identifier = 
"[\\p{javaJavaIdentifierStart}&&[^_$]][\\p{javaJavaIdentifierPart}&&[^_$]]*"; 
// _ and $ are special
-        TRAIT_FIELD = Pattern.compile("(?:" + identifier + "_)*" + identifier 
+ "(?:\\$" + identifier + ")*__(" + identifier + ")");
-    }
     private static final VMPlugin VM_PLUGIN = VMPluginFactory.getPlugin();
 
     protected final Class theClass;
@@ -2366,12 +2360,6 @@ public class MetaClassImpl implements MetaClass, 
MutableMetaClass {
             }
             if (prop != null) {
                 staticPropertyIndex.put(name, prop);
-                if (!name.startsWith("$") && name.contains("__")) {
-                    var matcher = TRAIT_FIELD.matcher(name);
-                    if (matcher.matches()) { // GROOVY-11641
-                        staticPropertyIndex.putIfAbsent(matcher.group(1), 
prop);
-                    }
-                }
             }
         };
 
diff --git 
a/src/main/java/org/codehaus/groovy/transform/sc/transformers/PropertyExpressionTransformer.java
 
b/src/main/java/org/codehaus/groovy/transform/sc/transformers/PropertyExpressionTransformer.java
index a01a4ee22e..f4811f5779 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/sc/transformers/PropertyExpressionTransformer.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/sc/transformers/PropertyExpressionTransformer.java
@@ -40,10 +40,6 @@ class PropertyExpressionTransformer {
     }
 
     Expression transformPropertyExpression(final PropertyExpression pe) {
-        if (pe.getNodeMetaData(StaticTypesMarker.DYNAMIC_RESOLUTION) != null) {
-            return pe.transformExpression(scTransformer); // GROOVY-11641, etc.
-        }
-
         MethodNode dmct = 
pe.getNodeMetaData(StaticTypesMarker.DIRECT_METHOD_CALL_TARGET);
         // NOTE: BinaryExpressionTransformer handles the setter
         if (dmct != null && dmct.getParameters().length == 0) {
diff --git 
a/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
 
b/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
index 52b57304a2..a4a084b995 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
@@ -55,7 +55,6 @@ import static 
org.codehaus.groovy.ast.tools.GeneralUtils.isInstanceOfX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.ternaryX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
-import static 
org.codehaus.groovy.transform.stc.StaticTypesMarker.DYNAMIC_RESOLUTION;
 
 /**
  * This expression transformer is used internally by the {@link 
org.codehaus.groovy.transform.trait.TraitASTTransformation
@@ -124,7 +123,6 @@ class TraitReceiverTransformer extends 
ClassCodeExpressionTransformer {
                 }
             } else if (accessedVariable instanceof DynamicVariable && 
!inClosure) { // GROOVY-8049, GROOVY-9386
                 PropertyExpression propertyExpression = propX(varX(weaved), 
vexp.getName());
-                propertyExpression.putNodeMetaData(DYNAMIC_RESOLUTION, 
Boolean.TRUE);
                 propertyExpression.getProperty().setSourcePosition(exp);
                 return propertyExpression;
             }
diff --git 
a/src/test/groovy/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
 
b/src/test/groovy/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
index 97d53e52f9..e0bfd2b087 100644
--- 
a/src/test/groovy/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
+++ 
b/src/test/groovy/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
@@ -24,6 +24,7 @@ import org.codehaus.groovy.ast.ClassHelper
 import org.codehaus.groovy.ast.expr.ClassExpression
 import org.codehaus.groovy.ast.expr.ListExpression
 import org.junit.jupiter.api.Disabled
+import org.junit.jupiter.api.RepeatedTest
 import org.junit.jupiter.api.Test
 import org.junit.jupiter.params.ParameterizedTest
 import org.junit.jupiter.params.provider.ValueSource
@@ -431,21 +432,19 @@ final class TraitASTTransformationTest {
         '''
     }
 
-    @Test
+    @RepeatedTest(10)
     void testSimpleTraitInheritanceWithTraitOverridingMethodFromParent() {
-        10.times {
-            assertScript shell, '''
-                trait Top { String methodFromA() { 'A' } }
-                trait Bottom extends Top {
-                    String methodFromA() { 'B' }
-                    String methodFromB() { 'B' }
-                }
-                class Foo implements Bottom {}
-                def f = new Foo()
-                assert f.methodFromA() == 'B'
-                assert f.methodFromB() == 'B'
-            '''
-        }
+        assertScript shell, '''
+            trait Top { String methodFromA() { 'A' } }
+            trait Bottom extends Top {
+                String methodFromA() { 'B' }
+                String methodFromB() { 'B' }
+            }
+            class Foo implements Bottom {}
+            def f = new Foo()
+            assert f.methodFromA() == 'B'
+            assert f.methodFromB() == 'B'
+        '''
     }
 
     @Test
@@ -3714,7 +3713,7 @@ final class TraitASTTransformationTest {
     // GROOVY-11641
     @CompileModesTest
     void testTraitAccessToInheritedStaticMethods4(String mode) {
-        assertScript shell, """
+        shouldFail shell, """
             $mode
             trait Foo {
                 public static final String BANG = '!'
@@ -3722,7 +3721,7 @@ final class TraitASTTransformationTest {
             $mode
             trait Bar extends Foo {
                 static staticMethod(String string) {
-                    string + BANG
+                    string + BANG // requires qualifier
                 }
             }
             $mode

Reply via email to