[FIR] Relax MULTIPLE_DEFAULTS_* to account for the K1 behavior

^KT-56442
^KT-36188
This commit is contained in:
Nikolay Lunyak
2023-08-18 12:18:52 +03:00
committed by Space Team
parent 3f1bf6112f
commit 13a7bb95b3
29 changed files with 505 additions and 27 deletions
@@ -2602,6 +2602,34 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token, token,
) )
} }
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION.errorFactory) { firDiagnostic ->
MultipleDefaultsInheritedFromSupertypesDeprecationErrorImpl(
firSymbolBuilder.buildSymbol(firDiagnostic.a),
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION.warningFactory) { firDiagnostic ->
MultipleDefaultsInheritedFromSupertypesDeprecationWarningImpl(
firSymbolBuilder.buildSymbol(firDiagnostic.a),
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION.errorFactory) { firDiagnostic ->
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationErrorImpl(
firSymbolBuilder.buildSymbol(firDiagnostic.a),
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION.warningFactory) { firDiagnostic ->
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarningImpl(
firSymbolBuilder.buildSymbol(firDiagnostic.a),
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS) { firDiagnostic -> add(FirErrors.TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS) { firDiagnostic ->
TypealiasExpandsToArrayOfNothingsImpl( TypealiasExpandsToArrayOfNothingsImpl(
firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a), firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a),
@@ -1849,6 +1849,26 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
val valueParameter: KtSymbol val valueParameter: KtSymbol
} }
interface MultipleDefaultsInheritedFromSupertypesDeprecationError : KtFirDiagnostic<KtElement> {
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationError::class
val valueParameter: KtSymbol
}
interface MultipleDefaultsInheritedFromSupertypesDeprecationWarning : KtFirDiagnostic<KtElement> {
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationWarning::class
val valueParameter: KtSymbol
}
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError : KtFirDiagnostic<KtElement> {
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError::class
val valueParameter: KtSymbol
}
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning : KtFirDiagnostic<KtElement> {
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning::class
val valueParameter: KtSymbol
}
interface TypealiasExpandsToArrayOfNothings : KtFirDiagnostic<KtElement> { interface TypealiasExpandsToArrayOfNothings : KtFirDiagnostic<KtElement> {
override val diagnosticClass get() = TypealiasExpandsToArrayOfNothings::class override val diagnosticClass get() = TypealiasExpandsToArrayOfNothings::class
val type: KtType val type: KtType
@@ -2221,6 +2221,30 @@ internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideImpl
token: KtLifetimeToken, token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride ) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride
internal class MultipleDefaultsInheritedFromSupertypesDeprecationErrorImpl(
override val valueParameter: KtSymbol,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationError
internal class MultipleDefaultsInheritedFromSupertypesDeprecationWarningImpl(
override val valueParameter: KtSymbol,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationWarning
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationErrorImpl(
override val valueParameter: KtSymbol,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarningImpl(
override val valueParameter: KtSymbol,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning
internal class TypealiasExpandsToArrayOfNothingsImpl( internal class TypealiasExpandsToArrayOfNothingsImpl(
override val type: KtType, override val type: KtType,
firDiagnostic: KtPsiDiagnostic, firDiagnostic: KtPsiDiagnostic,
@@ -357,6 +357,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt"); runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt");
} }
@Test
@TestMetadata("falseNegativeDuplicateDefaultValues1_error.kt")
public void testFalseNegativeDuplicateDefaultValues1_error() throws Exception {
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt");
}
@Test @Test
@TestMetadata("falseNegativeDuplicateDefaultValues2.kt") @TestMetadata("falseNegativeDuplicateDefaultValues2.kt")
public void testFalseNegativeDuplicateDefaultValues2() throws Exception { public void testFalseNegativeDuplicateDefaultValues2() throws Exception {
@@ -753,12 +759,30 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt"); runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
} }
@Test
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance1.kt")
public void testMissingMultipleDefaultsOnTransitiveInheritance1() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt");
}
@Test
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance2.kt")
public void testMissingMultipleDefaultsOnTransitiveInheritance2() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt");
}
@Test @Test
@TestMetadata("missingWrongAnnotationTarget.kt") @TestMetadata("missingWrongAnnotationTarget.kt")
public void testMissingWrongAnnotationTarget() throws Exception { public void testMissingWrongAnnotationTarget() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt"); runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt");
} }
@Test
@TestMetadata("moreThanOneOverriddenMissingK2.kt")
public void testMoreThanOneOverriddenMissingK2() throws Exception {
runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt");
}
@Test @Test
@TestMetadata("MultilineStringTemplates.kt") @TestMetadata("MultilineStringTemplates.kt")
public void testMultilineStringTemplates() throws Exception { public void testMultilineStringTemplates() throws Exception {
@@ -771,6 +795,18 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt"); runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt");
} }
@Test
@TestMetadata("multipleDefaultsIncorrectlyAllowed1.kt")
public void testMultipleDefaultsIncorrectlyAllowed1() throws Exception {
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt");
}
@Test
@TestMetadata("multipleDefaultsIncorrectlyAllowed2.kt")
public void testMultipleDefaultsIncorrectlyAllowed2() throws Exception {
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt");
}
@Test @Test
@TestMetadata("multipleDefaultsNoSource.kt") @TestMetadata("multipleDefaultsNoSource.kt")
public void testMultipleDefaultsNoSource() throws Exception { public void testMultipleDefaultsNoSource() throws Exception {
@@ -357,6 +357,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt"); runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt");
} }
@Test
@TestMetadata("falseNegativeDuplicateDefaultValues1_error.kt")
public void testFalseNegativeDuplicateDefaultValues1_error() throws Exception {
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt");
}
@Test @Test
@TestMetadata("falseNegativeDuplicateDefaultValues2.kt") @TestMetadata("falseNegativeDuplicateDefaultValues2.kt")
public void testFalseNegativeDuplicateDefaultValues2() throws Exception { public void testFalseNegativeDuplicateDefaultValues2() throws Exception {
@@ -753,12 +759,30 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt"); runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
} }
@Test
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance1.kt")
public void testMissingMultipleDefaultsOnTransitiveInheritance1() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt");
}
@Test
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance2.kt")
public void testMissingMultipleDefaultsOnTransitiveInheritance2() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt");
}
@Test @Test
@TestMetadata("missingWrongAnnotationTarget.kt") @TestMetadata("missingWrongAnnotationTarget.kt")
public void testMissingWrongAnnotationTarget() throws Exception { public void testMissingWrongAnnotationTarget() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt"); runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt");
} }
@Test
@TestMetadata("moreThanOneOverriddenMissingK2.kt")
public void testMoreThanOneOverriddenMissingK2() throws Exception {
runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt");
}
@Test @Test
@TestMetadata("MultilineStringTemplates.kt") @TestMetadata("MultilineStringTemplates.kt")
public void testMultilineStringTemplates() throws Exception { public void testMultilineStringTemplates() throws Exception {
@@ -771,6 +795,18 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt"); runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt");
} }
@Test
@TestMetadata("multipleDefaultsIncorrectlyAllowed1.kt")
public void testMultipleDefaultsIncorrectlyAllowed1() throws Exception {
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt");
}
@Test
@TestMetadata("multipleDefaultsIncorrectlyAllowed2.kt")
public void testMultipleDefaultsIncorrectlyAllowed2() throws Exception {
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt");
}
@Test @Test
@TestMetadata("multipleDefaultsNoSource.kt") @TestMetadata("multipleDefaultsNoSource.kt")
public void testMultipleDefaultsNoSource() throws Exception { public void testMultipleDefaultsNoSource() throws Exception {
@@ -357,6 +357,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt"); runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt");
} }
@Test
@TestMetadata("falseNegativeDuplicateDefaultValues1_error.kt")
public void testFalseNegativeDuplicateDefaultValues1_error() throws Exception {
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt");
}
@Test @Test
@TestMetadata("falseNegativeDuplicateDefaultValues2.kt") @TestMetadata("falseNegativeDuplicateDefaultValues2.kt")
public void testFalseNegativeDuplicateDefaultValues2() throws Exception { public void testFalseNegativeDuplicateDefaultValues2() throws Exception {
@@ -753,12 +759,30 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt"); runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
} }
@Test
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance1.kt")
public void testMissingMultipleDefaultsOnTransitiveInheritance1() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt");
}
@Test
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance2.kt")
public void testMissingMultipleDefaultsOnTransitiveInheritance2() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt");
}
@Test @Test
@TestMetadata("missingWrongAnnotationTarget.kt") @TestMetadata("missingWrongAnnotationTarget.kt")
public void testMissingWrongAnnotationTarget() throws Exception { public void testMissingWrongAnnotationTarget() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt"); runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt");
} }
@Test
@TestMetadata("moreThanOneOverriddenMissingK2.kt")
public void testMoreThanOneOverriddenMissingK2() throws Exception {
runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt");
}
@Test @Test
@TestMetadata("MultilineStringTemplates.kt") @TestMetadata("MultilineStringTemplates.kt")
public void testMultilineStringTemplates() throws Exception { public void testMultilineStringTemplates() throws Exception {
@@ -771,6 +795,18 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt"); runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt");
} }
@Test
@TestMetadata("multipleDefaultsIncorrectlyAllowed1.kt")
public void testMultipleDefaultsIncorrectlyAllowed1() throws Exception {
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt");
}
@Test
@TestMetadata("multipleDefaultsIncorrectlyAllowed2.kt")
public void testMultipleDefaultsIncorrectlyAllowed2() throws Exception {
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt");
}
@Test @Test
@TestMetadata("multipleDefaultsNoSource.kt") @TestMetadata("multipleDefaultsNoSource.kt")
public void testMultipleDefaultsNoSource() throws Exception { public void testMultipleDefaultsNoSource() throws Exception {
@@ -357,6 +357,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt"); runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt");
} }
@Test
@TestMetadata("falseNegativeDuplicateDefaultValues1_error.kt")
public void testFalseNegativeDuplicateDefaultValues1_error() throws Exception {
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt");
}
@Test @Test
@TestMetadata("falseNegativeDuplicateDefaultValues2.kt") @TestMetadata("falseNegativeDuplicateDefaultValues2.kt")
public void testFalseNegativeDuplicateDefaultValues2() throws Exception { public void testFalseNegativeDuplicateDefaultValues2() throws Exception {
@@ -753,12 +759,30 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt"); runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
} }
@Test
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance1.kt")
public void testMissingMultipleDefaultsOnTransitiveInheritance1() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt");
}
@Test
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance2.kt")
public void testMissingMultipleDefaultsOnTransitiveInheritance2() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt");
}
@Test @Test
@TestMetadata("missingWrongAnnotationTarget.kt") @TestMetadata("missingWrongAnnotationTarget.kt")
public void testMissingWrongAnnotationTarget() throws Exception { public void testMissingWrongAnnotationTarget() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt"); runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt");
} }
@Test
@TestMetadata("moreThanOneOverriddenMissingK2.kt")
public void testMoreThanOneOverriddenMissingK2() throws Exception {
runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt");
}
@Test @Test
@TestMetadata("MultilineStringTemplates.kt") @TestMetadata("MultilineStringTemplates.kt")
public void testMultilineStringTemplates() throws Exception { public void testMultilineStringTemplates() throws Exception {
@@ -771,6 +795,18 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt"); runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt");
} }
@Test
@TestMetadata("multipleDefaultsIncorrectlyAllowed1.kt")
public void testMultipleDefaultsIncorrectlyAllowed1() throws Exception {
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt");
}
@Test
@TestMetadata("multipleDefaultsIncorrectlyAllowed2.kt")
public void testMultipleDefaultsIncorrectlyAllowed2() throws Exception {
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt");
}
@Test @Test
@TestMetadata("multipleDefaultsNoSource.kt") @TestMetadata("multipleDefaultsNoSource.kt")
public void testMultipleDefaultsNoSource() throws Exception { public void testMultipleDefaultsNoSource() throws Exception {
@@ -888,6 +888,18 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error<KtElement>(PositioningStrategy.DECLARATION_NAME) { val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error<KtElement>(PositioningStrategy.DECLARATION_NAME) {
parameter<FirValueParameterSymbol>("valueParameter") parameter<FirValueParameterSymbol>("valueParameter")
} }
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION by deprecationError<KtElement>(
LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes,
PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT
) {
parameter<FirValueParameterSymbol>("valueParameter")
}
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION by deprecationError<KtElement>(
LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes,
PositioningStrategy.DECLARATION_NAME
) {
parameter<FirValueParameterSymbol>("valueParameter")
}
val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error<KtElement> { val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error<KtElement> {
parameter<ConeKotlinType>("type") parameter<ConeKotlinType>("type")
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.config.LanguageFeature.ForbidExposingTypesInPrimaryC
import org.jetbrains.kotlin.config.LanguageFeature.ForbidInferringTypeVariablesIntoEmptyIntersection import org.jetbrains.kotlin.config.LanguageFeature.ForbidInferringTypeVariablesIntoEmptyIntersection
import org.jetbrains.kotlin.config.LanguageFeature.ForbidUsingExtensionPropertyTypeParameterInDelegate import org.jetbrains.kotlin.config.LanguageFeature.ForbidUsingExtensionPropertyTypeParameterInDelegate
import org.jetbrains.kotlin.config.LanguageFeature.ModifierNonBuiltinSuspendFunError import org.jetbrains.kotlin.config.LanguageFeature.ModifierNonBuiltinSuspendFunError
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitAssigningSingleElementsToVarargsInNamedForm import org.jetbrains.kotlin.config.LanguageFeature.ProhibitAssigningSingleElementsToVarargsInNamedForm
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitConfusingSyntaxInWhenBranches import org.jetbrains.kotlin.config.LanguageFeature.ProhibitConfusingSyntaxInWhenBranches
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitCyclesInAnnotations import org.jetbrains.kotlin.config.LanguageFeature.ProhibitCyclesInAnnotations
@@ -491,6 +492,8 @@ object FirErrors {
val CANNOT_CHANGE_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val CANNOT_CHANGE_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error1<KtElement, FirValueParameterSymbol>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error1<KtElement, FirValueParameterSymbol>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error1<KtElement, FirValueParameterSymbol>(SourceElementPositioningStrategies.DECLARATION_NAME) val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error1<KtElement, FirValueParameterSymbol>(SourceElementPositioningStrategies.DECLARATION_NAME)
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION by deprecationError1<KtElement, FirValueParameterSymbol>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION by deprecationError1<KtElement, FirValueParameterSymbol>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_NAME)
val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error1<KtElement, ConeKotlinType>() val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error1<KtElement, ConeKotlinType>()
val OVERRIDING_FINAL_MEMBER by error2<KtNamedDeclaration, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER) val OVERRIDING_FINAL_MEMBER by error2<KtNamedDeclaration, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
val RETURN_TYPE_MISMATCH_ON_INHERITANCE by error2<KtClassOrObject, FirCallableSymbol<*>, FirCallableSymbol<*>>(SourceElementPositioningStrategies.DECLARATION_NAME) val RETURN_TYPE_MISMATCH_ON_INHERITANCE by error2<KtClassOrObject, FirCallableSymbol<*>, FirCallableSymbol<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.analysis.checkers.declaration package org.jetbrains.kotlin.fir.analysis.checkers.declaration
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.analysis.checkers.collectOverriddenFunctionsWhere import org.jetbrains.kotlin.fir.analysis.checkers.collectOverriddenFunctionsWhere
@@ -18,6 +19,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes
import org.jetbrains.kotlin.fir.isSubstitutionOverride import org.jetbrains.kotlin.fir.isSubstitutionOverride
import org.jetbrains.kotlin.fir.scopes.processAllFunctions import org.jetbrains.kotlin.fir.scopes.processAllFunctions
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecker() { object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecker() {
override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) { override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) {
@@ -42,26 +44,59 @@ object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecke
} }
val isExplicitOverride = function.origin == FirDeclarationOrigin.Source val isExplicitOverride = function.origin == FirDeclarationOrigin.Source
val immediateSupertypes = declaration.superConeTypes.mapTo(mutableSetOf()) { it.lookupTag }
val overriddenFunctionsK1WouldConsider = overriddenFunctions.filter { it.containingClassLookupTag() in immediateSupertypes }
for ((index, parameter) in function.valueParameterSymbols.withIndex()) { for ((index, parameter) in function.valueParameterSymbols.withIndex()) {
val basesWithDefaultValues = overriddenFunctions.count { it.valueParameterSymbols[index].hasDefaultValue } val basesWithDefaultValues = overriddenFunctions.count { it.valueParameterSymbols[index].hasDefaultValue }
if (basesWithDefaultValues <= 1) {
continue
}
val k1WouldMiss = overriddenFunctionsK1WouldConsider.count { it.valueParameterSymbols[index].hasDefaultValue } <= 1
when { when {
basesWithDefaultValues <= 1 -> {
continue
}
!isExplicitOverride -> { !isExplicitOverride -> {
reporter.reportOn( reportDiagnosticForImplicitOverride(k1WouldMiss, declaration.source, parameter, context, reporter)
declaration.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
parameter, context,
)
// Avoid duplicates // Avoid duplicates
break break
} }
else -> reporter.reportOn( else -> reportDiagnosticForExplicitOverride(k1WouldMiss, parameter, context, reporter)
parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES,
parameter, context,
)
} }
} }
} }
private fun reportDiagnosticForImplicitOverride(
k1WouldMiss: Boolean,
source: KtSourceElement?,
parameter: FirValueParameterSymbol,
context: CheckerContext,
reporter: DiagnosticReporter,
): Unit = when {
k1WouldMiss -> reporter.reportOn(
source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION,
parameter, context,
)
else -> reporter.reportOn(
source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
parameter, context,
)
}
private fun reportDiagnosticForExplicitOverride(
k1WouldMiss: Boolean,
parameter: FirValueParameterSymbol,
context: CheckerContext,
reporter: DiagnosticReporter,
): Unit = when {
k1WouldMiss -> reporter.reportOn(
parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION,
parameter, context,
)
else -> reporter.reportOn(
parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES,
parameter, context,
)
}
} }
@@ -369,6 +369,8 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MODIFIER_FORM_FOR
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_ARGUMENTS_APPLICABLE_FOR_CONTEXT_RECEIVER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_ARGUMENTS_APPLICABLE_FOR_CONTEXT_RECEIVER
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_VARARG_PARAMETERS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_VARARG_PARAMETERS
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED
@@ -1494,9 +1496,29 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
FQ_NAMES_IN_TYPES FQ_NAMES_IN_TYPES
) )
val multipleDefaultsMessage = "More than one overridden descriptor declares a default value for ''{0}''. As the compiler can not make sure these values agree, this is not allowed." val multipleDefaultsMessage = "More than one overridden function declares a default value for ''{0}''."
map.put(MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES, multipleDefaultsMessage, SYMBOL) val multipleDefaultsNotAllowed = " As the compiler can not make sure these values agree, this is not allowed."
map.put(MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE, multipleDefaultsMessage, SYMBOL) map.put(
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES,
multipleDefaultsMessage + multipleDefaultsNotAllowed,
SYMBOL
)
map.put(
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
multipleDefaultsMessage + multipleDefaultsNotAllowed,
SYMBOL
)
val multipleDefaultsDiscouraged = " As the compiler can not make sure these values agree, this will be prohibited in the Future."
map.put(
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION,
multipleDefaultsMessage + multipleDefaultsDiscouraged,
SYMBOL
)
map.put(
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION,
multipleDefaultsMessage + multipleDefaultsNotAllowed,
SYMBOL
)
map.put(TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS, "Type alias expanded to malformed type ''{0}''", RENDER_TYPE) map.put(TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS, "Type alias expanded to malformed type ''{0}''", RENDER_TYPE)
+1 -3
View File
@@ -1,6 +1,4 @@
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6 // IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6
// IGNORE_BACKEND_K2: ANY
// STATUS: This must be red code anyway, KT-36188
// The code in this test should be prohibited in the frontend, see KT-36188. // The code in this test should be prohibited in the frontend, see KT-36188.
@@ -1,6 +1,4 @@
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6 // IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6
// IGNORE_BACKEND_K2: ANY
// STATUS: This must be red code anyway, KT-36188
// !JVM_DEFAULT_MODE: all // !JVM_DEFAULT_MODE: all
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
@@ -1,6 +1,4 @@
// IGNORE_BACKEND: JS // IGNORE_BACKEND: JS
// IGNORE_BACKEND_K2: ANY
// STATUS: This must be red code anyway, KT-36188
// Test for KT-36188 bug compatibility between non-IR and IR backends // Test for KT-36188 bug compatibility between non-IR and IR backends
@@ -1,6 +1,4 @@
// IGNORE_BACKEND: JS // IGNORE_BACKEND: JS
// IGNORE_BACKEND_K2: ANY
// STATUS: This must be red code anyway, KT-36188
// Test for KT-36188 bug compatibility between non-IR and IR backends // Test for KT-36188 bug compatibility between non-IR and IR backends
@@ -11,5 +11,5 @@ open class Keker<P> {
} }
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> { class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>props: Int<!>) {} override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>props: Int<!>) {}
} }
@@ -0,0 +1,16 @@
// LANGUAGE: +ProhibitAllMultipleDefaultsInheritedFromSupertypes
// ISSUE: KT-36188
interface SomeRandomBase<K> {
fun child(props: Int = 20)
}
interface SomeRandomOverride<J> : SomeRandomBase<J>
open class Keker<P> {
open fun child(props: Int = 10) {}
}
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_ERROR!>props: Int<!>) {}
}
@@ -0,0 +1,16 @@
// LANGUAGE: +ProhibitAllMultipleDefaultsInheritedFromSupertypes
// ISSUE: KT-36188
interface SomeRandomBase<K> {
fun child(props: Int = 20)
}
interface SomeRandomOverride<J> : SomeRandomBase<J>
open class Keker<P> {
open fun child(props: Int = 10) {}
}
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(props: Int) {}
}
@@ -13,5 +13,5 @@ open class Keker<P> {
} }
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> { class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>props: Int<!>) {} override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>props: Int<!>) {}
} }
@@ -13,5 +13,5 @@ open class Keker<P> {
} }
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> { class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>props: Int<!>) {} override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>props: Int<!>) {}
} }
@@ -0,0 +1,23 @@
// ISSUE: KT-60269
// WITH_STDLIB
interface Foo {
fun foo(param: Int = 1)
}
interface Bar {
fun foo(param: Int = 2)
}
interface Baz1 : Bar
class Baz : Baz1, Foo {
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>param: Int<!>) {
println(param)
}
}
fun main() {
Baz().foo()
(Baz() as Foo).foo()
}
@@ -0,0 +1,23 @@
// ISSUE: KT-60269
// WITH_STDLIB
interface Foo {
fun foo(param: Int = 1)
}
interface Bar {
fun foo(param: Int = 2)
}
interface Baz1 : Bar
class Baz : Baz1, Foo {
override fun foo(param: Int) {
println(param)
}
}
fun main() {
Baz().foo()
(Baz() as Foo).foo()
}
@@ -0,0 +1,22 @@
// FIR_IDENTICAL
// ISSUE: KT-60269
// WITH_STDLIB
interface Foo {
fun foo(param: Int = 1)
}
interface Bar {
fun foo(param: Int = 2)
}
class Baz : Bar, Foo {
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>param: Int<!>) {
println(param)
}
}
fun main() {
Baz().foo()
(Baz() as Foo).foo()
}
@@ -0,0 +1,19 @@
// FIR_IDENTICAL
// ISSUE: KT-57076
// WITH_STDLIB
interface I01 {
fun some(x: Int = 1, y: Int)
}
open class C01 {
open fun some(x: Int = -1, y: Int = 2) {
println("x = $x y = $y")
}
}
<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE!>class C02<!>: C01(), I01
fun main(){
C02().some() // K2: x = -1 y = 2
}
@@ -0,0 +1,14 @@
// FIR_IDENTICAL
// ISSUE: KT-36188
interface A {
fun foo(a: String = "Fail"): String
}
interface B {
fun foo(a: String = "OK"): String
}
class Impl : A, B {
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>a: String<!>) = a
}
fun box(): String = Impl().foo()
@@ -0,0 +1,14 @@
// ISSUE: KT-36188
interface A {
fun foo(a: String = "Fail"): String
}
interface A2 : A
interface B {
fun foo(a: String = "OK"): String
}
class Impl : A2, B {
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>a: String<!>) = a
}
fun box(): String = Impl().foo()
@@ -0,0 +1,14 @@
// ISSUE: KT-36188
interface A {
fun foo(a: String = "Fail"): String
}
interface A2 : A
interface B {
fun foo(a: String = "OK"): String
}
class Impl : A2, B {
override fun foo(a: String) = a
}
fun box(): String = Impl().foo()
@@ -357,6 +357,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt"); runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt");
} }
@Test
@TestMetadata("falseNegativeDuplicateDefaultValues1_error.kt")
public void testFalseNegativeDuplicateDefaultValues1_error() throws Exception {
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt");
}
@Test @Test
@TestMetadata("falseNegativeDuplicateDefaultValues2.kt") @TestMetadata("falseNegativeDuplicateDefaultValues2.kt")
public void testFalseNegativeDuplicateDefaultValues2() throws Exception { public void testFalseNegativeDuplicateDefaultValues2() throws Exception {
@@ -753,12 +759,30 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt"); runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
} }
@Test
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance1.kt")
public void testMissingMultipleDefaultsOnTransitiveInheritance1() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt");
}
@Test
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance2.kt")
public void testMissingMultipleDefaultsOnTransitiveInheritance2() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt");
}
@Test @Test
@TestMetadata("missingWrongAnnotationTarget.kt") @TestMetadata("missingWrongAnnotationTarget.kt")
public void testMissingWrongAnnotationTarget() throws Exception { public void testMissingWrongAnnotationTarget() throws Exception {
runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt"); runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt");
} }
@Test
@TestMetadata("moreThanOneOverriddenMissingK2.kt")
public void testMoreThanOneOverriddenMissingK2() throws Exception {
runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt");
}
@Test @Test
@TestMetadata("MultilineStringTemplates.kt") @TestMetadata("MultilineStringTemplates.kt")
public void testMultilineStringTemplates() throws Exception { public void testMultilineStringTemplates() throws Exception {
@@ -771,6 +795,18 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt"); runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt");
} }
@Test
@TestMetadata("multipleDefaultsIncorrectlyAllowed1.kt")
public void testMultipleDefaultsIncorrectlyAllowed1() throws Exception {
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt");
}
@Test
@TestMetadata("multipleDefaultsIncorrectlyAllowed2.kt")
public void testMultipleDefaultsIncorrectlyAllowed2() throws Exception {
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt");
}
@Test @Test
@TestMetadata("multipleDefaultsNoSource.kt") @TestMetadata("multipleDefaultsNoSource.kt")
public void testMultipleDefaultsNoSource() throws Exception { public void testMultipleDefaultsNoSource() throws Exception {
@@ -349,6 +349,7 @@ enum class LanguageFeature(
AllowResultInReturnType(null), AllowResultInReturnType(null),
MultiPlatformProjects(sinceVersion = null), MultiPlatformProjects(sinceVersion = null),
ProhibitComparisonOfIncompatibleClasses(sinceVersion = null, kind = BUG_FIX), ProhibitComparisonOfIncompatibleClasses(sinceVersion = null, kind = BUG_FIX),
ProhibitAllMultipleDefaultsInheritedFromSupertypes(sinceVersion = null, kind = BUG_FIX),
ExplicitBackingFields(sinceVersion = null, kind = UNSTABLE_FEATURE), ExplicitBackingFields(sinceVersion = null, kind = UNSTABLE_FEATURE),
FunctionalTypeWithExtensionAsSupertype(sinceVersion = null), FunctionalTypeWithExtensionAsSupertype(sinceVersion = null),
JsAllowInvalidCharsIdentifiersEscaping(sinceVersion = null, kind = UNSTABLE_FEATURE), JsAllowInvalidCharsIdentifiersEscaping(sinceVersion = null, kind = UNSTABLE_FEATURE),