Skip to content

Commit 4e2e097

Browse files
KvanTTTliamoberg
authored andcommitted
[JS] Add superType parameter to EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE
To unify the error with similar Wasm error Report it on each non-external super type
1 parent 9dcef92 commit 4e2e097

File tree

8 files changed

+20
-9
lines changed

8 files changed

+20
-9
lines changed

analysis/analysis-api-fir/gen/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDataClassConverters.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7280,6 +7280,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KaDiagnosticConverterBuilder.buildConvert
72807280
}
72817281
add(FirJsErrors.EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE) { firDiagnostic ->
72827282
ExternalTypeExtendsNonExternalTypeImpl(
7283+
firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a),
72837284
firDiagnostic as KtPsiDiagnostic,
72847285
token,
72857286
)

analysis/analysis-api-fir/gen/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnostics.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5093,6 +5093,7 @@ sealed interface KaFirDiagnostic<PSI : PsiElement> : KaDiagnosticWithPsi<PSI> {
50935093

50945094
interface ExternalTypeExtendsNonExternalType : KaFirDiagnostic<KtElement> {
50955095
override val diagnosticClass get() = ExternalTypeExtendsNonExternalType::class
5096+
val superType: KaType
50965097
}
50975098

50985099
interface EnumClassInExternalDeclarationWarning : KaFirDiagnostic<KtDeclaration> {

analysis/analysis-api-fir/gen/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnosticsImpl.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6125,6 +6125,7 @@ internal class ExternalEnumEntryWithBodyImpl(
61256125
) : KaAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KaFirDiagnostic.ExternalEnumEntryWithBody
61266126

61276127
internal class ExternalTypeExtendsNonExternalTypeImpl(
6128+
override val superType: KaType,
61286129
firDiagnostic: KtPsiDiagnostic,
61296130
token: KaLifetimeToken,
61306131
) : KaAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KaFirDiagnostic.ExternalTypeExtendsNonExternalType

compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirJsDiagnosticsList.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ object JS_DIAGNOSTICS_LIST : DiagnosticList("FirJsErrors") {
8989
}
9090
val CALL_TO_DEFINED_EXTERNALLY_FROM_NON_EXTERNAL_DECLARATION by error<PsiElement>()
9191
val EXTERNAL_ENUM_ENTRY_WITH_BODY by error<KtElement>()
92-
val EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE by error<KtElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT)
92+
val EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE by error<KtElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) {
93+
parameter<ConeKotlinType>("superType")
94+
}
9395
val ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING by warning<KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT)
9496
val INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING by warning<KtElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT)
9597
val INLINE_CLASS_IN_EXTERNAL_DECLARATION by error<KtElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT)

compiler/fir/checkers/checkers.js/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrors.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ object FirJsErrors : KtDiagnosticsContainer() {
7171
val OVERRIDING_EXTERNAL_FUN_WITH_OPTIONAL_PARAMS_WITH_FAKE: KtDiagnosticFactory1<FirNamedFunctionSymbol> = KtDiagnosticFactory1("OVERRIDING_EXTERNAL_FUN_WITH_OPTIONAL_PARAMS_WITH_FAKE", ERROR, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT, KtElement::class, getRendererFactory())
7272
val CALL_TO_DEFINED_EXTERNALLY_FROM_NON_EXTERNAL_DECLARATION: KtDiagnosticFactory0 = KtDiagnosticFactory0("CALL_TO_DEFINED_EXTERNALLY_FROM_NON_EXTERNAL_DECLARATION", ERROR, SourceElementPositioningStrategies.DEFAULT, PsiElement::class, getRendererFactory())
7373
val EXTERNAL_ENUM_ENTRY_WITH_BODY: KtDiagnosticFactory0 = KtDiagnosticFactory0("EXTERNAL_ENUM_ENTRY_WITH_BODY", ERROR, SourceElementPositioningStrategies.DEFAULT, KtElement::class, getRendererFactory())
74-
val EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE: KtDiagnosticFactory0 = KtDiagnosticFactory0("EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE", ERROR, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT, KtElement::class, getRendererFactory())
74+
val EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE: KtDiagnosticFactory1<ConeKotlinType> = KtDiagnosticFactory1("EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE", ERROR, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT, KtElement::class, getRendererFactory())
7575
val ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING: KtDiagnosticFactory0 = KtDiagnosticFactory0("ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING", WARNING, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT, KtDeclaration::class, getRendererFactory())
7676
val INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING: KtDiagnosticFactory0 = KtDiagnosticFactory0("INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING", WARNING, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT, KtElement::class, getRendererFactory())
7777
val INLINE_CLASS_IN_EXTERNAL_DECLARATION: KtDiagnosticFactory0 = KtDiagnosticFactory0("INLINE_CLASS_IN_EXTERNAL_DECLARATION", ERROR, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT, KtElement::class, getRendererFactory())

compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/diagnostics/js/FirJsErrorsDefaultMessages.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,11 @@ object FirJsErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
113113
"Reflection is not supported in JavaScript target; therefore, annotations cannot be read at runtime."
114114
)
115115
map.put(EXTERNAL_ENUM_ENTRY_WITH_BODY, "Entry of external enum class cannot have a body.")
116-
map.put(EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE, "External type extends non-external type.")
116+
map.put(
117+
EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE,
118+
"External type extends non-external type ''{0}''.",
119+
FirDiagnosticRenderers.RENDER_TYPE
120+
)
117121
map.put(
118122
INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING,
119123
"Using value classes as parameter type or return type of external declarations is experimental."

compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsInheritanceClassChecker.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,12 @@ sealed class FirJsInheritanceClassChecker(mppKind: MppCheckerKind) : FirClassChe
5252
val isEffectivelyExternal = declaration.symbol.isEffectivelyExternal(session)
5353

5454
if (isEffectivelyExternal && declaration.classKind != ClassKind.ANNOTATION_CLASS) {
55-
val superTypes = declaration.superConeTypes
56-
.filterNot { it.isAnyOrNullableAny || it.isThrowableOrNullableThrowable || it.isEnum }
57-
.mapNotNull { it.toSymbol()?.fullyExpandedClass() }
55+
for (superType in declaration.superConeTypes) {
56+
if (superType.isAnyOrNullableAny || superType.isThrowableOrNullableThrowable || superType.isEnum) continue
57+
val fullyExpandedClass = superType.toSymbol()?.fullyExpandedClass() ?: continue
58+
if (fullyExpandedClass.isEffectivelyExternal(session) || fullyExpandedClass.isExpect) continue
5859

59-
if (superTypes.any { !it.isEffectivelyExternal(session) && !it.isExpect }) {
60-
reporter.reportOn(declaration.source, FirJsErrors.EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE)
60+
reporter.reportOn(declaration.source, FirJsErrors.EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE, superType)
6161
}
6262
}
6363

compiler/testData/diagnostics/testsWithJsStdLib/native/inheritance.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ external enum class <!ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING!>E<!> {
1717

1818
external enum class <!ENUM_CLASS_IN_EXTERNAL_DECLARATION_WARNING, EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE!>F<!> : I {
1919
X
20-
}
20+
}
21+
22+
external class <!EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE("A"), EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE("I")!>G<!> : A, I

0 commit comments

Comments
 (0)