Skip to content

Commit 1391397

Browse files
committed
Self types: Add enum class checker.
1 parent 210d584 commit 1391397

File tree

13 files changed

+90
-8
lines changed

13 files changed

+90
-8
lines changed

analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,13 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
975975
token,
976976
)
977977
}
978+
add(FirErrors.SELF_TYPE_INAPPLICABLE_TARGET) { firDiagnostic ->
979+
SelfTypeInapplicableTargetImpl(
980+
firDiagnostic.a,
981+
firDiagnostic as KtPsiDiagnostic,
982+
token,
983+
)
984+
}
978985
add(FirErrors.OPT_IN_USAGE) { firDiagnostic ->
979986
OptInUsageImpl(
980987
firDiagnostic.a,

analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,11 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
703703
abstract val typeFromTypesPhase: KtType
704704
}
705705

706+
abstract class SelfTypeInapplicableTarget : KtFirDiagnostic<KtAnnotationEntry>() {
707+
override val diagnosticClass get() = SelfTypeInapplicableTarget::class
708+
abstract val actualTarget: String
709+
}
710+
706711
abstract class OptInUsage : KtFirDiagnostic<PsiElement>() {
707712
override val diagnosticClass get() = OptInUsage::class
708713
abstract val optInMarkerFqName: FqName

analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -844,6 +844,12 @@ internal class PluginAnnotationAmbiguityImpl(
844844
override val token: KtLifetimeToken,
845845
) : KtFirDiagnostic.PluginAnnotationAmbiguity(), KtAbstractFirDiagnostic<PsiElement>
846846

847+
internal class SelfTypeInapplicableTargetImpl(
848+
override val actualTarget: String,
849+
override val firDiagnostic: KtPsiDiagnostic,
850+
override val token: KtLifetimeToken,
851+
) : KtFirDiagnostic.SelfTypeInapplicableTarget(), KtAbstractFirDiagnostic<KtAnnotationEntry>
852+
847853
internal class OptInUsageImpl(
848854
override val optInMarkerFqName: FqName,
849855
override val message: String,

analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
FILE: selfTypeForEnumClass.kt
2+
@R|kotlin/Self|() public final enum class EnumClass<out <Self> : R|EnumClass<<Self>>|> : R|kotlin/Enum<EnumClass>| {
3+
private constructor<out <Self> : R|EnumClass<<Self>>|>(): R|EnumClass<<Self>>| {
4+
super<R|kotlin/Enum<EnumClass>|>()
5+
}
6+
7+
public final static fun values(): R|kotlin/Array<EnumClass>| {
8+
}
9+
10+
public final static fun valueOf(value: R|kotlin/String|): R|EnumClass| {
11+
}
12+
13+
public final static val entries: R|kotlin/enums/EnumEntries<EnumClass>|
14+
public get(): R|kotlin/enums/EnumEntries<EnumClass>|
15+
16+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// FIR_DISABLE_LAZY_RESOLVE_CHECKS
2+
import kotlin.Self
3+
<!TYPE_PARAMETERS_IN_ENUM!><!SELF_TYPE_INAPPLICABLE_TARGET!>@Self<!>
4+
enum class EnumClass {
5+
6+
}<!>

compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,10 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
298298
parameter<ConeKotlinType>("typeFromCompilerPhase")
299299
parameter<ConeKotlinType>("typeFromTypesPhase")
300300
}
301+
302+
val SELF_TYPE_INAPPLICABLE_TARGET by error<KtAnnotationEntry>() {
303+
parameter<String>("actualTarget")
304+
}
301305
}
302306

303307
val OPT_IN by object : DiagnosticGroup("OptIn") {

0 commit comments

Comments
 (0)