Skip to content

Commit 560822c

Browse files
lunakolySpace Team
authored andcommitted
[FIR] Warn about inline enum entries
^KT-42096 Fixed ^KTLC-361
1 parent 5e90dfa commit 560822c

File tree

5 files changed

+45
-5
lines changed

5 files changed

+45
-5
lines changed

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol
3434
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
3535
import org.jetbrains.kotlin.lexer.KtTokens
3636
import org.jetbrains.kotlin.lexer.KtTokens.DATA_KEYWORD
37+
import org.jetbrains.kotlin.lexer.KtTokens.INLINE_KEYWORD
3738
import org.jetbrains.kotlin.resolve.*
3839

3940
object FirModifierChecker : FirBasicDeclarationChecker(MppCheckerKind.Common) {
@@ -115,12 +116,18 @@ object FirModifierChecker : FirBasicDeclarationChecker(MppCheckerKind.Common) {
115116
}
116117
val set = map[modifierToken] ?: emptySet()
117118
val checkResult = if (factory == FirErrors.WRONG_MODIFIER_TARGET) {
118-
actualTargets.none { it in set } ||
119-
(modifierToken == DATA_KEYWORD
120-
&& actualTargets.contains(KotlinTarget.STANDALONE_OBJECT)
121-
&& !LanguageFeature.DataObjects.isEnabled())
119+
actualTargets.none { it in set }
120+
|| (modifierToken == DATA_KEYWORD
121+
&& actualTargets.contains(KotlinTarget.STANDALONE_OBJECT)
122+
&& !LanguageFeature.DataObjects.isEnabled())
123+
|| (modifierToken == INLINE_KEYWORD
124+
&& actualTargets.contains(KotlinTarget.ENUM_ENTRY)
125+
&& LanguageFeature.ForbidInlineEnumEntries.isEnabled())
122126
} else {
123127
actualTargets.any { it in set }
128+
|| (modifierToken == INLINE_KEYWORD
129+
&& actualTargets.contains(KotlinTarget.ENUM_ENTRY)
130+
&& !LanguageFeature.ForbidInlineEnumEntries.isEnabled())
124131
}
125132
if (checkResult) {
126133
reporter.reportOn(
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// LATEST_LV_DIFFERENCE
2+
// RUN_PIPELINE_TILL: BACKEND
3+
// ISSUE: KT-42096
4+
5+
enum class E {
6+
<!DEPRECATED_MODIFIER_FOR_TARGET!>inline<!> E1 {
7+
override fun invoke() = 123
8+
};
9+
abstract fun invoke(): Int
10+
}
11+
12+
fun main() {
13+
E.E1.invoke()
14+
}
15+
16+
/* GENERATED_FIR_TAGS: enumDeclaration, enumEntry, functionDeclaration */

compiler/testData/diagnostics/tests/inlineEnumEntries.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// FIR_IDENTICAL
1+
// LATEST_LV_DIFFERENCE
22
// RUN_PIPELINE_TILL: BACKEND
33
// ISSUE: KT-42096
44

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// LATEST_LV_DIFFERENCE
2+
// RUN_PIPELINE_TILL: BACKEND
3+
// ISSUE: KT-42096
4+
5+
enum class E {
6+
<!WRONG_MODIFIER_TARGET!>inline<!> E1 {
7+
override fun invoke() = 123
8+
};
9+
abstract fun invoke(): Int
10+
}
11+
12+
fun main() {
13+
E.E1.invoke()
14+
}
15+
16+
/* GENERATED_FIR_TAGS: enumDeclaration, enumEntry, functionDeclaration */

compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,7 @@ enum class LanguageFeature(
450450
AllowReifiedTypeInCatchClause(KOTLIN_2_4, issue = "KT-54363"),
451451
ForbidGetSetValueWithTooManyParameters(KOTLIN_2_4, issue = "KT-77131"),
452452
ForbidReturnInExpressionBodyWithoutExplicitTypeEdgeCases(KOTLIN_2_4, enabledInProgressiveMode = true, "KTLC-288"),
453+
ForbidInlineEnumEntries(KOTLIN_2_4, enabledInProgressiveMode = true, "KTLC-361"),
453454
CheckOptInOnPureEnumEntries(KOTLIN_2_4, enabledInProgressiveMode = true, "KTLC-359"),
454455
ForbidExposingPackagePrivateInInternal(KOTLIN_2_4, enabledInProgressiveMode = true, "KTLC-271"),
455456

0 commit comments

Comments
 (0)