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

XueJun updated GROOVY-8099:
---------------------------
    Description: 
1.We use static compilation and AST conversion to compile scripts.
The original expression is:
def bunledSubOfferInstReq = deepClone()
The converted expression:
def bunledSubOfferInstReq = (pkg.ViewObject) 
pkg.FunctionRuntimeTool.invokeFunction(this, deepClone)

2.The class pkg.ViewObject is implement java.util.Map interface.

3.When using the ViewObject property in BinaryExpression, it is wrong to put it 
in an if statement.

--compile successed
def bunledSubOfferInstReq = deepClone()
bunledSubOfferInstReq.pOfferingInstId = bunledSubOfferInstReq.pOfferingInstId

--compile failed
if (condition)
{
  def bunledSubOfferInstReq = deepClone()
  bunledSubOfferInstReq.pOfferingInstId = bunledSubOfferInstReq.pOfferingInstId
}

4.I found a phenomenon cause this error, at compile successed situation, the 
ClassNode of ViewObject has redirect. [toString result-pkg.ViewObject -> 
pkg.ViewObject]
At comile failed situation, the ClassNode of ViewObject redirect is null. 
[toString result-pkg.ViewObject]

5.The error stacktrace as below:
org.codehaus.groovy.syntax.SyntaxException: Access to 
java.lang.Object#pOfferingInstId is forbidden @ line 106, column 43.

Thread [main] (Suspended (breakpoint at line 91 in ErrorCollector))     
        owns: HashMap<K,V>  (id=67)     
        ErrorCollector.addErrorAndContinue(Message) line: 91    
        ErrorCollector.addError(Message) line: 104      
        ErrorCollector.addError(Message, boolean) line: 123     
        ErrorCollector.addError(SyntaxException, SourceUnit) line: 132  
        SourceUnit.addError(SyntaxException) line: 360  
        StaticTypesCallSiteWriter.makeGetPropertySite(Expression, String, 
boolean, boolean) line: 225   
        AsmClassGenerator.visitAttributeOrProperty(PropertyExpression, 
MethodCallerMultiAdapter) line: 965      
        AsmClassGenerator.visitPropertyExpression(PropertyExpression) line: 
1001        
        PropertyExpression.visit(GroovyCodeVisitor) line: 57    
        
StaticTypesBinaryExpressionMultiTypeDispatcher(BinaryExpressionHelper).evaluateEqual(BinaryExpression,
 boolean) line: 316       
        
StaticTypesBinaryExpressionMultiTypeDispatcher.evaluateEqual(BinaryExpression, 
boolean) line: 151       
        
StaticTypesBinaryExpressionMultiTypeDispatcher(BinaryExpressionHelper).eval(BinaryExpression)
 line: 84  
        AsmClassGenerator.visitBinaryExpression(BinaryExpression) line: 638     
        BinaryExpression.visit(GroovyCodeVisitor) line: 51      
        
StaticTypesStatementWriter(StatementWriter).writeExpressionStatement(ExpressionStatement)
 line: 607     
        AsmClassGenerator.visitExpressionStatement(ExpressionStatement) line: 
620       
        ExpressionStatement.visit(GroovyCodeVisitor) line: 42   
        
StaticTypesStatementWriter(StatementWriter).writeBlockStatement(BlockStatement) 
line: 84        
        StaticTypesStatementWriter.writeBlockStatement(BlockStatement) line: 65 
        AsmClassGenerator.visitBlockStatement(BlockStatement) line: 566 
        BlockStatement.visit(GroovyCodeVisitor) line: 71        
        StaticTypesStatementWriter(StatementWriter).writeIfElse(IfStatement) 
line: 288  
        AsmClassGenerator.visitIfElse(IfStatement) line: 582    
        IfStatement.visit(GroovyCodeVisitor) line: 43   
        
StaticTypesStatementWriter(StatementWriter).writeBlockStatement(BlockStatement) 
line: 84        
        StaticTypesStatementWriter.writeBlockStatement(BlockStatement) line: 65 
        AsmClassGenerator.visitBlockStatement(BlockStatement) line: 566 
        BlockStatement.visit(GroovyCodeVisitor) line: 71        
        
AsmClassGenerator(ClassCodeVisitorSupport).visitClassCodeContainer(Statement) 
line: 104 
        
AsmClassGenerator(ClassCodeVisitorSupport).visitConstructorOrMethod(MethodNode, 
boolean) line: 115      
        AsmClassGenerator.visitStdMethod(MethodNode, boolean, Parameter[], 
Statement) line: 430 
        AsmClassGenerator.visitConstructorOrMethod(MethodNode, boolean) line: 
387       
        AsmClassGenerator(ClassCodeVisitorSupport).visitMethod(MethodNode) 
