[ 
https://issues.apache.org/jira/browse/GROOVY-8880?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16690856#comment-16690856
 ] 

Anton Pryamostanov edited comment on GROOVY-8880 at 11/18/18 10:15 AM:
-----------------------------------------------------------------------

hi [~paulk], yes - using "Clean" Maven task. Tried many times yesterday; works 
like charm in 2.5.5.SNAPSHOT but did not work in 3.0.0.

Also I validated that commit changes were in the project files used in my build.

There were some other issues with the build yesterday (related to Asciidoc 
plugin) and they are resolved now.

I will try again and will investigate more on what was happenning and post 
update here by today evening. Now going away from city.

 

I use "Dist" task for building and then I use Binary distribution (modifying 
GROOVY_HOME in its start_groovy.bat to be of the current directory with this 
latest build).


was (Author: anton.pryamostanov):
hi [~paulk], yes - using "Clean" Maven task. Tried many times yesterday; works 
like charm in 2.5.5.SNAPSHOT but did not work in 3.0.0.

Also I validated that commit changes were in the project files used in my build.

There were some other issues with the build yesterday (related to Asciidoc 
plugin) and they are resolved now.

I will try again and will investigate more on what was happenning and post 
update here by today evening. Now going away from city.

> Traits - static/instance init blocks
> ------------------------------------
>
>                 Key: GROOVY-8880
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8880
>             Project: Groovy
>          Issue Type: Improvement
>          Components: Compiler, groovy-runtime
>    Affects Versions: 2.5.2
>            Reporter: Anton Pryamostanov
>            Assignee: Paul King
>            Priority: Major
>             Fix For: 3.0.0-alpha-4, 2.5.5
>
>
> Let's consider the below examples of Traits with Init blocks:
>  *Instance init block:*
> {code}
> trait InstanceTrait {
>     {
>         System.out.println("Instance init")
>     }
> }
> class InstanceTraitClass implements InstanceTrait {
> }
> new InstanceTraitClass()
> {code}
> This gives the below compilation exception:
> {code:java}
> General error during class generation: NPE while processing 
> script1542098577743.groovy
> groovy.lang.GroovyRuntimeException: NPE while processing 
> script1542098577743.groovy
>     at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:2
>     at 
> org.codehaus.groovy.control.CompilationUnit$17.call(CompilationUnit.java:8
>     at 
> org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:10
>     at 
> org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:6
>     at 
> org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:5
>     at 
> org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:5
>     at org.codehaus.groovy.control.CompilationUnit$compile$1.call(Unknown Sour
>     at 
> org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:
>     at 
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:1
>     at 
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:1
>     at 
> groovy.inspect.swingui.AstNodeToScriptAdapter.compileToScript(AstNodeToScriptAdapter.groovy:
>     at 
> groovy.inspect.swingui.AstNodeToScriptAdapter$compileToScript.call(Unknown 
> Sour
>     at 
> org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:
>     at 
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:1
>     at 
> groovy.inspect.swingui.AstBrowser$_decompile_closure6.doCall(AstBrowser.groovy:3
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Meth
>     at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
>     at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
>     at java.lang.reflect.Method.invoke(Method.java:4
>     at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:
>     at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:3
>     at 
> org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:2
>     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:10
>     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:10
>     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:10
>     at groovy.lang.Closure.call(Closure.java:4
>     at groovy.lang.Closure.call(Closure.java:4
>     at groovy.lang.Closure.run(Closure.java:4
>     at java.lang.Thread.run(Thread.java:7
> Caused by: java.lang.NullPointerException
>     at 
> org.codehaus.groovy.classgen.asm.CallSiteWriter.prepareCallSite(CallSiteWriter.java:2
>     at 
> org.codehaus.groovy.classgen.asm.CallSiteWriter.prepareSiteAndReceiver(CallSiteWriter.java:2
>     at 
> org.codehaus.groovy.classgen.asm.CallSiteWriter.prepareSiteAndReceiver(CallSiteWriter.java:2
>     at 
> org.codehaus.groovy.classgen.asm.CallSiteWriter.makeCallSite(CallSiteWriter.java:2
>     at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeCachedCall(InvocationWriter.java:3
>     at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeCall(InvocationWriter.java:3
>     at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeCall(InvocationWriter.java:1
>     at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeInvokeMethodCall(InvocationWriter.java:
>     at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.writeInvokeMethod(InvocationWriter.java:4
>     at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitMethodCallExpression(AsmClassGenerator.java:7
>     at 
> org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:
>     at 
> org.codehaus.groovy.classgen.asm.StatementWriter.writeExpressionStatement(StatementWriter.java:6
>     at 
> org.codehaus.groovy.classgen.asm.OptimizingStatementWriter.writeExpressionStatement(OptimizingStatementWriter.java:3
>     at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitExpressionStatement(AsmClassGenerator.java:6
>     at 
> org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:
>     at 
> org.ehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:85)
>     at 
> org.codehaus.groovy.classgen.asm.OptimizingStatementWriter.writeBlockStatement(OptimizingStatementWriter.java:1
>     at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:5
>     at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:
>     at 
> org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:
>     at 
> org.codehaus.groovy.classgen.asm.OptimizingStatementWriter.writeBlockStatement(OptimizingStatementWriter.java:1
>     at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:5
>     at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:
>     at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitObjectInitializerStatements(ClassCodeVisitorSupport.java:
>     at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:
>     at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:2
>     ... 28 m
> {code}
> *Static init block:*
> {code}
> trait StaticTrait {
>     static {
>         System.out.println("Static init")
>     }
> }
> class StaticTraitClass implements StaticTrait {
> }
> new StaticTraitClass()
> {code}
> This compiles but gives below runtime exception:
> {code:java}
> java.lang.ExceptionInInitializerError
>       at ConsoleScript278.run(ConsoleScript278:12)
> Caused by: groovy.lang.MissingMethodException: No signature of method: static 
> StaticTrait.<clinit>() is applicable for argument types: (java.lang.Class) 
> values: [class StaticTraitClass]
>       at StaticTrait$Trait$Helper.$static_methodMissing(ConsoleScript278)
>       at StaticTraitClass.<clinit>(ConsoleScript278)
>       ... 1 more
> {code}
> *Expected enhancement*:
> - If it is easy to implement - please add support for above init blocks into 
> traits.
> Use case: adding initialization traits to classes.
> - If it is difficult to implement - please add user-friendly error message 
> for both cases and take decision not to support init blocks in Groovy traits.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to