Skip to content

codegen produce error when process generic type with list #1729

@elivish

Description

@elivish

test case:

open class FruitStore<T> {
    var storage: List<T>? = null
    var id: Int = 0
}

@JsonClass(generateAdapter = true)
class OrangeStore : FruitStore<Orange>()

class Orange(val price: Int)

using moshi codegen 1.14.0
when process class OrangeStore which super class contains List generic type , I got this error, stack trace like below:

[ksp] Error preparing OrangeStore: com.squareup.moshi.kotlin.codegen.api.AdapterGenerator$generateType$typeRenderer$1.renderTypeVariable(AdapterGenerator.kt:262)
com.squareup.moshi.kotlin.codegen.api.TypeRenderer.render(TypeRenderer.kt:106)
com.squareup.moshi.kotlin.codegen.api.TypeRenderer.render$default(TypeRenderer.kt:43)
com.squareup.moshi.kotlin.codegen.api.TypeRenderer.renderObjectType(TypeRenderer.kt:116)
com.squareup.moshi.kotlin.codegen.api.TypeRenderer.render(TypeRenderer.kt:79)
com.squareup.moshi.kotlin.codegen.api.TypeRenderer.render$default(TypeRenderer.kt:43)
com.squareup.moshi.kotlin.codegen.api.TypeRenderer.renderObjectType(TypeRenderer.kt:116)
com.squareup.moshi.kotlin.codegen.api.TypeRenderer.render(TypeRenderer.kt:48)
com.squareup.moshi.kotlin.codegen.api.TypeRenderer.render$default(TypeRenderer.kt:43)
com.squareup.moshi.kotlin.codegen.api.DelegateKey.generateProperty$codegen(DelegateKey.kt:62)
com.squareup.moshi.kotlin.codegen.api.AdapterGenerator.generateType(AdapterGenerator.kt:270)
com.squareup.moshi.kotlin.codegen.api.AdapterGenerator.prepare(AdapterGenerator.kt:183)
com.squareup.moshi.kotlin.codegen.ksp.JsonClassSymbolProcessor.process(JsonClassSymbolProcessorProvider.kt:94)
com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$4$1.invoke(KotlinSymbolProcessingExtension.kt:237)
com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$4$1.invoke(KotlinSymbolProcessingExtension.kt:235)
com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.handleException(KotlinSymbolProcessingExtension.kt:330)
com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.doAnalysis(KotlinSymbolProcessingExtension.kt:235)
org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:123)
org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:99)
org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:264)
org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:55)
org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:115)
org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:255)
org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:101)
org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:60)
org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:157)
org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52)
org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:94)
org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:43)
org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1642)
jdk.internal.reflect.GeneratedMethodAccessor28.invoke(Unknown Source)
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.base/java.lang.reflect.Method.invoke(Unknown Source)
java.rmi/sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
java.base/java.security.AccessController.doPrivileged(Unknown Source)
java.rmi/sun.rmi.transport.Transport.serviceCall(Unknown Source)
java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(Unknown Source)
java.base/java.security.AccessController.doPrivileged(Unknown Source)
java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.base/java.lang.Thread.run(Unknown Source)

while directly declare FruitStore generic type without list like below, everything works fine.

open class FruitStore<T> {
    var storage: T? = null
    var id: Int = 0
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions