[FIR] Fix applying generated supertypes for classes without explicit supertypes

This commit is contained in:
Dmitriy Novozhilov
2021-09-30 12:18:11 +03:00
committed by TeamCityServer
parent 26fa772846
commit e26cd74b16
5 changed files with 97 additions and 25 deletions
@@ -19,11 +19,11 @@ abstract class FirSupertypeGenerationExtension(session: FirSession) : FirPredica
final override val name: FirExtensionPointName
get() = NAME
override val extensionType: KClass<out FirExtension> = FirSupertypeGenerationExtension::class
final override val extensionType: KClass<out FirExtension> = FirSupertypeGenerationExtension::class
abstract fun computeAdditionalSupertypes(
classLikeDeclaration: FirClassLikeDeclaration,
resolvedSupertypes: List<FirTypeRef>
resolvedSupertypes: List<FirResolvedTypeRef>
): List<FirResolvedTypeRef>
fun interface Factory : FirExtension.Factory<FirSupertypeGenerationExtension>
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef
import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -120,7 +121,7 @@ open class FirApplySupertypesTransformer(
}
private fun applyResolvedSupertypesToClass(firClass: FirClass) {
if (firClass.superTypeRefs.any { it !is FirResolvedTypeRef }) {
if (firClass.superTypeRefs.any { it !is FirResolvedTypeRef || it is FirImplicitBuiltinTypeRef }) {
val supertypeRefs = getResolvedSupertypeRefs(firClass)
// TODO: Replace with an immutable version or transformer