line: 126    
        AsmClassGenerator.visitMethod(MethodNode) line: 507     
        ClassNode.visitContents(GroovyClassVisitor) line: 1086  
        AsmClassGenerator(ClassCodeVisitorSupport).visitClass(ClassNode) line: 
53       
        AsmClassGenerator.visitClass(ClassNode) line: 233       
        CompilationUnit$16.call(SourceUnit, GeneratorContext, ClassNode) line: 
813      
        
CompilationUnit.applyToPrimaryClassNodes(CompilationUnit$PrimaryClassNodeOperation)
 line: 1055  
        CompilationUnit.doPhaseOperation(Object) line: 591      
        CompilationUnit.processPhaseOperations(int) line: 569   
        CompilationUnit.compile(int) line: 546  
        GroovyClassLoader.doParseClass(GroovyCodeSource) line: 298      
        GroovyClassLoader.parseClass(GroovyCodeSource, boolean) line: 268       
        GroovyShell.parseClass(GroovyCodeSource) line: 694      
        GroovyShell.parse(GroovyCodeSource) line: 706   
        GroovyShell.parse(String, String) line: 742     
        IDECompiler.compileScript(String, String) line: 28      
        MainCompiler.compileScript(String, MetaDataSelector, String, String, 
List<Parameter>) line: 53  
        SimpleDemo.main(String[]) line: 51      



  was:
1.We use static compilation and AST conversion to compile scripts.
The original expression is:
def bunledSubOfferInstReq = deepClone()
The converted expression:
def bunledSubOfferInstReq = (pkg.ViewObject) 
pkg.FunctionRuntimeTool.invokeFunction(this, deepClone)

2.The class pkg.ViewObject is implement java.util.Map interface.

3.When using the ViewObject property in binaryExpression, it is wrong to put it 
in an if expression.

--compile successed
def bunledSubOfferInstReq = deepClone()
bunledSubOfferInstReq.pOfferingInstId = bunledSubOfferInstReq.pOfferingInstId

--compile failed
if (condition)
{
  def bunledSubOfferInstReq = deepClone()
  bunledSubOfferInstReq.pOfferingInstId = bunledSubOfferInstReq.pOfferingInstId
}

4.I found a phenomenon cause this error, at compile successed situation, the 
ClassNode of ViewObject has redirect. [toString result-pkg.ViewObject -> 
pkg.ViewObject]
At comile failed situation, the ClassNode of ViewObject redirect is null. 
[toString result-pkg.ViewObject]

5.The error stacktrace as below:
org.codehaus.groovy.syntax.SyntaxException: Access to 
java.lang.Object#pOfferingInstId is forbidden @ line 106, column 43.

Thread [main] (Suspended (breakpoint at line 91 in ErrorCollector))     
        owns: HashMap<K,V>  (id=67)     
        ErrorCollector.addErrorAndContinue(Message) line: 91    
        ErrorCollector.addError(Message) line: 104      
        ErrorCollector.addError(Message, boolean) line: 123     
        ErrorCollector.addError(SyntaxException, SourceUnit) line: 132  
        SourceUnit.addError(SyntaxException) line: 360  
        StaticTypesCallSiteWriter.makeGetPropertySite(Expression, String, 
boolean, boolean) line: 225   
        AsmClassGenerator.visitAttributeOrProperty(PropertyExpression, 
MethodCallerMultiAdapter) line: 965      
        AsmClassGenerator.visitPropertyExpression(PropertyExpression) line: 
1001        
        PropertyExpression.visit(GroovyCodeVisitor) line: 57    
        
StaticTypesBinaryExpressionMultiTypeDispatcher(BinaryExpressionHelper).evaluateEqual(BinaryExpression,
 boolean) line: 316       
        
StaticTypesBinaryExpressionMultiTypeDispatcher.evaluateEqual(BinaryExpression, 
boolean) line: 151       
        
StaticTypesBinaryExpressionMultiTypeDispatcher(BinaryExpressionHelper).eval(BinaryExpression)
 line: 84  
        AsmClassGenerator.visitBinaryExpression(BinaryExpression) line: 638     
        BinaryExpression.visit(GroovyCodeVisitor) line: 51      
        
StaticTypesStatementWriter(StatementWriter).writeExpressionStatement(ExpressionStatement)
 line: 607     
        AsmClassGenerator.visitExpressionStatement(ExpressionStatement) line: 
620       
        ExpressionStatement.visit(GroovyCodeVisitor) line: 42   
        
StaticTypesStatementWriter(StatementWriter).writeBlockStatement(BlockStatement) 
line: 84        
        StaticTypesStatementWriter.writeBlockStatement(BlockStatement) line: 65 
        AsmClassGenerator.visitBlockStatement(BlockStatement) line: 566 
        BlockStatement.visit(GroovyCodeVisitor) line: 71        
        StaticTypesStatementWriter(StatementWriter).writeIfElse(IfStatement) 
