Skip to content

IndexOutOfBoundsException on >2.55 if binding returns suspend function(?) #4676

@mateuszkwiecinski

Description

@mateuszkwiecinski

The following code works fine on 2.55:

@Component(modules = [ReproModule::class])
interface Repro {

    fun repro(): suspend ((String) -> Unit) -> Unit
}

@Module
class ReproModule {

    @Provides
    fun repro(): suspend ((String) -> Unit) -> Unit = {
    }
}

When upgrading to 2.56.1 I started observing a ksp failure:

> Task :app:kspDevDebugKotlin FAILED
e: [ksp] java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100)
        at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
        at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
        at java.base/java.util.Objects.checkIndex(Objects.java:365)
        at java.base/java.util.ArrayList.get(ArrayList.java:428)
        at dagger.internal.codegen.xprocessing.Nullability.getAnnotatedTypeName(Nullability.java:91)
        at dagger.internal.codegen.xprocessing.Nullability.getAnnotatedTypeName(Nullability.java:90)
        at dagger.internal.codegen.xprocessing.Nullability.getTypeNameWithNullableAnnotations(Nullability.java:79)
        at dagger.internal.codegen.xprocessing.MethodSpecs.overriding(MethodSpecs.java:42)
        at dagger.internal.codegen.writing.ComponentRequestRepresentations.getComponentMethod(ComponentRequestRepresentations.java:190)
        at dagger.internal.codegen.writing.ComponentImplementation$ShardImplementation.addInterfaceMethods(ComponentImplementation.java:925)
        at dagger.internal.codegen.writing.ComponentImplementation$ShardImplementation.generate(ComponentImplementation.java:757)
        at dagger.internal.codegen.writing.ComponentImplementation.generate(ComponentImplementation.java:450)
        at dagger.internal.codegen.componentgenerator.ComponentGenerator.topLevelTypes(ComponentGenerator.java:61)
        at dagger.internal.codegen.componentgenerator.ComponentGenerator.topLevelTypes(ComponentGenerator.java:32)
        at dagger.internal.codegen.base.SourceFileGenerator.generate(SourceFileGenerator.java:73)
        at dagger.internal.codegen.base.SourceFileGenerator.generate(SourceFileGenerator.java:68)
        at dagger.internal.codegen.processingstep.ComponentProcessingStep.generateComponent(ComponentProcessingStep.java:137)
        at dagger.internal.codegen.processingstep.ComponentProcessingStep.processRootComponent(ComponentProcessingStep.java:115)
        at dagger.internal.codegen.processingstep.ComponentProcessingStep.process(ComponentProcessingStep.java:83)
        at dagger.internal.codegen.processingstep.ComponentProcessingStep.process(ComponentProcessingStep.java:48)
        at dagger.internal.codegen.processingstep.TypeCheckingProcessingStep.lambda$process$0(TypeCheckingProcessingStep.java:96)
        at com.google.common.collect.RegularImmutableMap.forEach(RegularImmutableMap.java:300)
        at dagger.internal.codegen.processingstep.TypeCheckingProcessingStep.process(TypeCheckingProcessingStep.java:74)
        at dagger.internal.codegen.processingstep.TypeCheckingProcessingStep.process(TypeCheckingProcessingStep.java:49)
        at dagger.spi.internal.shaded.androidx.room.compiler.processing.XProcessingStep.process(XProcessingStep.kt:57)
        at dagger.spi.internal.shaded.androidx.room.compiler.processing.CommonProcessorDelegate.processRound(XBasicAnnotationProcessor.kt:134)
        at dagger.spi.internal.shaded.androidx.room.compiler.processing.ksp.KspBasicAnnotationProcessor.process(KspBasicAnnotationProcessor.kt:62)
        at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$8$1.invoke(KotlinSymbolProcessingExtension.kt:320)
        at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$8$1.invoke(KotlinSymbolProcessingExtension.kt:318)
        at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.handleException(KotlinSymbolProcessingExtension.kt:430)
        at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.doAnalysis(KotlinSymbolProcessingExtension.kt:318)
        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$7(KotlinToJVMBytecodeCompiler.kt:326)
        at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:112)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:317)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.runFrontendAndGenerateIrUsingClassicFrontend(KotlinToJVMBytecodeCompiler.kt:154)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:75)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:167)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:36)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:113)
        at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.kt:337)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1700)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        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:714)
        at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
        at java.base/java.lang.Thread.run(Thread.java:1575)

Im not sure if this is the root cause why I started observing the issue in my main $workproject, but I see a similar error stacktrace.
I haven't found anything related in the relase notes so I figured it's worth reporting an issue

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions