google / dagger

A fast dependency injector for Android and Java.
https://dagger.dev
Apache License 2.0
17.43k stars 2.01k forks source link

[KSP2] ClassCastException: class KSClassDeclarationEnumEntryImpl cannot be cast to class XEnumEntry #4376

Closed ZacSweers closed 2 months ago

ZacSweers commented 2 months ago

When processing a mapkey annotation with an enum value, the following exception occurs during processing with KSP2 enabled.

Example map key

@MapKey
@Target(
  AnnotationTarget.FUNCTION,
  AnnotationTarget.PROPERTY_GETTER,
  AnnotationTarget.PROPERTY_SETTER,
)
internal annotation class LogTypeKey(val value: LogType)

enum class LogType {
  SLOG,
  TRACE,
  UNKNOWN,
}

@Provides
@IntoMap
@LogTypeKey(LogType.SLOG)
fun providesValue(): String {
  return ...
}
Caused by: java.lang.ClassCastException: class com.google.devtools.ksp.impl.symbol.kotlin.KSClassDeclarationEnumEntryImpl cannot be cast to class dagger.spi.internal.shaded.androidx.room.compiler.processing.XEnumEntry (com.google.devtools.ksp.impl.symbol.kotlin.KSClassDeclarationEnumEntryImpl is in unnamed module of loader java.net.URLClassLoader @1d166608; dagger.spi.internal.shaded.androidx.room.compiler.processing.XEnumEntry is in unnamed module of loader java.net.URLClassLoader @652e3541)   
    at dagger.spi.internal.shaded.androidx.room.compiler.processing.XAnnotationValue.asEnum(XAnnotationValue.kt:78) 
    at dagger.internal.codegen.xprocessing.XAnnotationValues.toStableString(XAnnotationValues.java:142) 
    at dagger.internal.codegen.xprocessing.XAnnotationValues.lambda$toStableString$0(XAnnotationValues.java:137)    
    at dagger.internal.codegen.xprocessing.XAnnotationValues.toStableString(XAnnotationValues.java:138) 
    at dagger.internal.codegen.xprocessing.XAnnotations.lambda$toStableString$0(XAnnotations.java:120)  
    at dagger.internal.codegen.xprocessing.XAnnotations.toStableString(XAnnotations.java:127)   
    at dagger.internal.codegen.base.DaggerSuperficialValidation$ValidationException.append(DaggerSuperficialValidation.java:579)    
    at dagger.internal.codegen.base.DaggerSuperficialValidation$ValidationException.access$300(DaggerSuperficialValidation.java:491)    
    at dagger.internal.codegen.base.DaggerSuperficialValidation.validateAnnotation(DaggerSuperficialValidation.java:414)    
    at dagger.internal.codegen.base.DaggerSuperficialValidation.validateAnnotations(DaggerSuperficialValidation.java:401)   
    at dagger.internal.codegen.base.DaggerSuperficialValidation.validateAnnotationsOf(DaggerSuperficialValidation.java:209) 
    at dagger.internal.codegen.base.DaggerSuperficialValidation.validateElement(DaggerSuperficialValidation.java:264)   
    at dagger.internal.codegen.processingstep.SuperficialValidator.validationExceptionsUncached(SuperficialValidator.java:58)   
    at dagger.internal.codegen.processingstep.SuperficialValidator.throwIfNearestEnclosingTypeNotValid(SuperficialValidator.java:47)    
    at dagger.internal.codegen.processingstep.TypeCheckingProcessingStep.lambda$process$0(TypeCheckingProcessingStep.java:92)   
    at com.google.common.collect.SingletonImmutableBiMap.forEach(SingletonImmutableBiMap.java:70)   
    at dagger.internal.codegen.processingstep.TypeCheckingProcessingStep.process(TypeCheckingProcessingStep.java:72)    
    at dagger.internal.codegen.processingstep.TypeCheckingProcessingStep.process(TypeCheckingProcessingStep.java:49)    
    at dagger.spi.internal.shaded.androidx.room.compiler.processing.XProcessingStep.process(XProcessingStep.kt:59)  
    at dagger.spi.internal.shaded.androidx.room.compiler.processing.CommonProcessorDelegate.processRound(XBasicAnnotationProcessor.kt:132)  
    at dagger.spi.internal.shaded.androidx.room.compiler.processing.ksp.KspBasicAnnotationProcessor.process(KspBasicAnnotationProcessor.kt:62)  
    at com.google.devtools.ksp.impl.KotlinSymbolProcessing.execute(KotlinSymbolProcessing.kt:538)   
    at com.google.devtools.ksp.impl.KSPLoader$Companion.loadAndRunKSP(KSPLoader.kt:36)  
    at com.google.devtools.ksp.impl.KSPLoader.loadAndRunKSP(KSPLoader.kt)
kuanyingchou commented 2 months ago

Hi, @ZacSweers , thanks for the report! This should have been fixed in XProcessing recently with https://android-review.googlesource.com/c/platform/frameworks/support/+/3091719. Could you try again with Dagger 2.52?

ZacSweers commented 2 months ago

Appears to be good on our end!