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)
+ '''
+ }
}