line: 288  
        AsmClassGenerator.visitIfElse(IfStatement) line: 582    
        IfStatement.visit(GroovyCodeVisitor) line: 43   
        
StaticTypesStatementWriter(StatementWriter).writeBlockStatement(BlockStatement) 
line: 84        
        StaticTypesStatementWriter.writeBlockStatement(BlockStatement) line: 65 
        AsmClassGenerator.visitBlockStatement(BlockStatement) line: 566 
        BlockStatement.visit(GroovyCodeVisitor) line: 71        
        
AsmClassGenerator(ClassCodeVisitorSupport).visitClassCodeContainer(Statement) 
line: 104 
        
AsmClassGenerator(ClassCodeVisitorSupport).visitConstructorOrMethod(MethodNode, 
boolean) line: 115      
        AsmClassGenerator.visitStdMethod(MethodNode, boolean, Parameter[], 
Statement) line: 430 
        AsmClassGenerator.visitConstructorOrMethod(MethodNode, boolean) line: 
387       
        AsmClassGenerator(ClassCodeVisitorSupport).visitMethod(MethodNode) 
line: 126    
        AsmClassGenerator.visitMethod(MethodNode) line: 507     
        ClassNode.visitContents(GroovyClassVisitor) line: 1086  
        AsmClassGenerator(ClassCodeVisitorSupport).visitClass(ClassNode) line: 
53       
        AsmClassGenerator.visitClass(ClassNode) line: 233       
        CompilationUnit$16.call(SourceUnit, GeneratorContext, ClassNode) line: 
813      
        
CompilationUnit.applyToPrimaryClassNodes(CompilationUnit$PrimaryClassNodeOperation)
 line: 1055  
        CompilationUnit.doPhaseOperation(Object) line: 591      
        CompilationUnit.processPhaseOperations(int) line: 569   
        CompilationUnit.compile(int) line: 546  
        GroovyClassLoader.doParseClass(GroovyCodeSource) line: 298      
        GroovyClassLoader.parseClass(GroovyCodeSource, boolean) line: 268       
        GroovyShell.parseClass(GroovyCodeSource) line: 694      
        GroovyShell.parse(GroovyCodeSource) line: 706   
        GroovyShell.parse(String, String) line: 742     
        IDECompiler.compileScript(String, String) line: 28      
        MainCompiler.compileScript(String, MetaDataSelector, String, String, 
List<Parameter>) line: 53  
        SimpleDemo.main(String[]) line: 51      




