[FE 1.0/FIR] Fix message of SEALED_SUPERTYPE_IN_LOCAL_CLASS diagnostic
^KT-46285 Fixed
This commit is contained in:
committed by
teamcityserver
parent
94664694df
commit
06a26a5a74
+6
@@ -26271,6 +26271,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
||||
runTest("compiler/testData/diagnostics/tests/sealed/RedundantAbstract.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("sealedInheritorErrorMessage.kt")
|
||||
public void testSealedInheritorErrorMessage() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/sealed/sealedInheritorErrorMessage.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("TreeWhen.kt")
|
||||
public void testTreeWhen() throws Exception {
|
||||
|
||||
+6
@@ -26271,6 +26271,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
|
||||
runTest("compiler/testData/diagnostics/tests/sealed/RedundantAbstract.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("sealedInheritorErrorMessage.kt")
|
||||
public void testSealedInheritorErrorMessage() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/sealed/sealedInheritorErrorMessage.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("TreeWhen.kt")
|
||||
public void testTreeWhen() throws Exception {
|
||||
|
||||
+5
-1
@@ -10,6 +10,7 @@ import com.intellij.psi.impl.source.tree.LeafPsiElement
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.diagnostics.WhenMissingCase
|
||||
@@ -170,7 +171,10 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
val SUPERTYPE_APPEARS_TWICE by error<KtTypeReference>()
|
||||
val CLASS_IN_SUPERTYPE_FOR_ENUM by error<KtTypeReference>()
|
||||
val SEALED_SUPERTYPE by error<KtTypeReference>()
|
||||
val SEALED_SUPERTYPE_IN_LOCAL_CLASS by error<KtTypeReference>()
|
||||
val SEALED_SUPERTYPE_IN_LOCAL_CLASS by error<KtTypeReference> {
|
||||
parameter<String>("declarationType")
|
||||
parameter<ClassKind>("sealedClassKind")
|
||||
}
|
||||
val SEALED_INHERITOR_IN_DIFFERENT_PACKAGE by error<KtTypeReference>()
|
||||
val SEALED_INHERITOR_IN_DIFFERENT_MODULE by error<KtTypeReference>()
|
||||
val CLASS_INHERITS_JAVA_SEALED_CLASS by error<KtTypeReference>()
|
||||
|
||||
+2
-1
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.config.LanguageFeature.RestrictRetentionForExpressio
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.RestrictionOfValReassignmentViaBackingField
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.diagnostics.WhenMissingCase
|
||||
@@ -174,7 +175,7 @@ object FirErrors {
|
||||
val SUPERTYPE_APPEARS_TWICE by error0<KtTypeReference>()
|
||||
val CLASS_IN_SUPERTYPE_FOR_ENUM by error0<KtTypeReference>()
|
||||
val SEALED_SUPERTYPE by error0<KtTypeReference>()
|
||||
val SEALED_SUPERTYPE_IN_LOCAL_CLASS by error0<KtTypeReference>()
|
||||
val SEALED_SUPERTYPE_IN_LOCAL_CLASS by error2<KtTypeReference, String, ClassKind>()
|
||||
val SEALED_INHERITOR_IN_DIFFERENT_PACKAGE by error0<KtTypeReference>()
|
||||
val SEALED_INHERITOR_IN_DIFFERENT_MODULE by error0<KtTypeReference>()
|
||||
val CLASS_INHERITS_JAVA_SEALED_CLASS by error0<KtTypeReference>()
|
||||
|
||||
+11
-3
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.classId
|
||||
@@ -65,10 +66,17 @@ object FirSealedSupertypeChecker : FirClassChecker() {
|
||||
continue
|
||||
}
|
||||
|
||||
val classSymbol = context.session.symbolProvider.getClassLikeSymbolByClassId(classId) as? FirRegularClassSymbol ?: continue
|
||||
val superClassSymbol = context.session.symbolProvider.getClassLikeSymbolByClassId(classId) as? FirRegularClassSymbol ?: continue
|
||||
|
||||
if (classSymbol.modality == Modality.SEALED) {
|
||||
reporter.reportOn(it.source, FirErrors.SEALED_SUPERTYPE_IN_LOCAL_CLASS, context)
|
||||
if (superClassSymbol.modality == Modality.SEALED) {
|
||||
val declarationType = if (declaration is FirAnonymousObject) "Anonymous object" else "Local class"
|
||||
reporter.reportOn(
|
||||
it.source,
|
||||
FirErrors.SEALED_SUPERTYPE_IN_LOCAL_CLASS,
|
||||
declarationType,
|
||||
superClassSymbol.classKind,
|
||||
context
|
||||
)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.diagnostics
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.CLASS_KIND
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.RENDER_POSITION_VARIANCE
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.STRING
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.commaSeparated
|
||||
@@ -614,7 +615,7 @@ class FirDefaultErrorMessages {
|
||||
map.put(SUPERTYPE_APPEARS_TWICE, "A supertype appears twice")
|
||||
map.put(CLASS_IN_SUPERTYPE_FOR_ENUM, "Enum class cannot inherit from classes")
|
||||
map.put(SEALED_SUPERTYPE, "This type is sealed, so it can be inherited by only its own nested classes or objects")
|
||||
map.put(SEALED_SUPERTYPE_IN_LOCAL_CLASS, "Local class cannot extend a sealed class")
|
||||
map.put(SEALED_SUPERTYPE_IN_LOCAL_CLASS, "{0} cannot extend a sealed {1}", STRING, CLASS_KIND)
|
||||
map.put(SEALED_INHERITOR_IN_DIFFERENT_PACKAGE, "A class can only inherit from a sealed class or interface declared in the same package")
|
||||
map.put(SEALED_INHERITOR_IN_DIFFERENT_MODULE, "Inheritance of sealed classes or interfaces from different module is prohibited")
|
||||
map.put(CLASS_INHERITS_JAVA_SEALED_CLASS, "Inheritance of Java sealed classes is prohibited")
|
||||
|
||||
Reference in New Issue
Block a user