[JS IR] Control an inheritance of non-external entity from external
Add a special annotation @JsExternalInheritorsOnly for marking external interfaces and classes. The marked interface or class can’t be a parent for non external interfaces, classes or objects. ^KT-57423 Fixed
This commit is contained in:
committed by
Space Team
parent
6e7b078873
commit
4813b659ab
+8
@@ -5021,6 +5021,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirJsErrors.JS_EXTERNAL_INHERITORS_ONLY) { firDiagnostic ->
|
||||
JsExternalInheritorsOnlyImpl(
|
||||
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.a),
|
||||
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.b),
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirJsErrors.NESTED_JS_EXPORT) { firDiagnostic ->
|
||||
NestedJsExportImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
|
||||
+6
@@ -3493,6 +3493,12 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = ExternalInterfaceAsClassLiteral::class
|
||||
}
|
||||
|
||||
abstract class JsExternalInheritorsOnly : KtFirDiagnostic<KtDeclaration>() {
|
||||
override val diagnosticClass get() = JsExternalInheritorsOnly::class
|
||||
abstract val parent: KtClassLikeSymbol
|
||||
abstract val kid: KtClassLikeSymbol
|
||||
}
|
||||
|
||||
abstract class NestedJsExport : KtFirDiagnostic<KtElement>() {
|
||||
override val diagnosticClass get() = NestedJsExport::class
|
||||
}
|
||||
|
||||
+7
@@ -4226,6 +4226,13 @@ internal class ExternalInterfaceAsClassLiteralImpl(
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.ExternalInterfaceAsClassLiteral(), KtAbstractFirDiagnostic<KtElement>
|
||||
|
||||
internal class JsExternalInheritorsOnlyImpl(
|
||||
override val parent: KtClassLikeSymbol,
|
||||
override val kid: KtClassLikeSymbol,
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.JsExternalInheritorsOnly(), KtAbstractFirDiagnostic<KtDeclaration>
|
||||
|
||||
internal class NestedJsExportImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
|
||||
Reference in New Issue
Block a user