[
https://issues.apache.org/jira/browse/GROOVY-5776?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Eric Milles resolved GROOVY-5776.
---------------------------------
Resolution: Fixed
> Accessing static property in closure of sub-class creates a "serious error"
> ---------------------------------------------------------------------------
>
> Key: GROOVY-5776
> URL: https://issues.apache.org/jira/browse/GROOVY-5776
> Project: Groovy
> Issue Type: Bug
> Components: Compiler
> Affects Versions: 2.0.4, 2.4.0-rc-1
> Reporter: Andrew Eisenberg
> Priority: Major
>
> Discovered in GRECLIPSE-1492. Compile the following snippet in Groovy 2.0.4:
> {code}
> class TestappService extends ServiceBase {
> def foo = { params ->
> def param = params[TESTAPP_IDX]
> return "Hello, ${param}"
> }
> }
> class ServiceBase {
> static final String TESTAPP_IDX = 'index'
> }
> {code}
> You get this stack trace:
> {quote}
> >>> a serious error occurred: BUG! exception in phase 'class generation' in
> >>> source unit 'foo.groovy' Trying to access private constant field
> >>> [ServiceBase#TESTAPP_IDX] from inner class
> >>> stacktrace:
> BUG! exception in phase 'class generation' in source unit 'foot.groovy'
> Trying to access private constant field [ServiceBase#TESTAPP_IDX] from inner
> class
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.visitAttributeOrProperty(AsmClassGenerator.java:966)
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.visitPropertyExpression(AsmClassGenerator.java:1052)
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.processClassVariable(AsmClassGenerator.java:1292)
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.visitVariableExpression(AsmClassGenerator.java:1249)
> at
> org.codehaus.groovy.ast.expr.VariableExpression.visit(VariableExpression.java:70)
> at
> org.codehaus.groovy.classgen.asm.CallSiteWriter.visitBoxedArgument(CallSiteWriter.java:239)
> at
> org.codehaus.groovy.classgen.asm.CallSiteWriter.makeSingleArgumentCall(CallSiteWriter.java:252)
> at
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeSingleArgumentCall(InvocationWriter.java:482)
> at
> org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateBinaryExpression(BinaryExpressionHelper.java:504)
> at
> org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.eval(BinaryExpressionHelper.java:239)
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:527)
> at
> org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:49)
> at
> org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateEqual(BinaryExpressionHelper.java:295)
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.visitDeclarationExpression(AsmClassGenerator.java:522)
> at
> org.codehaus.groovy.ast.expr.DeclarationExpression.visit(DeclarationExpression.java:87)
> at
> org.codehaus.groovy.classgen.asm.StatementWriter.writeExpressionStatement(StatementWriter.java:604)
> at
> org.codehaus.groovy.classgen.asm.OptimizingStatementWriter.writeExpressionStatement(OptimizingStatementWriter.java:354)
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.visitExpressionStatement(AsmClassGenerator.java:509)
> at
> org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
> at
> org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:81)
> at
> org.codehaus.groovy.classgen.asm.OptimizingStatementWriter.writeBlockStatement(OptimizingStatementWriter.java:155)
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:455)
> at
> org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112)
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:319)
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:276)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:396)
> at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1056)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
> at
> org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:180)
> at
> org.codehaus.groovy.control.CompilationUnit$14.call(CompilationUnit.java:786)
> at
> org.codehaus.groovy.control.CompilationUnit$14.call(CompilationUnit.java:803)
> at
> org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1027)
> at
> org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:564)
> at
> org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:542)
> at
> org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:519)
> at
> org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:498)
> at
> org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:57)
> at
> org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:213)
> at
> org.codehaus.groovy.tools.FileSystemCompiler.commandLineCompile(FileSystemCompiler.java:146)
> at
> org.codehaus.groovy.tools.FileSystemCompiler.commandLineCompileWithErrorHandling(FileSystemCompiler.java:176)
> at
> org.codehaus.groovy.tools.FileSystemCompiler.main(FileSystemCompiler.java:160)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:106)
> at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:128)
> {quote}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)