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 43ddc4b357 GROOVY-11548: default method does not override superclass
`final` method
43ddc4b357 is described below
commit 43ddc4b35759a61009cc2945441fe672c9164504
Author: Eric Milles <[email protected]>
AuthorDate: Mon Feb 17 19:18:14 2025 -0600
GROOVY-11548: default method does not override superclass `final` method
---
.../codehaus/groovy/transform/trait/TraitComposer.java | 7 ++++++-
.../transform/traitx/TraitASTTransformationTest.groovy | 17 +++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git
a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
index 6a9091384d..63e4fe2c02 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
@@ -524,7 +524,12 @@ public abstract class TraitComposer {
}
private static MethodNode findExistingMethod(final ClassNode cNode, final
String name, final Parameter[] params) {
- return cNode.getDeclaredMethod(name, params);
+ MethodNode mNode = cNode.getDeclaredMethod(name, params);
+ if (mNode == null) { // GROOVY-11548: check for final method
+ mNode = Optional.ofNullable(cNode.getMethod(name, params))
+ .filter(m -> m.isFinal() && !m.isPrivate() &&
!m.isStatic()).orElse(null);
+ }
+ return mNode;
}
private static boolean shouldSkipMethod(final ClassNode cNode, final
String name, final Parameter[] params) {
diff --git
a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
index e06dca3854..b09550f321 100644
---
a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
+++
b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
@@ -3544,6 +3544,23 @@ final class TraitASTTransformationTest {
'''
}
+ // GROOVY-11548
+ @Test
+ void testFinalModifierSupport2() {
+ assertScript shell, '''
+ class Foo {
+ final m() { 'Foo' }
+ }
+ trait Bar {
+ def m() { 'Bar' }
+ }
+ class Baz extends Foo implements Bar {
+ }
+
+ assert new Baz().m() == 'Foo'
+ '''
+ }
+
// GROOVY-8880
@Test
void testTraitWithInitBlock() {