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

paulk 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 2a97313  GROOVY-10240: Support record grammar (inner records are 
implicitly static)
2a97313 is described below

commit 2a97313250875d60df82302f31d77dd7f07ae685
Author: Paul King <[email protected]>
AuthorDate: Mon Sep 27 10:19:25 2021 +1000

    GROOVY-10240: Support record grammar (inner records are implicitly static)
---
 .../codehaus/groovy/transform/RecordTypeASTTransformation.java |  8 ++++++++
 src/test/groovy/org/codehaus/groovy/classgen/RecordTest.groovy | 10 ++++++++++
 2 files changed, 18 insertions(+)

diff --git 
a/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java 
b/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java
index 35dc7b5..ecdde13 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java
@@ -28,6 +28,7 @@ import org.codehaus.groovy.ast.AnnotationNode;
 import org.codehaus.groovy.ast.ClassHelper;
 import org.codehaus.groovy.ast.ClassNode;
 import org.codehaus.groovy.ast.FieldNode;
+import org.codehaus.groovy.ast.InnerClassNode;
 import org.codehaus.groovy.ast.PropertyNode;
 import org.codehaus.groovy.ast.stmt.Statement;
 import org.codehaus.groovy.control.CompilationUnit;
@@ -86,6 +87,7 @@ public class RecordTypeASTTransformation extends 
AbstractASTTransformation imple
         String cName = cNode.getName();
         if (!checkNotInterface(cNode, MY_TYPE_NAME)) return;
         makeClassFinal(this, cNode);
+        makeInnerRecordStatic(cNode);
 
         final List<PropertyNode> pList = getInstanceProperties(cNode);
         for (PropertyNode pNode : pList) {
@@ -128,6 +130,12 @@ public class RecordTypeASTTransformation extends 
AbstractASTTransformation imple
         return false;
     }
 
+    private static void makeInnerRecordStatic(ClassNode cNode) {
+        if (cNode instanceof InnerClassNode) {
+            cNode.setModifiers(cNode.getModifiers() | ACC_STATIC);
+        }
+    }
+
     private static void makeClassFinal(AbstractASTTransformation xform, 
ClassNode cNode) {
         int modifiers = cNode.getModifiers();
         if ((modifiers & ACC_FINAL) == 0) {
diff --git a/src/test/groovy/org/codehaus/groovy/classgen/RecordTest.groovy 
b/src/test/groovy/org/codehaus/groovy/classgen/RecordTest.groovy
index f943c0a..fc95835 100644
--- a/src/test/groovy/org/codehaus/groovy/classgen/RecordTest.groovy
+++ b/src/test/groovy/org/codehaus/groovy/classgen/RecordTest.groovy
@@ -46,4 +46,14 @@ class RecordTest {
             assert java.lang.Record != RecordJDK16plus2.class.getSuperclass()
         ''')
     }
+
+    @Test
+    void testInnerRecordIsImplicitlyStatic() {
+        assertScript '''
+            class Test {
+                record Point(int i, int j) {}
+            }
+            assert java.lang.reflect.Modifier.isStatic(Test$Point.modifiers)
+        '''
+    }
 }

Reply via email to