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 '''
