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 2022/02/25 15:51:18 UTC
[groovy] 01/02: minor edits
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit dae5d6927ea6bd10cfd2165b5c408c05c082049b
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Fri Feb 25 09:36:22 2022 -0600
minor edits
---
.../groovy/control/messages/LocatedMessage.java | 3 +++
.../transform/AutoImplementASTTransformation.java | 20 +++++++++-----------
.../transform/NamedVariantASTTransformation.java | 2 +-
.../transform/stc/StaticTypeCheckingVisitor.java | 18 +++---------------
.../transform/trait/TraitASTTransformation.java | 3 +--
.../groovy/transform/trait/TraitComposer.java | 9 +++------
.../transform/trait/TraitReceiverTransformer.java | 6 +++---
.../org/codehaus/groovy/transform/trait/Traits.java | 3 +--
8 files changed, 24 insertions(+), 40 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java b/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
index 959c3f6..63efb1c 100644
--- a/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
+++ b/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
@@ -40,6 +40,9 @@ public class LocatedMessage extends SimpleMessage {
this.context = context;
}
+ public CSTNode getContext() {
+ return context;
+ }
public void write(PrintWriter writer, Janitor janitor) {
if (owner instanceof SourceUnit) {
diff --git a/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
index 08c56af..522f5df 100644
--- a/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
@@ -30,7 +30,6 @@ import org.codehaus.groovy.ast.Parameter;
import org.codehaus.groovy.ast.PropertyNode;
import org.codehaus.groovy.ast.expr.ClosureExpression;
import org.codehaus.groovy.ast.expr.Expression;
-import org.codehaus.groovy.ast.stmt.BlockStatement;
import org.codehaus.groovy.ast.stmt.EmptyStatement;
import org.codehaus.groovy.ast.stmt.Statement;
import org.codehaus.groovy.control.CompilePhase;
@@ -46,12 +45,12 @@ import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedMethod;
import static org.apache.groovy.ast.tools.MethodNodeUtils.getPropertyName;
import static org.apache.groovy.ast.tools.MethodNodeUtils.methodDescriptorWithoutReturnType;
import static org.codehaus.groovy.antlr.AntlrParserPlugin.getDefaultValueForPrimitive;
-import static org.codehaus.groovy.ast.expr.ArgumentListExpression.EMPTY_ARGUMENTS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.constX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getGetterName;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.throwS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
@@ -218,17 +217,16 @@ public class AutoImplementASTTransformation extends AbstractASTTransformation {
}
private Statement buildMethodBody(final ClassNode exception, final String message, final ClosureExpression code, final ClassNode returnType) {
- BlockStatement body = new BlockStatement();
if (code != null) {
- body.addStatement(code.getCode());
- } else if (exception != null) {
- body.addStatement(throwS(ctorX(exception, message == null ? EMPTY_ARGUMENTS : constX(message))));
- } else {
- Expression result = getDefaultValueForPrimitive(returnType);
- if (result != null) {
- body.addStatement(returnS(result));
+ return code.getCode();
+ }
+ if (exception != null) {
+ if (message == null) {
+ return throwS(ctorX(exception));
}
+ return throwS(ctorX(exception, constX(message)));
}
- return body;
+ Expression value = getDefaultValueForPrimitive(returnType);
+ return (value != null ? returnS(value) : returnS(nullX()));
}
}
diff --git a/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
index 91f0fc9..c09a349 100644
--- a/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
@@ -277,7 +277,7 @@ public class NamedVariantASTTransformation extends AbstractASTTransformation {
if (defaultValue == null && isPrimitiveType(type)) {
defaultValue = defaultValueX(type);
}
- if (defaultValue != null) {
+ if (defaultValue != null) { // GROOVY-9158, GROOVY-9183
if (isPrimitiveType(type)) { // handle null for primitive
value = ternaryX(notNullX(value), value, defaultValueX(type));
}
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 6d69498..00314dc 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -690,12 +690,8 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
return;
}
- // a dynamic variable is either an undeclared variable
- // or a member of a class used in a 'with'
- DynamicVariable dyn = (DynamicVariable) accessedVariable;
- // first, we must check the 'with' context
- String dynName = dyn.getName();
- if (tryVariableExpressionAsProperty(vexp, dynName)) return;
+ // a dynamic variable is either a closure property, a class member referenced from a closure, or an undeclared variable
+ if (tryVariableExpressionAsProperty(vexp, vexp.getName())) return;
if (!extension.handleUnresolvedVariableExpression(vexp)) {
addStaticTypeError("The variable [" + vexp.getName() + "] is undeclared.", vexp);
@@ -3827,18 +3823,12 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
if (!typeCheckingContext.enclosingBlocks.isEmpty()) {
BinaryExpression instanceOfExpression = findInstanceOfNotReturnExpression(ifElse);
- if (instanceOfExpression == null) {
- instanceOfExpression = findInstanceOfNotReturnExpression(ifElse);
- }
- if (instanceOfExpression != null) {
- visitInstanceofNot(instanceOfExpression);
- }
+ if (instanceOfExpression != null) visitInstanceofNot(instanceOfExpression);
}
}
public void visitInstanceofNot(BinaryExpression be) {
final BlockStatement currentBlock = typeCheckingContext.enclosingBlocks.getFirst();
- assert currentBlock != null;
if (typeCheckingContext.blockStatements2Types.containsKey(currentBlock)) {
// another instanceOf_not was before, no need store vars
} else {
@@ -4076,8 +4066,6 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
popAssignmentTracking(oldTracker);
}
- // currently just for empty literals, not for e.g. Collections.emptyList() at present
- /// it seems attractive to want to do this for more cases but perhaps not all cases
private ClassNode checkForTargetType(final Expression expr, final ClassNode type) {
BinaryExpression enclosingBinaryExpression = typeCheckingContext.getEnclosingBinaryExpression();
if (enclosingBinaryExpression instanceof DeclarationExpression
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
index 02f4947..6cf3f7a 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
@@ -70,7 +70,6 @@ import java.util.List;
import java.util.Set;
import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
import static org.codehaus.groovy.transform.trait.SuperCallTraitTransformer.UNRESOLVED_HELPER_CLASS;
/**
@@ -496,7 +495,7 @@ public class TraitASTTransformation extends AbstractASTTransformation implements
field.getOriginType(),
new Parameter[]{createSelfParameter(trait, field.isStatic())},
ClassNode.EMPTY_ARRAY,
- returnS(initCode.getExpression())
+ GeneralUtils.returnS(initCode.getExpression())
);
helper.addMethod(fieldInitializer);
} else {
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
index 53ed407..3a76b2c 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
@@ -293,7 +293,7 @@ public abstract class TraitComposer {
// but add empty body for setter for legacy compatibility
MethodNode impl = new MethodNode(
methodNode.getName(),
- Opcodes.ACC_PUBLIC | isStatic,
+ Opcodes.ACC_PUBLIC | isStatic | Opcodes.ACC_SYNTHETIC,
returnType,
newParams,
ClassNode.EMPTY_ARRAY,
@@ -341,8 +341,7 @@ public abstract class TraitComposer {
// guaranteed to be always present
boolean isHelperForStaticMethod = helperMethodParams[0].getOriginType().equals(ClassHelper.CLASS_Type);
if (Modifier.isPrivate(access) && !isHelperForStaticMethod) {
- // do not create forwarder for private methods
- // see GROOVY-7213
+ // GROOVY-7213: do not create forwarder for private methods
return;
}
if (!isHelperForStaticMethod) {
@@ -380,9 +379,7 @@ public abstract class TraitComposer {
AnnotationNode bridgeAnnotation = new AnnotationNode(Traits.TRAITBRIDGE_CLASSNODE);
bridgeAnnotation.addMember("traitClass", new ClassExpression(trait));
bridgeAnnotation.addMember("desc", new ConstantExpression(BytecodeHelper.getMethodDescriptor(helperMethod.getReturnType(), traitMethodParams)));
- forwarder.addAnnotation(
- bridgeAnnotation
- );
+ forwarder.addAnnotation(bridgeAnnotation);
MethodNode existingMethod = findExistingMethod(targetNode, forwarder);
if (existingMethod != null) {
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
index 3d01b29..fa8b8cd 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
@@ -199,7 +199,7 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
method,
ArgumentListExpression.EMPTY_ARGUMENTS
);
- mce.setSourcePosition(exp);
+ mce.setSourcePosition(exp instanceof PropertyExpression ? ((PropertyExpression) exp).getProperty() : exp);
mce.setImplicitThis(false);
return mce;
}
@@ -253,7 +253,7 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
method,
new ArgumentListExpression(super.transform(rightExpression))
);
- mce.setSourcePosition(exp);
+ mce.setSourcePosition(leftExpression instanceof PropertyExpression ? ((PropertyExpression) leftExpression).getProperty() : leftExpression);
mce.setImplicitThis(false);
markDynamicCall(mce, staticField, isStatic);
return mce;
@@ -327,7 +327,7 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
);
newCall.setImplicitThis(false);
newCall.setSafe(call.isSafe());
- newCall.setSourcePosition(call);
+ newCall.getMethod().setSourcePosition(call.getMethod());
newCall.setSpreadSafe(call.isSpreadSafe());
return newCall;
}
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/Traits.java b/src/main/java/org/codehaus/groovy/transform/trait/Traits.java
index b752ebb..23dd997 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/Traits.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/Traits.java
@@ -147,8 +147,7 @@ public abstract class Traits {
// precompiled trait
try {
final ClassLoader classLoader = trait.getTypeClass().getClassLoader();
- String helperClassName = Traits.helperClassName(trait);
- helperClassNode = ClassHelper.make(Class.forName(helperClassName, false, classLoader));
+ helperClassNode = ClassHelper.make(Class.forName(Traits.helperClassName(trait), false, classLoader));
try {
fieldHelperClassNode = ClassHelper.make(classLoader.loadClass(Traits.fieldHelperClassName(trait)));
staticFieldHelperClassNode = ClassHelper.make(classLoader.loadClass(Traits.staticFieldHelperClassName(trait)));