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/07/30 09:02:30 UTC

[groovy] branch master updated: GROOVY-9136: set source position of object expression for error messages

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 7e496ed  GROOVY-9136: set source position of object expression for error messages
7e496ed is described below

commit 7e496edb4413c0fd6520e95eb6b8449fa0ecedd7
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sat Jul 20 11:44:16 2019 -0500

    GROOVY-9136: set source position of object expression for error messages
    
    Set only line and column to prevent overlap with property expression.
---
 .../sc/transformers/VariableExpressionTransformer.java         | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/transform/sc/transformers/VariableExpressionTransformer.java b/src/main/java/org/codehaus/groovy/transform/sc/transformers/VariableExpressionTransformer.java
index 6e490c1..84aeb72 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/transformers/VariableExpressionTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/transformers/VariableExpressionTransformer.java
@@ -50,18 +50,24 @@ public class VariableExpressionTransformer {
         // processClassVariable before it reaches any makeCall, that could handle it
         Object val = expr.getNodeMetaData(StaticTypesMarker.IMPLICIT_RECEIVER);
         if (val == null) return null;
+
         // TODO handle the owner and delegate cases better for nested scenarios and potentially remove the need for the implicit this case
         VariableExpression receiver = new VariableExpression("owner".equals(val) ? (String) val : "delegate".equals(val) ? (String) val : "this");
-        receiver.setSourcePosition(expr);
+        // GROOVY-9136 -- object expression should not overlap source range of property; property stands in for original varibale expression
+        receiver.setLineNumber(expr.getLineNumber());
+        receiver.setColumnNumber(expr.getColumnNumber());
+
         PropertyExpression pexp = new PropertyExpression(receiver, expr.getName());
+        pexp.getProperty().setSourcePosition(expr);
         pexp.copyNodeMetaData(expr);
         pexp.setImplicitThis(true);
-        pexp.getProperty().setSourcePosition(expr);
+
         ClassNode owner = expr.getNodeMetaData(StaticCompilationMetadataKeys.PROPERTY_OWNER);
         if (owner != null) {
             receiver.putNodeMetaData(StaticTypesMarker.INFERRED_TYPE, owner);
             receiver.putNodeMetaData(StaticTypesMarker.IMPLICIT_RECEIVER, val);
         }
+
         return pexp;
     }