You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "John Wagenleitner (JIRA)" <ji...@apache.org> on 2017/07/08 19:49:01 UTC

[jira] [Resolved] (GROOVY-8222) AsmClassGenerator does not set source positions on property expressions

     [ https://issues.apache.org/jira/browse/GROOVY-8222?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

John Wagenleitner resolved GROOVY-8222.
---------------------------------------
       Resolution: Fixed
         Assignee: John Wagenleitner
    Fix Version/s: 2.4.13

Thanks for reporting the issue and providing a patch.

> AsmClassGenerator does not set source positions on property expressions
> -----------------------------------------------------------------------
>
>                 Key: GROOVY-8222
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8222
>             Project: Groovy
>          Issue Type: Bug
>            Reporter: Eric Milles
>            Assignee: John Wagenleitner
>             Fix For: 2.4.13
>
>
> AsmClassGenerator.visitVariableExpression and AsmClassGenerator.processClassVariable can create a new PropertyExpression from a VariableExpression and the source position of the original is not transferred.
> Solution is pretty minimal:
> {code} // mid way through visitVariableExpression:
>         if (variable == null) {
>             // GRECLIPSE edit
>             //processClassVariable(variableName);
>             processClassVariable(expression);
>             // GRECLIPSE end
>         } else {
> {code}
> {code}
>     // GRECLIPSE edit
>     //private void processClassVariable(String name) {
>     private void processClassVariable(VariableExpression expression) {
>         String name = expression.getName();
>     // GRECLIPSE end
> {code}
> {code} // end of processClassVariable:
>         } else {
>             // GRECLIPSE edit
>             //PropertyExpression pexp = new PropertyExpression(VariableExpression.THIS_EXPRESSION, name);
>             PropertyExpression pexp = new PropertyExpression(new VariableExpression("this", ClassHelper.DYNAMIC_TYPE), name);
>             pexp.getObjectExpression().setSourcePosition(expression);
>             pexp.getProperty().setSourcePosition(expression);
>             // GRECLIPSE end
>             pexp.setImplicitThis(true);
>             visitPropertyExpression(pexp);
>         }
> {code}
> I found this because I had a {{with}} expression that produced an error that was attributed to line -1.
> {code}
> import com.fasterxml.jackson.annotation.JsonInclude
> import com.fasterxml.jackson.databind.ObjectMapper
> import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule
> import org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean
> @groovy.transform.CompileStatic
> final class CustomObjectMapper extends ObjectMapper
> {
>     CustomObjectMapper()
>     {
>         super(mimicSpring())
>     }
>     private static ObjectMapper mimicSpring()
>     {
>         /* Formerly in SpringDispatcherContext.xml:
>          *  <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
>          *    p:modulesToInstall="com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule"
>          *    p:serializationInclusion="NON_NULL" p:failOnUnknownProperties="false"
>          *    p:autoDetectFields="false" p:autoDetectGettersSetters="true">
>          *  </bean>
>          */
>         new Jackson2ObjectMapperFactoryBean().with {
>             modulesToInstall = JsonOrgModule // Joda module is auto-discovered
>             serializationInclusion = JsonInclude.Include.NON_NULL
>             defaultViewInclusion = true // include w/o view tag
>             failOnUnknownProperties = false
>             autoDetectGettersSetters = true
>             autoDetectFields = false
>             afterPropertiesSet()
>             return object // error on this line; this.object is the PropertyExpression that is created by AsmClassGenerator
>         }
>     }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)