diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt index 2ed4f31c1b6..1c1bd4fa0a4 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt @@ -11,10 +11,7 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.scopes.addImportingScopes -import org.jetbrains.kotlin.fir.types.ConeClassLikeType -import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.coneTypeSafe +import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult import org.jetbrains.kotlin.fir.visitors.compose @@ -162,7 +159,14 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe val resultingTypeRefs = mutableListOf() for (superTypeRef in resolvedTypesRefs) { - val resolvedType = superTypeRef.coneTypeSafe() ?: continue + val coneType = (superTypeRef as FirResolvedTypeRef).type + if (coneType is ConeTypeParameterType) { + resultingTypeRefs.add( + FirErrorTypeRefImpl(superTypeRef.psi, "Type parameter cannot be a super-type: ${coneType.render()}") + ) + continue + } + val resolvedType = coneType as ConeClassLikeType val superTypeClassId = resolvedType.lookupTag.classId if (superTypeClassId.outerClasses().any { it.areSupertypesComputing() }) { diff --git a/compiler/fir/resolve/testData/resolve/typeParameterVsNested.kt b/compiler/fir/resolve/testData/resolve/typeParameterVsNested.kt index df1765a2f4f..3c8e593c9de 100644 --- a/compiler/fir/resolve/testData/resolve/typeParameterVsNested.kt +++ b/compiler/fir/resolve/testData/resolve/typeParameterVsNested.kt @@ -14,4 +14,6 @@ abstract class My { abstract val z: test.My.T class Some : T() -} \ No newline at end of file +} + +abstract class Your : T \ No newline at end of file diff --git a/compiler/fir/resolve/testData/resolve/typeParameterVsNested.txt b/compiler/fir/resolve/testData/resolve/typeParameterVsNested.txt index c81fe8397a3..fba40dcf1d3 100644 --- a/compiler/fir/resolve/testData/resolve/typeParameterVsNested.txt +++ b/compiler/fir/resolve/testData/resolve/typeParameterVsNested.txt @@ -24,7 +24,7 @@ FILE: typeParameterVsNested.kt public abstract val z: R|test/My.T| public get(): R|test/My.T| - public final class Some : R|test/My.T| { + public final class Some : R|class error: Type parameter cannot be a super-type: T| { public constructor(): R|test/My.Some| { super() } @@ -32,3 +32,9 @@ FILE: typeParameterVsNested.kt } } + public abstract class Your : R|class error: Type parameter cannot be a super-type: T| { + public constructor(): R|test/Your| { + super() + } + + }