You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@groovy.apache.org by Ralph Johnson <rj...@gmail.com> on 2019/09/19 16:34:27 UTC

puzzling error message in Groovy 2.5.7

I recently moved a large codebase to Groovy 2.5.7.   I use Eclipse as my
programming environment.     The system mostly works, but I get a strange
error that puzzles me.  One of my Groovy classes (PropertyDefinition) seems
to generate a type-checking error, except that it seems that Eclipse is
complaining about nothing and the program runs fine.

Eclipse shows an error-marker at the top of the file but does NOT show an
error in the project browser or give me a warning when I launch the
program.  The error-marker shows that the type-checker crashed, it does not
complain about any particular line.   The message associated with the
error-marker is

General error during instruction selection: Failed to initialize members
for type com.metaficient.core.objectmodel.PropertyDefinition
java.lang.RuntimeException: Failed to initialize members for type

 com.metaficient.core.objectmodel.PropertyDefinition at
org.codehaus.jdt.groovy.internal.compiler.ast.JDTClassNode.initializeMembers(JDTClassNode.java:306)
at

 org.codehaus.jdt.groovy.internal.compiler.ast.JDTClassNode.initialize(JDTClassNode.java:202)
at
org.codehaus.jdt.groovy.internal.compiler.ast.JDTClassNode.lazyClassInit(JDTClassNode.java:169)
at

 org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1150)
at
org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1139)
at


and so on for many lines.   This gets called by Groovy's
StaticTypeCheckingVisitor, which in turn is invoked by Eclipse.  A number
of files (a small percent of the whole) give the same error message,
including complaining about PropertyDefinition in the first line.


I have set @CompileStatic and if I comment out that line, the error message
goes away.   But I want it to be compiled statically!


How would I figure out what is causing this?   I assume it is both a bug in
the Groovy compiler (because it is not giving a property error message) and
something I am doing wrong that is triggering the bug.


Also, the system is running about ten times slower than I expected.   I
wonder whether this bug is causing parts of the system to turn off
@CompileStatic even though I declared it.   Does that seem likely?   If so,
it is very important for me to fix this problem.


-Ralph Johnson

Re: puzzling error message in Groovy 2.5.7

Posted by Paul King <pa...@asert.com.au>.
It does appear to be Eclipse related. Can you compile outside Eclipse? If
so, does the resulting class have the same inefficiency problem?

FYI, there are a small number of cases where we still call into the dynamic
runtime even when @CompileStatic is in place. That is also a possibility.
Looking at the bytecode can sometimes indicate such edge cases. There are
sometimes ways to avoid those edge cases with some alternative coding.

Cheers, Paul.

On Fri, Sep 20, 2019 at 2:34 AM Ralph Johnson <rj...@gmail.com>
wrote:

> I recently moved a large codebase to Groovy 2.5.7.   I use Eclipse as my
> programming environment.     The system mostly works, but I get a strange
> error that puzzles me.  One of my Groovy classes (PropertyDefinition) seems
> to generate a type-checking error, except that it seems that Eclipse is
> complaining about nothing and the program runs fine.
>
> Eclipse shows an error-marker at the top of the file but does NOT show an
> error in the project browser or give me a warning when I launch the
> program.  The error-marker shows that the type-checker crashed, it does not
> complain about any particular line.   The message associated with the
> error-marker is
>
> General error during instruction selection: Failed to initialize members
> for type com.metaficient.core.objectmodel.PropertyDefinition
> java.lang.RuntimeException: Failed to initialize members for type
>
>  com.metaficient.core.objectmodel.PropertyDefinition at
> org.codehaus.jdt.groovy.internal.compiler.ast.JDTClassNode.initializeMembers(JDTClassNode.java:306)
> at
>
>  org.codehaus.jdt.groovy.internal.compiler.ast.JDTClassNode.initialize(JDTClassNode.java:202)
> at
> org.codehaus.jdt.groovy.internal.compiler.ast.JDTClassNode.lazyClassInit(JDTClassNode.java:169)
> at
>
>  org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1150)
> at
> org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1139)
> at
>
>
> and so on for many lines.   This gets called by Groovy's
> StaticTypeCheckingVisitor, which in turn is invoked by Eclipse.  A number
> of files (a small percent of the whole) give the same error message,
> including complaining about PropertyDefinition in the first line.
>
>
> I have set @CompileStatic and if I comment out that line, the error
> message goes away.   But I want it to be compiled statically!
>
>
> How would I figure out what is causing this?   I assume it is both a bug
> in the Groovy compiler (because it is not giving a property error message)
> and something I am doing wrong that is triggering the bug.
>
>
> Also, the system is running about ten times slower than I expected.   I
> wonder whether this bug is causing parts of the system to turn off
> @CompileStatic even though I declared it.   Does that seem likely?   If so,
> it is very important for me to fix this problem.
>
>
> -Ralph Johnson
>