I'm having problems with using Micronaut's ksp plugin along with Komapper's for all of Komapper's ge...
d
I'm having problems with using Micronaut's ksp plugin along with Komapper's for all of Komapper's generated classes I'm getting:
Error processing type visitor [io.micronaut.context.visitor.ExecutableVisitor@7d7e075a]: Descriptor wasn't found for declaration CLASS
... anyone knows any workaround for this? (stacktrace in the thread)
Copy code
org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException: Descriptor wasn't found for declaration CLASS
	at org.jetbrains.kotlin.resolve.lazy.BasicAbsentDescriptorHandler.diagnoseDescriptorNotFound(AbsentDescriptorHandler.kt:18)
	at org.jetbrains.kotlin.resolve.lazy.BasicAbsentDescriptorHandler.diagnoseDescriptorNotFound(AbsentDescriptorHandler.kt:17)
	at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver.findClassDescriptor(LazyDeclarationResolver.kt:88)
	at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver.getClassDescriptor(LazyDeclarationResolver.kt:62)
	at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver.getMemberScopeDeclaredIn$frontend(LazyDeclarationResolver.kt:227)
	at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver$resolveToDescriptor$1.visitNamedFunction(LazyDeclarationResolver.kt:124)
	at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver$resolveToDescriptor$1.visitNamedFunction(LazyDeclarationResolver.kt:94)
	at org.jetbrains.kotlin.psi.KtNamedFunction.accept(KtNamedFunction.java:50)
	at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver.resolveToDescriptor(LazyDeclarationResolver.kt:94)
	at org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver.resolveToDescriptor(LazyDeclarationResolver.kt:91)
	at org.jetbrains.kotlin.resolve.lazy.ResolveSession.resolveToDescriptor(ResolveSession.java:368)
	at com.google.devtools.ksp.processing.impl.ResolverImpl.resolveDeclaration(ResolverImpl.kt:517)
	at com.google.devtools.ksp.processing.impl.ResolverImpl.resolveFunctionDeclaration(ResolverImpl.kt:582)
	at com.google.devtools.ksp.processing.impl.ResolverImpl.overrides$resolveForOverride(ResolverImpl.kt:378)
	at com.google.devtools.ksp.processing.impl.ResolverImpl.overrides(ResolverImpl.kt:398)
	at io.micronaut.kotlin.processing.KotlinNativeElementsHelper.overrides(KotlinNativeElementsHelper.kt:55)
	at io.micronaut.kotlin.processing.KotlinNativeElementsHelper.overrides(KotlinNativeElementsHelper.kt:33)
	at io.micronaut.inject.utils.NativeElementsHelper.reduce(NativeElementsHelper.java:249)
	at io.micronaut.inject.utils.NativeElementsHelper.processInterfaceHierarchy(NativeElementsHelper.java:225)
	at io.micronaut.inject.utils.NativeElementsHelper.processInterfaceHierarchy(NativeElementsHelper.java:223)
	at io.micronaut.inject.utils.NativeElementsHelper.processClassHierarchy(NativeElementsHelper.java:210)
	at io.micronaut.inject.utils.NativeElementsHelper.getAllElements(NativeElementsHelper.java:191)
	at io.micronaut.inject.utils.NativeElementsHelper.findOverriddenMethods(NativeElementsHelper.java:168)
	at io.micronaut.kotlin.processing.KotlinNativeElementsHelper.findOverriddenMethods(KotlinNativeElementsHelper.kt:51)
	at io.micronaut.kotlin.processing.annotation.KotlinAnnotationMetadataBuilder.methodsHierarchy(KotlinAnnotationMetadataBuilder.kt:320)
	at io.micronaut.kotlin.processing.annotation.KotlinAnnotationMetadataBuilder.buildHierarchy(KotlinAnnotationMetadataBuilder.kt:305)
	at io.micronaut.kotlin.processing.annotation.KotlinAnnotationMetadataBuilder.buildHierarchy(KotlinAnnotationMetadataBuilder.kt:57)
	at io.micronaut.inject.annotation.AbstractAnnotationMetadataBuilder.buildInternalMulti(AbstractAnnotationMetadataBuilder.java:778)
	at io.micronaut.inject.annotation.AbstractAnnotationMetadataBuilder.buildInternal(AbstractAnnotationMetadataBuilder.java:246)
	at io.micronaut.inject.annotation.AbstractAnnotationMetadataBuilder.lookupOrBuild(AbstractAnnotationMetadataBuilder.java:235)
	at io.micronaut.kotlin.processing.annotation.KotlinElementAnnotationMetadataFactory.lookupForMethod(KotlinElementAnnotationMetadataFactory.kt:177)
	at io.micronaut.inject.ast.annotation.AbstractElementAnnotationMetadataFactory$8.lookup(AbstractElementAnnotationMetadataFactory.java:337)
	at io.micronaut.inject.ast.annotation.AbstractElementAnnotationMetadataFactory$AbstractElementAnnotationMetadata.getCacheEntry(AbstractElementAnnotationMetadataFactory.java:451)
	at io.micronaut.inject.ast.annotation.AbstractElementAnnotationMetadataFactory$AbstractElementAnnotationMetadata.getAnnotationMetadataToModify(AbstractElementAnnotationMetadataFactory.java:469)
	at io.micronaut.inject.ast.annotation.AbstractElementAnnotationMetadataFactory$MutableElementAnnotationMetadata.annotate(AbstractElementAnnotationMetadataFactory.java:528)
	at io.micronaut.inject.ast.annotation.AbstractElementAnnotationMetadataFactory$MutableElementAnnotationMetadata.annotate(AbstractElementAnnotationMetadataFactory.java:502)
	at io.micronaut.inject.ast.annotation.MutableAnnotationMetadataDelegate.annotate(MutableAnnotationMetadataDelegate.java:127)
	at io.micronaut.inject.ast.annotation.AbstractAnnotationElement.annotate(AbstractAnnotationElement.java:120)
	at io.micronaut.kotlin.processing.visitor.KotlinElementFactory.newMethodElement(KotlinElementFactory.kt:95)
	at io.micronaut.kotlin.processing.visitor.KotlinClassElement$KotlinEnclosedElementsQuery.toAstElement(KotlinClassElement.kt:880)
	at io.micronaut.kotlin.processing.visitor.KotlinClassElement$KotlinEnclosedElementsQuery.toAstElement(KotlinClassElement.kt:686)
	at io.micronaut.inject.ast.utils.EnclosedElementsQuery.lambda$convertElement$3(EnclosedElementsQuery.java:373)
	at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1220)
	at io.micronaut.inject.ast.utils.EnclosedElementsQuery.convertElement(EnclosedElementsQuery.java:373)
	at io.micronaut.inject.ast.utils.EnclosedElementsQuery.reduce(EnclosedElementsQuery.java:312)
	at io.micronaut.inject.ast.utils.EnclosedElementsQuery.processClassHierarchy(EnclosedElementsQuery.java:266)
	at io.micronaut.inject.ast.utils.EnclosedElementsQuery.getAllElements(EnclosedElementsQuery.java:248)
	at io.micronaut.inject.ast.utils.EnclosedElementsQuery.getEnclosedElements(EnclosedElementsQuery.java:189)
	at io.micronaut.kotlin.processing.visitor.KotlinClassElement.getEnclosedElements(KotlinClassElement.kt:684)
	at io.micronaut.kotlin.processing.visitor.TypeElementSymbolProcessor$ElementVisitor.visitMembers(TypeElementSymbolProcessor.kt:310)
	at io.micronaut.kotlin.processing.visitor.TypeElementSymbolProcessor$ElementVisitor.visitClassDeclaration(TypeElementSymbolProcessor.kt:277)
	at com.google.devtools.ksp.symbol.impl.kotlin.KSClassDeclarationImpl.accept(KSClassDeclarationImpl.kt:133)
	at io.micronaut.kotlin.processing.visitor.TypeElementSymbolProcessor.process(TypeElementSymbolProcessor.kt:130)
	at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$8$1.invoke(KotlinSymbolProcessingExtension.kt:310)
	at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$8$1.invoke(KotlinSymbolProcessingExtension.kt:308)
	at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.handleException(KotlinSymbolProcessingExtension.kt:414)
	at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.doAnalysis(KotlinSymbolProcessingExtension.kt:308)
	at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:112)
	at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:75)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze$lambda$12(KotlinToJVMBytecodeCompiler.kt:373)
	at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:115)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:364)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.repeatAnalysisIfNeeded(KotlinToJVMBytecodeCompiler.kt:282)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.runFrontendAndGenerateIrUsingClassicFrontend(KotlinToJVMBytecodeCompiler.kt:195)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:106)
	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:176)
	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:50)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:104)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:48)
	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
	at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1556)
	at jdk.internal.reflect.GeneratedMethodAccessor95.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
	at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)