> An error about "org.codehaus.groovy.syntax.SyntaxException: Access to 
> java.lang.Object#pOfferingInstId is forbidden"
> --------------------------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-8099
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8099
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-jdk
>    Affects Versions: 2.4.5
>         Environment: java.version=1.8.0_45 
> java.runtime.version=1.8.0_45-b15 
> os.arch=x86 
> os.name=Windows 7 
> sun.jnu.encoding=GBK
>            Reporter: XueJun
>
> 1.We use static compilation and AST conversion to compile scripts.
> The original expression is:
> def bunledSubOfferInstReq = deepClone()
> The converted expression:
> def bunledSubOfferInstReq = (pkg.ViewObject) 
> pkg.FunctionRuntimeTool.invokeFunction(this, deepClone)
> 2.The class pkg.ViewObject is implement java.util.Map interface.
> 3.When using the ViewObject property in BinaryExpression, it is wrong to put 
> it in an if statement.
> --compile successed
> def bunledSubOfferInstReq = deepClone()
> bunledSubOfferInstReq.pOfferingInstId = bunledSubOfferInstReq.pOfferingInstId
> --compile failed
> if (condition)
> {
>   def bunledSubOfferInstReq = deepClone()
>   bunledSubOfferInstReq.pOfferingInstId = 
> bunledSubOfferInstReq.pOfferingInstId
> }
> 4.I found a phenomenon cause this error, at compile successed situation, the 
> ClassNode of ViewObject has redirect. [toString result-pkg.ViewObject -> 
> pkg.ViewObject]
> At comile failed situation, the ClassNode of ViewObject redirect is null. 
> [toString result-pkg.ViewObject]
> 5.The error stacktrace as below:
> org.codehaus.groovy.syntax.SyntaxException: Access to 
> java.lang.Object#pOfferingInstId is forbidden @ line 106, column 43.
> Thread [main] (Suspended (breakpoint at line 91 in ErrorCollector))   
>       owns: HashMap<K,V>  (id=67)     
>       ErrorCollector.addErrorAndContinue(Message) line: 91    
>       ErrorCollector.addError(Message) line: 104      
>       ErrorCollector.addError(Message, boolean) line: 123     
>       ErrorCollector.addError(SyntaxException, SourceUnit) line: 132  
>       SourceUnit.addError(SyntaxException) line: 360  
>       StaticTypesCallSiteWriter.makeGetPropertySite(Expression, String, 
> boolean, boolean) line: 225   
>       AsmClassGenerator.visitAttributeOrProperty(PropertyExpression, 
> MethodCallerMultiAdapter) line: 965      
>       AsmClassGenerator.visitPropertyExpression(PropertyExpression) line: 
> 1001        
>       PropertyExpression.visit(GroovyCodeVisitor) line: 57    
>       
> StaticTypesBinaryExpressionMultiTypeDispatcher(BinaryExpressionHelper).evaluateEqual(BinaryExpression,
>  boolean) line: 316       
>       
> StaticTypesBinaryExpressionMultiTypeDispatcher.evaluateEqual(BinaryExpression,
>  boolean) line: 151       
>       
> StaticTypesBinaryExpressionMultiTypeDispatcher(BinaryExpressionHelper).eval(BinaryExpression)
>  line: 84  
>       AsmClassGenerator.visitBinaryExpression(BinaryExpression) line: 638     
>       BinaryExpression.visit(GroovyCodeVisitor) line: 51      
>       
> StaticTypesStatementWriter(StatementWriter).writeExpressionStatement(ExpressionStatement)
>  line: 607     
>       AsmClassGenerator.visitExpressionStatement(ExpressionStatement) line: 
> 620       
>       ExpressionStatement.visit(GroovyCodeVisitor) line: 42   
>       
> StaticTypesStatementWriter(StatementWriter).writeBlockStatement(BlockStatement)
>  line: 84        
>       StaticTypesStatementWriter.writeBlockStatement(BlockStatement) line: 65 
>       AsmClassGenerator.visitBlockStatement(BlockStatement) line: 566 
>       BlockStatement.visit(GroovyCodeVisitor) line: 71        
>       StaticTypesStatementWriter(StatementWriter).writeIfElse(IfStatement) 
> line: 288  
>       AsmClassGenerator.visitIfElse(IfStatement) line: 582    
>       IfStatement.visit(GroovyCodeVisitor) line: 43   
>       
> StaticTypesStatementWriter(StatementWriter).writeBlockStatement(BlockStatement)
>  line: 84        
>       StaticTypesStatementWriter.writeBlockStatement(BlockStatement) line: 65 
>       AsmClassGenerator.visitBlockStatement(BlockStatement) line: 566 
>       BlockStatement.visit(GroovyCodeVisitor) line: 71        
>       
> AsmClassGenerator(ClassCodeVisitorSupport).visitClassCodeContainer(Statement) 
> line: 104 
>       
> AsmClassGenerator(ClassCodeVisitorSupport).visitConstructorOrMethod(MethodNode,
>  boolean) line: 115      
>       AsmClassGenerator.visitStdMethod(MethodNode, boolean, Parameter[], 
> Statement) line: 430 
>       AsmClassGenerator.visitConstructorOrMethod(MethodNode, boolean) line: 
> 387       
>       AsmClassGenerator(ClassCodeVisitorSupport).visitMethod(MethodNode) 
> line: 126    
>       AsmClassGenerator.visitMethod(MethodNode) line: 507     
>       ClassNode.visitContents(GroovyClassVisitor) line: 1086  
>       AsmClassGenerator(ClassCodeVisitorSupport).visitClass(ClassNode) line: 
> 53       
>       AsmClassGenerator.visitClass(ClassNode) line: 233       
>       CompilationUnit$16.call(SourceUnit, GeneratorContext, ClassNode) line: 
> 813      
>       
> CompilationUnit.applyToPrimaryClassNodes(CompilationUnit$PrimaryClassNodeOperation)
>  line: 1055  
>       CompilationUnit.doPhaseOperation(Object) line: 591      
>       CompilationUnit.processPhaseOperations(int) line: 569   
>       CompilationUnit.compile(int) line: 546  
>       GroovyClassLoader.doParseClass(GroovyCodeSource) line: 298      
>       GroovyClassLoader.parseClass(GroovyCodeSource, boolean) line: 268       
>       GroovyShell.parseClass(GroovyCodeSource) line: 694      
>       GroovyShell.parse(GroovyCodeSource) line: 706   
>       GroovyShell.parse(String, String) line: 742     
>       IDECompiler.compileScript(String, String) line: 28      
>       MainCompiler.compileScript(String, MetaDataSelector, String, String, 
> List<Parameter>) line: 53  
>       SimpleDemo.main(String[]) line: 51      



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to