You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2025/04/05 02:16:26 UTC
(groovy) 02/02: GROOVY-11600: no implicit outer class argument on inner record ctor call
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 <er...@thomsonreuters.com>
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 '''