You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "XueJun (JIRA)" <ji...@apache.org> on 2017/02/24 09:23:44 UTC
[jira] [Updated] (GROOVY-8099) An error about
"org.codehaus.groovy.syntax.SyntaxException: Access to
java.lang.Object#pOfferingInstId is forbidden"
[ 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 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
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, placing the left value is correct and placing the right value will throw an error.
bunledSubOfferInstReq.pOfferingInstId = 1234 -- complie successed
bunledSubOfferInstReq.pOfferingInstId = bunledSubOfferInstReq.pOfferingInstId --complie failed
4.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 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
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)