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