[FIR] Report the use of inline on primary constructor parameters

^KT-59664 Fixed
This commit is contained in:
Nikolay Lunyak
2023-08-22 15:09:29 +03:00
committed by Space Team
parent 6c4f6907ea
commit 77feb86a85
21 changed files with 262 additions and 9 deletions
@@ -4544,6 +4544,18 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.DECLARATION_CANT_BE_INLINED_DEPRECATION.errorFactory) { firDiagnostic ->
DeclarationCantBeInlinedDeprecationErrorImpl(
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.DECLARATION_CANT_BE_INLINED_DEPRECATION.warningFactory) { firDiagnostic ->
DeclarationCantBeInlinedDeprecationWarningImpl(
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.OVERRIDE_BY_INLINE) { firDiagnostic ->
OverrideByInlineImpl(
firDiagnostic as KtPsiDiagnostic,
@@ -4582,6 +4594,18 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.INLINE_PROPERTY_WITH_BACKING_FIELD_DEPRECATION.errorFactory) { firDiagnostic ->
InlinePropertyWithBackingFieldDeprecationErrorImpl(
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.INLINE_PROPERTY_WITH_BACKING_FIELD_DEPRECATION.warningFactory) { firDiagnostic ->
InlinePropertyWithBackingFieldDeprecationWarningImpl(
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.ILLEGAL_INLINE_PARAMETER_MODIFIER) { firDiagnostic ->
IllegalInlineParameterModifierImpl(
firDiagnostic as KtPsiDiagnostic,
@@ -3173,6 +3173,14 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = DeclarationCantBeInlined::class
}
interface DeclarationCantBeInlinedDeprecationError : KtFirDiagnostic<KtDeclaration> {
override val diagnosticClass get() = DeclarationCantBeInlinedDeprecationError::class
}
interface DeclarationCantBeInlinedDeprecationWarning : KtFirDiagnostic<KtDeclaration> {
override val diagnosticClass get() = DeclarationCantBeInlinedDeprecationWarning::class
}
interface OverrideByInline : KtFirDiagnostic<KtDeclaration> {
override val diagnosticClass get() = OverrideByInline::class
}
@@ -3199,6 +3207,14 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = InlinePropertyWithBackingField::class
}
interface InlinePropertyWithBackingFieldDeprecationError : KtFirDiagnostic<KtDeclaration> {
override val diagnosticClass get() = InlinePropertyWithBackingFieldDeprecationError::class
}
interface InlinePropertyWithBackingFieldDeprecationWarning : KtFirDiagnostic<KtDeclaration> {
override val diagnosticClass get() = InlinePropertyWithBackingFieldDeprecationWarning::class
}
interface IllegalInlineParameterModifier : KtFirDiagnostic<KtElement> {
override val diagnosticClass get() = IllegalInlineParameterModifier::class
}
@@ -3826,6 +3826,16 @@ internal class DeclarationCantBeInlinedImpl(
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtDeclaration>(firDiagnostic, token), KtFirDiagnostic.DeclarationCantBeInlined
internal class DeclarationCantBeInlinedDeprecationErrorImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtDeclaration>(firDiagnostic, token), KtFirDiagnostic.DeclarationCantBeInlinedDeprecationError
internal class DeclarationCantBeInlinedDeprecationWarningImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtDeclaration>(firDiagnostic, token), KtFirDiagnostic.DeclarationCantBeInlinedDeprecationWarning
internal class OverrideByInlineImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
@@ -3858,6 +3868,16 @@ internal class InlinePropertyWithBackingFieldImpl(
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtDeclaration>(firDiagnostic, token), KtFirDiagnostic.InlinePropertyWithBackingField
internal class InlinePropertyWithBackingFieldDeprecationErrorImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtDeclaration>(firDiagnostic, token), KtFirDiagnostic.InlinePropertyWithBackingFieldDeprecationError
internal class InlinePropertyWithBackingFieldDeprecationWarningImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtDeclaration>(firDiagnostic, token), KtFirDiagnostic.InlinePropertyWithBackingFieldDeprecationWarning
internal class IllegalInlineParameterModifierImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
@@ -507,6 +507,18 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/initializedAfterRethrow.kt");
}
@Test
@TestMetadata("inlineConstructorParameter.kt")
public void testInlineConstructorParameter() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineConstructorParameter.kt");
}
@Test
@TestMetadata("inlineConstructorParameter_on.kt")
public void testInlineConstructorParameter_on() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineConstructorParameter_on.kt");
}
@Test
@TestMetadata("inlineDeprecationsOnImplicitCalls.kt")
public void testInlineDeprecationsOnImplicitCalls() throws Exception {
@@ -507,6 +507,18 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/initializedAfterRethrow.kt");
}
@Test
@TestMetadata("inlineConstructorParameter.kt")
public void testInlineConstructorParameter() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineConstructorParameter.kt");
}
@Test
@TestMetadata("inlineConstructorParameter_on.kt")
public void testInlineConstructorParameter_on() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineConstructorParameter_on.kt");
}
@Test
@TestMetadata("inlineDeprecationsOnImplicitCalls.kt")
public void testInlineDeprecationsOnImplicitCalls() throws Exception {
@@ -507,6 +507,18 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/initializedAfterRethrow.kt");
}
@Test
@TestMetadata("inlineConstructorParameter.kt")
public void testInlineConstructorParameter() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineConstructorParameter.kt");
}
@Test
@TestMetadata("inlineConstructorParameter_on.kt")
public void testInlineConstructorParameter_on() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineConstructorParameter_on.kt");
}
@Test
@TestMetadata("inlineDeprecationsOnImplicitCalls.kt")
public void testInlineDeprecationsOnImplicitCalls() throws Exception {
@@ -507,6 +507,18 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/initializedAfterRethrow.kt");
}
@Test
@TestMetadata("inlineConstructorParameter.kt")
public void testInlineConstructorParameter() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineConstructorParameter.kt");
}
@Test
@TestMetadata("inlineConstructorParameter_on.kt")
public void testInlineConstructorParameter_on() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineConstructorParameter_on.kt");
}
@Test
@TestMetadata("inlineDeprecationsOnImplicitCalls.kt")
public void testInlineDeprecationsOnImplicitCalls() throws Exception {
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.diagnostics.WhenMissingCase
import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.checkers.generator.diagnostics.model.*
import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
@@ -1600,6 +1599,10 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
}
val DECLARATION_CANT_BE_INLINED by error<KtDeclaration>(PositioningStrategy.INLINE_FUN_MODIFIER)
val DECLARATION_CANT_BE_INLINED_DEPRECATION by deprecationError<KtDeclaration>(
LanguageFeature.ProhibitInlineModifierOnPrimaryConstructorParameters,
PositioningStrategy.INLINE_FUN_MODIFIER,
)
val OVERRIDE_BY_INLINE by warning<KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE)
@@ -1616,6 +1619,10 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
val REIFIED_TYPE_PARAMETER_IN_OVERRIDE by error<KtElement>(PositioningStrategy.REIFIED_MODIFIER)
val INLINE_PROPERTY_WITH_BACKING_FIELD by error<KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE)
val INLINE_PROPERTY_WITH_BACKING_FIELD_DEPRECATION by deprecationError<KtDeclaration>(
LanguageFeature.ProhibitInlineModifierOnPrimaryConstructorParameters,
PositioningStrategy.DECLARATION_SIGNATURE,
)
val ILLEGAL_INLINE_PARAMETER_MODIFIER by error<KtElement>(PositioningStrategy.INLINE_PARAMETER_MODIFIER)
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.config.LanguageFeature.ProhibitAssigningSingleElemen
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitConfusingSyntaxInWhenBranches
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitCyclesInAnnotations
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitImplementingVarByInheritedVal
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitInlineModifierOnPrimaryConstructorParameters
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitInvisibleAbstractMethodsInSuperclasses
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitNonReifiedArraysAsReifiedTypeArguments
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitScriptTopLevelInnerClasses
@@ -804,12 +805,14 @@ object FirErrors {
val PRIVATE_CLASS_MEMBER_FROM_INLINE by error2<KtElement, FirBasedSymbol<*>, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val SUPER_CALL_FROM_PUBLIC_INLINE by error1<KtElement, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val DECLARATION_CANT_BE_INLINED by error0<KtDeclaration>(SourceElementPositioningStrategies.INLINE_FUN_MODIFIER)
val DECLARATION_CANT_BE_INLINED_DEPRECATION by deprecationError0<KtDeclaration>(ProhibitInlineModifierOnPrimaryConstructorParameters, SourceElementPositioningStrategies.INLINE_FUN_MODIFIER)
val OVERRIDE_BY_INLINE by warning0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
val NON_INTERNAL_PUBLISHED_API by error0<KtElement>()
val INVALID_DEFAULT_FUNCTIONAL_PARAMETER_FOR_INLINE by error1<KtElement, FirValueParameterSymbol>()
val NOT_SUPPORTED_INLINE_PARAMETER_IN_INLINE_PARAMETER_DEFAULT_VALUE by error1<KtElement, FirValueParameterSymbol>()
val REIFIED_TYPE_PARAMETER_IN_OVERRIDE by error0<KtElement>(SourceElementPositioningStrategies.REIFIED_MODIFIER)
val INLINE_PROPERTY_WITH_BACKING_FIELD by error0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
val INLINE_PROPERTY_WITH_BACKING_FIELD_DEPRECATION by deprecationError0<KtDeclaration>(ProhibitInlineModifierOnPrimaryConstructorParameters, SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
val ILLEGAL_INLINE_PARAMETER_MODIFIER by error0<KtElement>(SourceElementPositioningStrategies.INLINE_PARAMETER_MODIFIER)
val INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED by error0<KtParameter>()
val INEFFICIENT_EQUALS_OVERRIDING_IN_VALUE_CLASS by warning1<KtNamedFunction, ConeKotlinType>(SourceElementPositioningStrategies.DECLARATION_NAME)
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.builtins.StandardNames.BACKING_FIELD
import org.jetbrains.kotlin.builtins.functions.isSuspendOrKSuspendFunction
@@ -443,7 +444,10 @@ object FirInlineDeclarationChecker : FirFunctionChecker() {
if (effectiveVisibility == EffectiveVisibility.PrivateInClass) return true
if (!declaration.isEffectivelyFinal(context)) {
reporter.reportOn(declaration.source, FirErrors.DECLARATION_CANT_BE_INLINED, context)
// For primary constructor parameters there's INLINE_PROPERTY_WITH_BACKING_FIELD already
if (declaration.source?.kind != KtFakeSourceElementKind.PropertyFromParameter) {
reporter.reportOn(declaration.source, FirErrors.DECLARATION_CANT_BE_INLINED, context)
}
return false
}
return true
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
@@ -20,7 +21,14 @@ object FirInlinePropertyChecker : FirPropertyChecker() {
FirInlineDeclarationChecker.checkCallableDeclaration(declaration, context, reporter)
if (declaration.hasBackingField || declaration.delegate != null) {
reporter.reportOn(declaration.source, FirErrors.INLINE_PROPERTY_WITH_BACKING_FIELD, context)
when (declaration.source?.kind) {
KtFakeSourceElementKind.PropertyFromParameter -> reporter.reportOn(
declaration.source, FirErrors.INLINE_PROPERTY_WITH_BACKING_FIELD_DEPRECATION, context
)
else -> reporter.reportOn(
declaration.source, FirErrors.INLINE_PROPERTY_WITH_BACKING_FIELD, context
)
}
}
}
}
@@ -158,6 +158,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DATA_CLASS_VARARG
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DATA_CLASS_WITHOUT_PARAMETERS
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DATA_OBJECT_CUSTOM_EQUALS_OR_HASH_CODE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DECLARATION_CANT_BE_INLINED
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DECLARATION_CANT_BE_INLINED_DEPRECATION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEFAULT_ARGUMENTS_IN_EXPECT_WITH_ACTUAL_TYPEALIAS
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEFAULT_VALUE_NOT_ALLOWED_IN_OVERRIDE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEFINITELY_NON_NULLABLE_AS_REIFIED
@@ -314,6 +315,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INITIALIZER_REQUI
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INITIALIZER_TYPE_MISMATCH
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INLINE_PROPERTY_WITH_BACKING_FIELD
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INLINE_PROPERTY_WITH_BACKING_FIELD_DEPRECATION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INNER_CLASS_CONSTRUCTOR_NO_RECEIVER
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INNER_CLASS_INSIDE_VALUE_CLASS
@@ -1470,9 +1472,14 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
DECLARATION_CANT_BE_INLINED,
"'inline' modifier on virtual members is prohibited. Only private or final members can be inlined."
)
map.put(
DECLARATION_CANT_BE_INLINED_DEPRECATION,
"'inline' modifier on virtual members is prohibited. Only private or final members can be inlined."
)
map.put(OVERRIDE_BY_INLINE, "Override by an inline function.")
map.put(REIFIED_TYPE_PARAMETER_IN_OVERRIDE, "Override by a function with reified type parameter.")
map.put(INLINE_PROPERTY_WITH_BACKING_FIELD, "Inline property cannot have a backing field.")
map.put(INLINE_PROPERTY_WITH_BACKING_FIELD_DEPRECATION, "Inline property cannot have a backing field.")
// Overrides
map.put(NOTHING_TO_OVERRIDE, "''{0}'' overrides nothing.", DECLARATION_NAME)
@@ -157,6 +157,7 @@ class ValueParameter(
type.copyWithNewSourceKind(KtFakeSourceElementKind.DefaultAccessor),
modifiers.getVisibility(),
symbol,
isInline = modifiers.hasInline(),
).also {
it.initContainingClassAttr(context)
it.replaceAnnotations(modifiers.annotations.filterUseSiteTarget(PROPERTY_GETTER))
@@ -168,7 +169,8 @@ class ValueParameter(
type.copyWithNewSourceKind(KtFakeSourceElementKind.DefaultAccessor),
modifiers.getVisibility(),
symbol,
parameterAnnotations = modifiers.annotations.filterUseSiteTarget(SETTER_PARAMETER)
parameterAnnotations = modifiers.annotations.filterUseSiteTarget(SETTER_PARAMETER),
isInline = modifiers.hasInline(),
).also {
it.initContainingClassAttr(context)
it.replaceAnnotations(modifiers.annotations.filterUseSiteTarget(PROPERTY_SETTER))
@@ -722,6 +722,7 @@ open class PsiRawFirBuilder(
type.copyWithNewSourceKind(KtFakeSourceElementKind.DefaultAccessor),
visibility,
symbol,
isInline = hasModifier(INLINE_KEYWORD),
).also { getter ->
getter.initContainingClassAttr()
getter.replaceAnnotations(parameterAnnotations.filterUseSiteTarget(PROPERTY_GETTER))
@@ -733,7 +734,8 @@ open class PsiRawFirBuilder(
type.copyWithNewSourceKind(KtFakeSourceElementKind.DefaultAccessor),
visibility,
symbol,
parameterAnnotations = parameterAnnotations.filterUseSiteTarget(SETTER_PARAMETER)
parameterAnnotations = parameterAnnotations.filterUseSiteTarget(SETTER_PARAMETER),
isInline = hasModifier(INLINE_KEYWORD),
).also { setter ->
setter.initContainingClassAttr()
setter.replaceAnnotations(parameterAnnotations.filterUseSiteTarget(PROPERTY_SETTER))
@@ -39,6 +39,7 @@ abstract class FirDefaultPropertyAccessor(
visibility: Visibility,
modality: Modality = Modality.FINAL,
effectiveVisibility: EffectiveVisibility? = null,
isInline: Boolean = false,
symbol: FirPropertyAccessorSymbol,
resolvePhase: FirResolvePhase,
) : FirPropertyAccessorImpl(
@@ -47,10 +48,12 @@ abstract class FirDefaultPropertyAccessor(
moduleData,
origin,
FirDeclarationAttributes(),
status = if (effectiveVisibility == null)
FirDeclarationStatusImpl(visibility, modality)
else
FirResolvedDeclarationStatusImpl(visibility, modality, effectiveVisibility),
status = when (effectiveVisibility) {
null -> FirDeclarationStatusImpl(visibility, modality)
else -> FirResolvedDeclarationStatusImpl(visibility, modality, effectiveVisibility)
}.apply {
this.isInline = isInline
},
propertyTypeRef,
deprecationsProvider = UnresolvedDeprecationProvider,
containerSource = null,
@@ -104,6 +107,7 @@ class FirDefaultPropertyGetter(
propertySymbol: FirPropertySymbol,
modality: Modality = Modality.FINAL,
effectiveVisibility: EffectiveVisibility? = null,
isInline: Boolean = false,
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol(),
resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR,
) : FirDefaultPropertyAccessor(
@@ -117,6 +121,7 @@ class FirDefaultPropertyGetter(
visibility = visibility,
modality = modality,
effectiveVisibility = effectiveVisibility,
isInline = isInline,
symbol = symbol,
resolvePhase = resolvePhase,
)
@@ -130,6 +135,7 @@ class FirDefaultPropertySetter(
propertySymbol: FirPropertySymbol,
modality: Modality = Modality.FINAL,
effectiveVisibility: EffectiveVisibility? = null,
isInline: Boolean = false,
propertyAccessorSymbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol(),
parameterAnnotations: List<FirAnnotation> = emptyList(),
resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR,
@@ -155,6 +161,7 @@ class FirDefaultPropertySetter(
visibility = visibility,
modality = modality,
effectiveVisibility = effectiveVisibility,
isInline = isInline,
symbol = propertyAccessorSymbol,
resolvePhase = resolvePhase,
)
@@ -0,0 +1,23 @@
// ISSUE: KT-59664
// LANGUAGE: -ProhibitInlineModifierOnPrimaryConstructorParameters
// WITH_STDLIB
enum class Foo(<!INLINE_PROPERTY_WITH_BACKING_FIELD_DEPRECATION_WARNING!>open inline /* no effect */ val bar: String<!>) {
A("super") {
override val bar: String
get() = super.bar + " overridden"
};
}
enum class Bar() {
A {
override val bar: String
get() = super.bar + " overridden"
};
open <!DECLARATION_CANT_BE_INLINED!>inline<!> val bar: String get() = "puper"
}
fun main() {
println(Foo.A.bar)
}
@@ -0,0 +1,23 @@
// ISSUE: KT-59664
// LANGUAGE: -ProhibitInlineModifierOnPrimaryConstructorParameters
// WITH_STDLIB
enum class Foo(open inline /* no effect */ val bar: String) {
A("super") {
override val bar: String
get() = super.bar + " overridden"
};
}
enum class Bar() {
A {
override val bar: String
get() = super.bar + " overridden"
};
open <!DECLARATION_CANT_BE_INLINED_WARNING!>inline<!> val bar: String get() = "puper"
}
fun main() {
println(Foo.A.bar)
}
@@ -0,0 +1,23 @@
// ISSUE: KT-59664
// LANGUAGE: +ProhibitInlineModifierOnPrimaryConstructorParameters
// WITH_STDLIB
enum class Foo(<!INLINE_PROPERTY_WITH_BACKING_FIELD_DEPRECATION_ERROR!>open inline /* no effect */ val bar: String<!>) {
A("super") {
override val bar: String
get() = super.bar + " overridden"
};
}
enum class Bar() {
A {
override val bar: String
get() = super.bar + " overridden"
};
open <!DECLARATION_CANT_BE_INLINED!>inline<!> val bar: String get() = "puper"
}
fun main() {
println(Foo.A.bar)
}
@@ -0,0 +1,23 @@
// ISSUE: KT-59664
// LANGUAGE: +ProhibitInlineModifierOnPrimaryConstructorParameters
// WITH_STDLIB
enum class Foo(open inline /* no effect */ val bar: String) {
A("super") {
override val bar: String
get() = super.bar + " overridden"
};
}
enum class Bar() {
A {
override val bar: String
get() = super.bar + " overridden"
};
open <!DECLARATION_CANT_BE_INLINED_WARNING!>inline<!> val bar: String get() = "puper"
}
fun main() {
println(Foo.A.bar)
}
@@ -507,6 +507,18 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/initializedAfterRethrow.kt");
}
@Test
@TestMetadata("inlineConstructorParameter.kt")
public void testInlineConstructorParameter() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineConstructorParameter.kt");
}
@Test
@TestMetadata("inlineConstructorParameter_on.kt")
public void testInlineConstructorParameter_on() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineConstructorParameter_on.kt");
}
@Test
@TestMetadata("inlineDeprecationsOnImplicitCalls.kt")
public void testInlineDeprecationsOnImplicitCalls() throws Exception {
@@ -308,6 +308,7 @@ enum class LanguageFeature(
ReferencesToSyntheticJavaProperties(KOTLIN_2_1), // KT-8575
ProhibitImplementingVarByInheritedVal(KOTLIN_2_1, kind = BUG_FIX), // KT-56779
PrioritizedEnumEntries(KOTLIN_2_1, kind = UNSTABLE_FEATURE), // KT-58920
ProhibitInlineModifierOnPrimaryConstructorParameters(KOTLIN_2_1, kind = BUG_FIX), // KT-59664
// End of 2.* language features --------------------------------------------------