[ 
https://issues.apache.org/jira/browse/GROOVY-10932?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lóránt Pintér updated GROOVY-10932:
-----------------------------------
    Description: 
See reproducer here: 
[https://github.com/asodja/groovy-traits-compilation-reproducer]

This reproduces issue with Groovy traits and Gradle incremental compilation.

Steps to reproduce:

1. git clone [email protected]:asodja/groovy-traits-compilation-reproducer.git
2. run `./gradlew :lib:compileGroovy --no-build-cache`
3. Change `println("a")` in MyTest.groovy to `println("b")`
4. run `./gradlew :lib:compileGroovy --no-build-cache` again
5. See error

To resolve the issue run `./gradlew :lib:compileGroovy --no-build-cache 
--rerun-tasks`

Exception thrown:
{code:java}
java.lang.RuntimeException: java.lang.NoClassDefFoundError: Unable to load 
class test.groovy.traits.WithPluginValidation$AllPluginsValidation due to 
missing dependency Ltest/groovy/traits/MyTestBase;
at 
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:977)
at 
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:672)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:636)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:611)
at 
org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:271)
...
Caused by: java.lang.NoClassDefFoundError: Unable to load class 
test.groovy.traits.WithPluginValidation$AllPluginsValidation due to missing 
dependency Ltest/groovy/traits/MyTestBase;
at org.codehaus.groovy.vmplugin.v8.Java8.configureClassNode(Java8.java:447)
at org.codehaus.groovy.ast.ClassNode.lazyClassInit(ClassNode.java:273)
at 
org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1014)
at 
org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1006)
at org.codehaus.groovy.ast.ClassNode.getSuperClass(ClassNode.java:1000)
at org.codehaus.groovy.ast.ClassNode.isDerivedFrom(ClassNode.java:911)
at 
org.codehaus.groovy.classgen.asm.InvocationWriter.castToNonPrimitiveIfNecessary(InvocationWriter.java:1144)
at 
org.codehaus.groovy.classgen.asm.OperandStack.doConvertAndCast(OperandStack.java:363)
at 
org.codehaus.groovy.classgen.asm.OperandStack.doGroovyCast(OperandStack.java:300)
at 
org.codehaus.groovy.classgen.AsmClassGenerator.storeThisInstanceField(AsmClassGenerator.java:1259)
at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitFieldExpression(AsmClassGenerator.java:1196)
at org.codehaus.groovy.ast.expr.FieldExpression.visit(FieldExpression.java:41)
at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitPropertyExpression(AsmClassGenerator.java:1124)
at 
org.codehaus.groovy.ast.expr.PropertyExpression.visit(PropertyExpression.java:63)
at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitVariableExpression(AsmClassGenerator.java:1339)
at 
org.codehaus.groovy.ast.expr.VariableExpression.visit(VariableExpression.java:71)
...
at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:273)
at org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:798)
at 
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:943)
... 34 more
{code}
Classes hierarchy:
{code:java}
class MyTest extends MyTestBase implements WithPluginValidation { ... }

class MyTestBase { ... } // has a dependency to MyTest inside a 
method@SelfType(MyTestBase)

trait WithPluginValidation {
    final AllPluginsValidation allPlugins = new AllPluginsValidation(this)

    static class AllPluginsValidation {
        final MyTestBase base
        AllPluginsValidation(MyTestBase base) {
            this.base = base
        }
    }
}{code}
 

  was:
See reproducer here: 
https://github.com/asodja/groovy-traits-compilation-reproducer

This reproduces issue with Groovy traits and Gradle incremental compilation.

Steps to reproduce:

1. git clone [email protected]:asodja/groovy-traits-compilation-reproducer.git
2. run `./gradlew :lib:compileGroovy --no-build-cache`
3. Change `println("a")` in MyTest.groovy to `println("b")`
4. run `./gradlew :lib:compileGroovy --no-build-cache` again
5. See error

To resolve the issue run `./gradlew :lib:compileGroovy --no-build-cache 
--rerun-tasks`

Exception thrown:
{code:java}
java.lang.RuntimeException: java.lang.NoClassDefFoundError: Unable to load 
class test.groovy.traits.WithPluginValidation$AllPluginsValidation due to 
missing dependency Ltest/groovy/traits/MyTestBase;
at 
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:977)
at 
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:672)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:636)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:611)
at 
org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:271)
...
Caused by: java.lang.NoClassDefFoundError: Unable to load class 
test.groovy.traits.WithPluginValidation$AllPluginsValidation due to missing 
dependency Ltest/groovy/traits/MyTestBase;
at org.codehaus.groovy.vmplugin.v8.Java8.configureClassNode(Java8.java:447)
at org.codehaus.groovy.ast.ClassNode.lazyClassInit(ClassNode.java:273)
at 
org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1014)
at 
org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1006)
at org.codehaus.groovy.ast.ClassNode.getSuperClass(ClassNode.java:1000)
at org.codehaus.groovy.ast.ClassNode.isDerivedFrom(ClassNode.java:911)
at 
org.codehaus.groovy.classgen.asm.InvocationWriter.castToNonPrimitiveIfNecessary(InvocationWriter.java:1144)
at 
org.codehaus.groovy.classgen.asm.OperandStack.doConvertAndCast(OperandStack.java:363)
at 
org.codehaus.groovy.classgen.asm.OperandStack.doGroovyCast(OperandStack.java:300)
at 
org.codehaus.groovy.classgen.AsmClassGenerator.storeThisInstanceField(AsmClassGenerator.java:1259)
at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitFieldExpression(AsmClassGenerator.java:1196)
at org.codehaus.groovy.ast.expr.FieldExpression.visit(FieldExpression.java:41)
at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitPropertyExpression(AsmClassGenerator.java:1124)
at 
org.codehaus.groovy.ast.expr.PropertyExpression.visit(PropertyExpression.java:63)
at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitVariableExpression(AsmClassGenerator.java:1339)
at 
org.codehaus.groovy.ast.expr.VariableExpression.visit(VariableExpression.java:71)
...
at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:273)
at org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:798)
at 
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:943)
... 34 more
{code}
Classes hierarchy:
{code:java}
class MyTest extends MyTestBase implements WithPluginValidation

