This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch GROOVY-11600
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit e41aff7071b1d281ad02b354f3633010e13612fc
Author: Eric Milles <[email protected]>
AuthorDate: Fri Apr 4 20:44:03 2025 -0500

    GROOVY-11600: no implicit outer class argument on inner record ctor call
---
 .../groovy/classgen/InnerClassVisitorHelper.java         |  5 +++--
 src/test/groovy/transform/stc/ConstructorsSTCTest.groovy | 16 ++++++++++++++++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitorHelper.java 
b/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitorHelper.java
index e508caa945..32c5395164 100644
--- a/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitorHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitorHelper.java
@@ -96,7 +96,8 @@ public abstract class InnerClassVisitorHelper extends 
ClassCodeVisitorSupport {
     }
 
     protected static boolean shouldHandleImplicitThisForInnerClass(final 
ClassNode cn) {
-        final int explicitOrImplicitStatic = Opcodes.ACC_STATIC | 
Opcodes.ACC_INTERFACE | Opcodes.ACC_ENUM;
-        return (cn.getModifiers() & explicitOrImplicitStatic) == 0 && (cn 
instanceof InnerClassNode && !((InnerClassNode) cn).isAnonymous());
+        final int explicitOrImplicitStatic = Opcodes.ACC_ENUM | 
Opcodes.ACC_INTERFACE | Opcodes.ACC_RECORD | Opcodes.ACC_STATIC;
+        return (cn.getModifiers() & explicitOrImplicitStatic) == 0 && (cn 
instanceof InnerClassNode && !((InnerClassNode) cn).isAnonymous())
+                && cn.getAnnotations().stream().noneMatch(aNode -> 
"groovy.transform.RecordType".equals(aNode.getClassNode().getName())); // 
GROOVY-11600
     }
 }
diff --git a/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy 
b/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy
index d8424bfe4c..80c0bc5b53 100644
--- a/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy
@@ -603,6 +603,22 @@ class ConstructorsSTCTest extends 
StaticTypeCheckingTestCase {
         '''
     }
 
+    // GROOVY-11600
+    void testInnerRecordConstructorCall() {
+        assertScript '''
+            class C {
+                record R(int i, Number n) {
+                }
+                void test() {
+                    def r = new C.R(1,2)
+                    assert r.i() == 1
+                    assert r.n() == 2
+                }
+            }
+            new C().test()
+        '''
+    }
+
     // GROOVY-11274
     void testPrivateDefaultConstructor() {
         shouldFailWithMessages '''

Reply via email to