You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2019/05/25 17:52:02 UTC
[groovy] branch master updated: GROOVY-9136: Refactor
StaticTypeCheckingVisitor.checkOrMarkInnerPropertyOwnerAccess(closes #935)
This is an automated email from the ASF dual-hosted git repository.
sunlan 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 18c8b08 GROOVY-9136: Refactor StaticTypeCheckingVisitor.checkOrMarkInnerPropertyOwnerAccess(closes #935)
18c8b08 is described below
commit 18c8b08a471b112762b0e91d961db72f63d96548
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun May 26 01:51:34 2019 +0800
GROOVY-9136: Refactor StaticTypeCheckingVisitor.checkOrMarkInnerPropertyOwnerAccess(closes #935)
---
.../transform/stc/StaticTypeCheckingVisitor.java | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
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 bc2027b..16a44f4 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -529,18 +529,13 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
/**
* Checks valid cases for accessing a field from an inner class.
*/
- private String checkOrMarkInnerPropertyOwnerAccess(Expression source, FieldNode fn, boolean lhsOfAssignment, String delegationData) {
- if (fn != null && !fn.isStatic() && !fn.isPrivate() && !"delegate".equals(delegationData) &&
- source instanceof PropertyExpression && typeCheckingContext.getEnclosingClosureStack().size() == 1) {
- PropertyExpression pe = (PropertyExpression) source;
- boolean ownerProperty = !("this".equals(pe.getPropertyAsString()));
- // check for reference to method, closure, for loop or catch block parameter
- if (ownerProperty && pe.getObjectExpression() instanceof VariableExpression) {
- ownerProperty = !(((VariableExpression) pe.getObjectExpression()).getAccessedVariable() instanceof Parameter);
- }
- if (ownerProperty) {
+ private String checkOrMarkInnerPropertyOwnerAccess(PropertyExpression source, boolean lhsOfAssignment, String delegationData) {
+ // check for reference to method, closure, for loop, try with, or catch block parameter from a non-nested closure
+ if (typeCheckingContext.getEnclosingClosureStack().size() == 1 && !"this".equals(source.getPropertyAsString())) {
+ if (!(source.getObjectExpression() instanceof VariableExpression &&
+ ((VariableExpression) source.getObjectExpression()).getAccessedVariable() instanceof Parameter)) {
delegationData = "owner";
- pe.getObjectExpression().putNodeMetaData(StaticTypesMarker.IMPLICIT_RECEIVER, delegationData);
+ source.getObjectExpression().putNodeMetaData(StaticTypesMarker.IMPLICIT_RECEIVER, delegationData);
}
}
return delegationData;
@@ -1851,7 +1846,9 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
if (visitor != null) visitor.visitField(field);
storeWithResolve(field.getOriginType(), receiver, field.getDeclaringClass(), field.isStatic(), expressionToStoreOn);
checkOrMarkPrivateAccess(expressionToStoreOn, field, lhsOfAssignment);
- delegationData = checkOrMarkInnerPropertyOwnerAccess(expressionToStoreOn, field, lhsOfAssignment, delegationData);
+ if (field != null && !field.isStatic() && !field.isPrivate() && !"delegate".equals(delegationData)) {
+ delegationData = checkOrMarkInnerPropertyOwnerAccess(expressionToStoreOn, lhsOfAssignment, delegationData);
+ }
if (delegationData != null) {
expressionToStoreOn.putNodeMetaData(StaticTypesMarker.IMPLICIT_RECEIVER, delegationData);
}