diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt index fbc6785007e..4ac0b8150f2 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt @@ -84,6 +84,7 @@ private fun ConeDiagnostic.toFirDiagnostic( is ConeTypeParameterInQualifiedAccess -> null // reported in various checkers instead is ConeNotAnnotationContainer -> null is ConeImportFromSingleton -> FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON.createOn(source, this.name) + is ConeUnsupportedDynamicType -> FirErrors.UNSUPPORTED.createOn(source, this.reason) else -> throw IllegalArgumentException("Unsupported diagnostic type: ${this.javaClass}") } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/diagnostics/FirDiagnostics.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/diagnostics/FirDiagnostics.kt index 7f7a9d79abe..2542b84593c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/diagnostics/FirDiagnostics.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/diagnostics/FirDiagnostics.kt @@ -133,6 +133,10 @@ class ConeImportFromSingleton(val name: Name) : ConeDiagnostic() { override val reason: String get() = "Import from singleton $name is not allowed" } +class ConeUnsupportedDynamicType() : ConeDiagnostic() { + override val reason: String get() = "Dynamic types are not supported in this context" +} + private fun describeSymbol(symbol: AbstractFirBasedSymbol<*>): String { return when (symbol) { is FirClassLikeSymbol<*> -> symbol.classId.asString() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt index 7d14190ab29..83dfdad47bf 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt @@ -8,13 +8,11 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.ThreadSafeMutableState -import org.jetbrains.kotlin.fir.diagnostics.ConeIntermediateDiagnostic -import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeUnexpectedTypeArgumentsError -import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedQualifierError +import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnsupportedDynamicType import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeWrongNumberOfTypeArgumentsError import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor @@ -186,7 +184,7 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver() { resolveUserType(typeRef, symbol, substitutor, areBareTypesAllowed) } is FirFunctionTypeRef -> createFunctionalType(typeRef) - is FirDynamicTypeRef -> ConeKotlinErrorType(ConeIntermediateDiagnostic("Not supported: ${typeRef::class.simpleName}")) + is FirDynamicTypeRef -> ConeKotlinErrorType(ConeUnsupportedDynamicType()) else -> error(typeRef.render()) } } diff --git a/compiler/testData/diagnostics/tests/dynamicTypes/delegationBy.fir.kt b/compiler/testData/diagnostics/tests/dynamicTypes/delegationBy.fir.kt deleted file mode 100644 index b21ee696104..00000000000 --- a/compiler/testData/diagnostics/tests/dynamicTypes/delegationBy.fir.kt +++ /dev/null @@ -1,5 +0,0 @@ -interface Tr { - fun foo() -} - -class C(d: dynamic) : Tr by d \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/dynamicTypes/delegationBy.kt b/compiler/testData/diagnostics/tests/dynamicTypes/delegationBy.kt index 020a46b8a29..896cfa0768e 100644 --- a/compiler/testData/diagnostics/tests/dynamicTypes/delegationBy.kt +++ b/compiler/testData/diagnostics/tests/dynamicTypes/delegationBy.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Tr { fun foo() } diff --git a/compiler/testData/diagnostics/tests/dynamicTypes/unsupported.fir.kt b/compiler/testData/diagnostics/tests/dynamicTypes/unsupported.fir.kt deleted file mode 100644 index f80596ec429..00000000000 --- a/compiler/testData/diagnostics/tests/dynamicTypes/unsupported.fir.kt +++ /dev/null @@ -1,7 +0,0 @@ -val foo: dynamic = 1 - -fun foo() { - class C { - val foo: dynamic = 1 - } -} diff --git a/compiler/testData/diagnostics/tests/dynamicTypes/unsupported.kt b/compiler/testData/diagnostics/tests/dynamicTypes/unsupported.kt index fa395b3a7c6..15087323c86 100644 --- a/compiler/testData/diagnostics/tests/dynamicTypes/unsupported.kt +++ b/compiler/testData/diagnostics/tests/dynamicTypes/unsupported.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL val foo: dynamic = 1 fun foo() { diff --git a/compiler/testData/diagnostics/tests/dynamicTypes/withInvisibleSynthesized.fir.kt b/compiler/testData/diagnostics/tests/dynamicTypes/withInvisibleSynthesized.fir.kt index 79618716a6d..082ceb5519f 100644 --- a/compiler/testData/diagnostics/tests/dynamicTypes/withInvisibleSynthesized.fir.kt +++ b/compiler/testData/diagnostics/tests/dynamicTypes/withInvisibleSynthesized.fir.kt @@ -20,7 +20,7 @@ public class J { import p.* class K: J.C() { - fun dynamic.test() { + fun dynamic.test() { sam(null) sam( name = null,