Skip to content

Commit cd3f157

Browse files
committed
GROOVY-11956: refactor RecordBase checking
1 parent 7203ff7 commit cd3f157

5 files changed

Lines changed: 161 additions & 171 deletions

File tree

src/main/java/org/codehaus/groovy/transform/BuilderASTTransformation.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import groovy.lang.GroovyClassLoader;
2222
import groovy.transform.CompilationUnitAware;
23-
import groovy.transform.RecordBase;
2423
import groovy.transform.builder.Builder;
2524
import groovy.transform.builder.DefaultStrategy;
2625
import org.codehaus.groovy.ast.ASTNode;
@@ -59,7 +58,6 @@ public class BuilderASTTransformation extends AbstractASTTransformation implemen
5958
private static final Class<?> MY_CLASS = Builder.class;
6059
private static final ClassNode MY_TYPE = make(MY_CLASS);
6160
public static final String MY_TYPE_NAME = "@" + MY_TYPE.getNameWithoutPackage();
62-
private static final ClassNode RECORD_TYPE = make(RecordBase.class, false);
6361
public static final ClassNode[] NO_EXCEPTIONS = ClassNode.EMPTY_ARRAY;
6462
public static final Parameter[] NO_PARAMS = Parameter.EMPTY_ARRAY;
6563

@@ -87,7 +85,7 @@ public void visit(ASTNode[] nodes, SourceUnit source) {
8785
if (!checkNotInterface(cn, MY_TYPE_NAME)) {
8886
return;
8987
}
90-
if (hasAnnotation(cn, RECORD_TYPE)) {
88+
if (hasAnnotation(cn, RecordTypeASTTransformation.MY_TYPE)) {
9189
// we'll later create a tuple constructor and move the builder annotation
9290
// to it but let's create a mock constructor node for now
9391
int size = cn.getProperties().size();

src/main/java/org/codehaus/groovy/transform/RecordCompletionASTTransformation.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import org.codehaus.groovy.control.SourceUnit;
3636
import org.codehaus.groovy.transform.stc.StaticTypesMarker;
3737

38-
import java.lang.annotation.Annotation;
3938
import java.util.ArrayList;
4039
import java.util.List;
4140

@@ -51,8 +50,7 @@
5150
@GroovyASTTransformation(phase = CompilePhase.INSTRUCTION_SELECTION)
5251
public class RecordCompletionASTTransformation extends AbstractASTTransformation {
5352

54-
private static final Class<? extends Annotation> MY_CLASS = RecordBase.class;
55-
public static final ClassNode MY_TYPE = makeWithoutCaching(MY_CLASS, false);
53+
public static final ClassNode MY_TYPE = makeWithoutCaching(RecordBase.class, false);
5654
private static final String MY_TYPE_NAME = MY_TYPE.getNameWithoutPackage();
5755

5856
@Override

src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
import java.beans.MethodDescriptor;
6464
import java.beans.PropertyDescriptor;
6565
import java.beans.SimpleBeanInfo;
66-
import java.lang.annotation.Annotation;
6766
import java.util.ArrayList;
6867
import java.util.Collections;
6968
import java.util.LinkedList;
@@ -153,8 +152,7 @@ public class RecordTypeASTTransformation extends AbstractASTTransformation imple
153152
private static final String TO_LIST = "toList";
154153
private static final String TO_MAP = "toMap";
155154

156-
private static final Class<? extends Annotation> MY_CLASS = RecordBase.class;
157-
public static final ClassNode MY_TYPE = makeWithoutCaching(MY_CLASS, false);
155+
public static final ClassNode MY_TYPE = makeWithoutCaching(RecordBase.class, false);
158156
private static final String MY_TYPE_NAME = MY_TYPE.getNameWithoutPackage();
159157

160158
private CompilationUnit compilationUnit;

src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
import org.codehaus.groovy.runtime.DefaultGroovyMethods;
117117
import org.codehaus.groovy.syntax.Token;
118118
import org.codehaus.groovy.syntax.TokenUtil;
119+
import org.codehaus.groovy.transform.RecordTypeASTTransformation;
119120
import org.codehaus.groovy.transform.StaticTypesTransformation;
120121
import org.codehaus.groovy.transform.trait.Traits;
121122
import org.objectweb.asm.Opcodes;
@@ -1861,7 +1862,7 @@ protected void checkGroovyConstructorMap(final Expression receiver, final ClassN
18611862
if (!existsProperty(dummyExpression, /*read*/false, new PropertyLookup(receiverType, propertyTypes::add))) {
18621863
typeCheckingContext.popEnclosingBinaryExpression();
18631864
addStaticTypeError("No such property: " + propName + " for class: " + prettyPrintTypeName(receiverType), keyExpression);
1864-
} else if (receiverType.isRecord() || !addedReadOnlyPropertyError(dummyExpression)) { // GROOVY-11956
1865+
} else if (isRecord(receiverType) || !addedReadOnlyPropertyError(dummyExpression)) { // GROOVY-11956
18651866
SetterInfo setterInfo = removeSetterInfo(keyExpression);
18661867
if (setterInfo != null) { // GROOVY-11451: select setter
18671868
ensureValidSetter(entryExpression, keyExpression, valueExpression, setterInfo);
@@ -1879,6 +1880,10 @@ protected void checkGroovyConstructorMap(final Expression receiver, final ClassN
18791880
}
18801881
}
18811882

1883+
private static boolean isRecord(final ClassNode node) {
1884+
return node.isRecord() || !node.getAnnotations(RecordTypeASTTransformation.MY_TYPE).isEmpty();
1885+
}
1886+
18821887
@Deprecated(forRemoval = true, since = "4.0.0")
18831888
protected static boolean hasRHSIncompleteGenericTypeInfo(final ClassNode inferredRightExpressionType) {
18841889
boolean replaceType = false;

0 commit comments

Comments
 (0)