KSP processing does not see member injections from typealiased superclass in 2.50
ZacSweers opened this issue · 2 comments
ZacSweers commented
When testing with Dagger 2.50, it looks like its KSP implementation does not see through typealias'd superclasses. This seems to be a regression, as it works in 2.49.
Repro
abstract class ActualBase {
@Inject lateinit var string: String
}
typealias Base = ActualBase
class InjectClass : Base() {
@Inject lateinit var numbers: List<Int>
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as InjectClass
if (numbers != other.numbers) return false
if (string != other.string) return false
return true
}
override fun hashCode(): Int {
var result = numbers.hashCode()
result = 31 * result + string.hashCode()
return result
}
}
The generated MembersInjector
class however is missing the base class's string
member
package com.squareup.test;
import dagger.MembersInjector;
import dagger.internal.DaggerGenerated;
import dagger.internal.InjectedFieldSignature;
import dagger.internal.QualifierMetadata;
import java.util.List;
import javax.annotation.processing.Generated;
import javax.inject.Provider;
@QualifierMetadata
@DaggerGenerated
@Generated(
value = "dagger.internal.codegen.ComponentProcessor",
comments = "https://dagger.dev"
)
@SuppressWarnings({
"unchecked",
"rawtypes",
"KotlinInternal",
"KotlinInternalInJava"
})
public final class InjectClass_MembersInjector implements MembersInjector<InjectClass> {
private final Provider<List<Integer>> numbersProvider;
public InjectClass_MembersInjector(Provider<List<Integer>> numbersProvider) {
this.numbersProvider = numbersProvider;
}
public static MembersInjector<InjectClass> create(Provider<List<Integer>> numbersProvider) {
return new InjectClass_MembersInjector(numbersProvider);
}
@Override
public void injectMembers(InjectClass instance) {
injectNumbers(instance, numbersProvider.get());
}
@InjectedFieldSignature("com.squareup.test.InjectClass.numbers")
public static void injectNumbers(InjectClass instance, List<Integer> numbers) {
instance.numbers = numbers;
}
}
bcorso commented
Thanks for reporting this!
My guess is that it's due to 5f8b76c, where we changed the implementation of XTypes#nonObjectSuperclass()
. That should have been a non-functional change but this sounds like there's a bug in XProcessing. I'll take a look and report back once I have more information.
bcorso commented
Filed https://issuetracker.google.com/317818395, and I'll have the fix submitted this week.