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 <[email protected]>
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