I'm getting `java.lang.IllegalStateException: Unsu...
# squarelibraries
m
I'm getting
java.lang.IllegalStateException: Unsupported type BookDto at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorTypeVisitor.visitUnknown(JvmDescriptorUtils.kt:191)
. BookDto is a simple data class generated by sqldelight. Then during kapt phase my processor tries to generate a few classes and without
correctErrorTypes = false
it generates them with
NonExistentClass
and with
correctErrorTypes = true
this error. What could that mean? The line that causes it in the processor:
Copy code
val typeSpec = (element as TypeElement).toTypeSpec(classInspector)
Also it's random. From time to time it builds just fine, but 80% of the time it fails. (kotlinpoet 1.10 and 1.11, kotlin 1.6.21, sqldelight 1.5.3, full exception in thread)
Copy code
java.lang.IllegalStateException: Unsupported type BookDto
	at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorTypeVisitor.visitUnknown(JvmDescriptorUtils.kt:191)
	at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorTypeVisitor.visitError(JvmDescriptorUtils.kt:187)
	at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorTypeVisitor.visitError(JvmDescriptorUtils.kt:174)
	at jdk.compiler/com.sun.tools.javac.code.Type$ErrorType.accept(Type.java:2394)
	at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorUtilsKt.descriptor(JvmDescriptorUtils.kt:112)
	at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorUtilsKt$descriptor$parameterDescriptors$1.invoke(JvmDescriptorUtils.kt:140)
	at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorUtilsKt$descriptor$parameterDescriptors$1.invoke(JvmDescriptorUtils.kt:140)
	at kotlin.text.StringsKt__AppendableKt.appendElement(Appendable.kt:85)
	at kotlin.collections.CollectionsKt___CollectionsKt.joinTo(_Collections.kt:3347)
	at kotlin.collections.CollectionsKt___CollectionsKt.joinToString(_Collections.kt:3364)
	at kotlin.collections.CollectionsKt___CollectionsKt.joinToString$default(_Collections.kt:3363)
	at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorUtilsKt.descriptor(JvmDescriptorUtils.kt:140)
	at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorTypeVisitor.visitExecutable(JvmDescriptorUtils.kt:181)
	at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorTypeVisitor.visitExecutable(JvmDescriptorUtils.kt:174)
	at jdk.compiler/com.sun.tools.javac.code.Type$MethodType.accept(Type.java:1513)
	at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorUtilsKt.descriptor(JvmDescriptorUtils.kt:112)
	at com.squareup.kotlinpoet.metadata.classinspectors.JvmDescriptorUtilsKt.jvmMethodSignature(JvmDescriptorUtils.kt:153)
	at com.squareup.kotlinpoet.metadata.classinspectors.ElementsClassInspector.lookupMethod(ElementsClassInspector.kt:155)
	at com.squareup.kotlinpoet.metadata.classinspectors.ElementsClassInspector.containerData(ElementsClassInspector.kt:459)
	at com.squareup.kotlinpoet.metadata.specs.ClassInspectorKt.containerData(ClassInspector.kt:99)
	at com.squareup.kotlinpoet.metadata.specs.KotlinPoetMetadataSpecs.toTypeSpec(KotlinPoetMetadataSpecs.kt:265)
	at com.squareup.kotlinpoet.metadata.specs.KotlinPoetMetadataSpecs.toTypeSpec(KotlinPoetMetadataSpecs.kt:182)
	at com.squareup.kotlinpoet.metadata.specs.KotlinPoetMetadataSpecs.toTypeSpec(KotlinPoetMetadataSpecs.kt:153)
	at com.futuremind.koru.processor.Processor.generateWrappedClasses(Processor.kt:153)
	at com.futuremind.koru.processor.Processor.process(Processor.kt:74)
	at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt:90)
	at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:188)
	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:980)
	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:896)
	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1222)
	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1335)
	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1258)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:90)
	at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:31)
	at org.jetbrains.kotlin.kapt3.base.Kapt.kapt(Kapt.kt:47)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.jetbrains.kotlin.gradle.internal.KaptExecution.run(KaptWithoutKotlincTask.kt:302)
	at org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction.execute(KaptWithoutKotlincTask.kt:257)
	at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
	at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:97)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
	at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
	at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
	at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
	at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$2(DefaultWorkerExecutor.java:206)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:214)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:131)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
	at java.base/java.lang.Thread.run(Thread.java:829)
z
What's the source code for BookDto?
m
Copy code
package com.example.db

import kotlin.Long
import kotlin.String

public data class BookDto(
  public val id: Long,
  public val releaseId: Long,
  public val title: String,
  public val description: String,
  public val coverUri: String,
  public val dateValid: Long,
  public val version: String,
  public val minAppVersion: String,
  public val downloadedBookUri: String?,
  public val downloadedVersion: String?,
  public val downloadedMediaId: Long?,
  public val downloadedXmlId: Long?,
  public val bookmarkedPage: Long?
) {
  public override fun toString(): String = """
  |BookDto [
  |  id: $id
  |  releaseId: $releaseId
  |  title: $title
  |  description: $description
  |  coverUri: $coverUri
  |  dateValid: $dateValid
  |  version: $version
  |  minAppVersion: $minAppVersion
  |  downloadedBookUri: $downloadedBookUri
  |  downloadedVersion: $downloadedVersion
  |  downloadedMediaId: $downloadedMediaId
  |  downloadedXmlId: $downloadedXmlId
  |  bookmarkedPage: $bookmarkedPage
  |]
  """.trimMargin()
}
z
I don’t have a good answer for you. That error comes from javac, so it’s likely a kapt bug somewhere. You’ll need to make a minimally reproducing sample and we could go from there (likely a bug report on youtrack)
m
I think it appeared at some point where I updated lib versions... Will try to make a reproducing sample, although with the flakiness that might be super hard. Any kotlinpoet / kapt / sqldelight insights that might help? Especially what might cause going inside
visitUnknown
in kotlinpoet in general? I thought it might be some kind of race between sqldelight codegen and my kapt processor but even when BookDto is already created it happens (consecutive build attempts). Does sqldelight use kapt?