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() {

Reply via email to