groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Anton Pryamostanov (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (GROOVY-8880) Traits - static/instance init blocks
Date Sun, 18 Nov 2018 10:15:00 GMT

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

Anton Pryamostanov commented on GROOVY-8880:
--------------------------------------------

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 plug) 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)

Mime
View raw message