[FIR] Report the use of inline on primary constructor parameters
^KT-59664 Fixed
This commit is contained in:
committed by
Space Team
parent
6c4f6907ea
commit
77feb86a85
+24
@@ -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,
|
||||
|
||||
+16
@@ -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
|
||||
}
|
||||
|
||||
+20
@@ -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,
|
||||
|
||||
+12
@@ -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 {
|
||||
|
||||
+12
@@ -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 {
|
||||
|
||||
+12
@@ -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 {
|
||||
|
||||
+12
@@ -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 {
|
||||
|
||||
+8
-1
@@ -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
-1
@@ -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
|
||||
|
||||
+9
-1
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+7
@@ -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)
|
||||
|
||||
+3
-1
@@ -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))
|
||||
|
||||
+3
-1
@@ -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))
|
||||
|
||||
+11
-4
@@ -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)
|
||||
}
|
||||
Generated
+12
@@ -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 --------------------------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user