{ ... }
class MyTestBase \{ ... }

has a dependency to MyTest inside a method
@SelfType(MyTestBase)
trait WithPluginValidation {
final AllPluginsValidation allPlugins = new AllPluginsValidation(this)
static class AllPluginsValidation {
final MyTestBase base
AllPluginsValidation(MyTestBase base)

{ this.base = base }

}
}
{code}


> Groovy incremental compilation failure with traits
> --------------------------------------------------
>
>                 Key: GROOVY-10932
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10932
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 3.0.15
>            Reporter: Lóránt Pintér
>            Priority: Major
>
> See reproducer here: 
> [https://github.com/asodja/groovy-traits-compilation-reproducer]
> This reproduces issue with Groovy traits and Gradle incremental compilation.
> Steps to reproduce:
> 1. git clone [email protected]:asodja/groovy-traits-compilation-reproducer.git
> 2. run `./gradlew :lib:compileGroovy --no-build-cache`
> 3. Change `println("a")` in MyTest.groovy to `println("b")`
> 4. run `./gradlew :lib:compileGroovy --no-build-cache` again
> 5. See error
> To resolve the issue run `./gradlew :lib:compileGroovy --no-build-cache 
> --rerun-tasks`
> Exception thrown:
> {code:java}
> java.lang.RuntimeException: java.lang.NoClassDefFoundError: Unable to load 
> class test.groovy.traits.WithPluginValidation$AllPluginsValidation due to 
> missing dependency Ltest/groovy/traits/MyTestBase;
> at 
> org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:977)
> at 
> org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:672)
> at 
> org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:636)
> at 
> org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:611)
> at 
> org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:271)
> ...
> Caused by: java.lang.NoClassDefFoundError: Unable to load class 
> test.groovy.traits.WithPluginValidation$AllPluginsValidation due to missing 
> dependency Ltest/groovy/traits/MyTestBase;
> at org.codehaus.groovy.vmplugin.v8.Java8.configureClassNode(Java8.java:447)
> at org.codehaus.groovy.ast.ClassNode.lazyClassInit(ClassNode.java:273)
> at 
> org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1014)
> at 
> org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1006)
> at org.codehaus.groovy.ast.ClassNode.getSuperClass(ClassNode.java:1000)
> at org.codehaus.groovy.ast.ClassNode.isDerivedFrom(ClassNode.java:911)
> at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.castToNonPrimitiveIfNecessary(InvocationWriter.java:1144)
> at 
> org.codehaus.groovy.classgen.asm.OperandStack.doConvertAndCast(OperandStack.java:363)
> at 
> org.codehaus.groovy.classgen.asm.OperandStack.doGroovyCast(OperandStack.java:300)
> at 
> org.codehaus.groovy.classgen.AsmClassGenerator.storeThisInstanceField(AsmClassGenerator.java:1259)
> at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitFieldExpression(AsmClassGenerator.java:1196)
> at org.codehaus.groovy.ast.expr.FieldExpression.visit(FieldExpression.java:41)
> at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitPropertyExpression(AsmClassGenerator.java:1124)
> at 
> org.codehaus.groovy.ast.expr.PropertyExpression.visit(PropertyExpression.java:63)
> at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitVariableExpression(AsmClassGenerator.java:1339)
> at 
> org.codehaus.groovy.ast.expr.VariableExpression.visit(VariableExpression.java:71)
> ...
> at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
> at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:273)
> at 
> org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:798)
> at 
> org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:943)
> ... 34 more
> {code}
> Classes hierarchy:
> {code:java}
> class MyTest extends MyTestBase implements WithPluginValidation { ... }
> class MyTestBase { ... } // has a dependency to MyTest inside a 
> method@SelfType(MyTestBase)
> trait WithPluginValidation {
>     final AllPluginsValidation allPlugins = new AllPluginsValidation(this)
>     static class AllPluginsValidation {
>         final MyTestBase base
>         AllPluginsValidation(MyTestBase base) {
>             this.base = base
>         }
>     }
> }{code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to