Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Information Provided
-
2.5.6
-
None
-
None
-
intellij idea
Description
Error:Groovyc: While compiling mn-gorm-example.main: BUG! exception in phase 'canonicalization' in source unit '/Users/pditommaso/Projects/mn-gorm-example/src/main/groovy/example/gorm/Bootstrap.groovy' JVM class can't be loaded for example.gorm.service.PersonService at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveJvmClass(AsmReferenceResolver.java:86) at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getTypeClass(DecompiledClassNode.java:175) at org.codehaus.groovy.ast.ClassNode.getTypeClass(ClassNode.java:1381) at io.micronaut.ast.groovy.InjectTransform$InjectVisitor.resolveParameterType(InjectTransform.groovy:1117) ...
ClassNode parameterType = parameter.type if (parameterType.isResolved()) { parameterType.typeClass // here } else { parameterType.name }
Code: https://github.com/pditommaso/mn-gorm-example
Steps to reproduce:
1. make sure the build is not delegated to Gradle in Preferences | Build, Execution, Deployment | Build Tools | Gradle
2. rebuild project
3. make changes in Person.groovy and Bootstrap.groovy (to mark them as subject for recompilation)
4. build project
What happens with -Dgroovyc.asm.resolving.only=false:
1. Bootstrap.groovy and Person.groovy are added to CompilationUnit#queuedSources
2. ResolveVisitor visits Bootstrap.groovy and tries to load PersonService
3. asmResolving flag is set to false by IntelliJ, this results in skipping findDecompiled call inside ClassNodeResolver#tryAsLoaderClassOrScript
4. the PersonService class fails to load because of missing Person class
5. tryAsScript kicks in and adds PersonService to CompilationUnit#queuedSources
6. when it comes to Micronaut ClassNode#isResolved returns false for PersonService
What happens without -Dgroovyc.asm.resolving.only=false:
1. same
2. same
3. asmResolving is not set by IntellliJ
4. findDecompiled returns DecompiledClassNode for PersonService
5. when it comes to Micronaut ClassNode#isResolved returns true for PersonService, and this results in an exception because the class cannot be loaded actually.
I've tried to fix it in the compiler but I'm not sure what's the proper fix would be.
Please let me know if I can do something within IntelliJ.
The issue in JB YouTrack for the reference: https://youtrack.jetbrains.com/issue/IDEA-218698