t
Hello. Which version of Micronaut are you using? If you are using a version that does not include this fix, the exception you shared might occur.
d
4.5.1
It seems like that was merged already in 4.3.x...?
t
Thank you for letting me know. In that case, my suggestion might not be appropriate. However, I think this exception could occur if a KSP processor is using the resolver or elements from the previous round.
d
It seems like that from those issues... I just have no idea how to solve this problem... it's very sad that I can't use Komapper in that project... right now, I'm trying to separate the data layer into a separate gradle module, w/o any Micronaut ksp processor in there... I really hope at least that would solve the problem.
t
It seems like this might be an issue with Micronaut. Could this be the same problem you’re experiencing? https://github.com/micronaut-projects/micronaut-core/issues/11058
But it seems like sqldelight and kotlinpoet had some kind of fix...? https://github.com/google/ksp/issues/621 I'm not sure if this is related: https://github.com/google/ksp/issues/526#issuecomment-896396708
It worked in separate modules... but it's a pity that they can't work together... and from the issues, it doesn't seem like the Micronaut team knows what to fix in the first place...
t
This is just my guess, but I think the issue might be that the previous round’s resolver is being used within
KotlinVisitorContext
. While a new resolver is set for the
resolver
property at line 53 for each round, the
annotationMetadataBuilder
property at line 59 and the
nativeElementsHelper
property at line 62 are still referencing the old resolver. It might be a good idea to recreate the
KotlinVisitorContext
instance for each round. https://github.com/micronaut-projects/micronaut-core/blob/bdd7e68e6dc0df804628f5156581509a95a5d20d/inject-kotlin/src/main/kotlin/io/micronaut/kotlin/processing/visitor/KotlinVisitorContext.kt#L53
d
Thanks for looking into this one, I hope I understand enough about this not to mess up opening an issue in their repository... I'll try to get to doing that soon, I hope they'll take care of this once and for all soon!