diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index 7602dee9a47..f54053e6140 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -2602,6 +2602,34 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert 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 -> TypealiasExpandsToArrayOfNothingsImpl( firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a), diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index b79285406f7..004193ebd06 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -1849,6 +1849,26 @@ sealed interface KtFirDiagnostic : KtDiagnosticWithPsi { val valueParameter: KtSymbol } + interface MultipleDefaultsInheritedFromSupertypesDeprecationError : KtFirDiagnostic { + override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationError::class + val valueParameter: KtSymbol + } + + interface MultipleDefaultsInheritedFromSupertypesDeprecationWarning : KtFirDiagnostic { + override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationWarning::class + val valueParameter: KtSymbol + } + + interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError : KtFirDiagnostic { + override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError::class + val valueParameter: KtSymbol + } + + interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning : KtFirDiagnostic { + override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning::class + val valueParameter: KtSymbol + } + interface TypealiasExpandsToArrayOfNothings : KtFirDiagnostic { override val diagnosticClass get() = TypealiasExpandsToArrayOfNothings::class val type: KtType diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 8ccb1b960c1..36abd7e28f9 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -2221,6 +2221,30 @@ internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideImpl token: KtLifetimeToken, ) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride +internal class MultipleDefaultsInheritedFromSupertypesDeprecationErrorImpl( + override val valueParameter: KtSymbol, + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationError + +internal class MultipleDefaultsInheritedFromSupertypesDeprecationWarningImpl( + override val valueParameter: KtSymbol, + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationWarning + +internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationErrorImpl( + override val valueParameter: KtSymbol, + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError + +internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarningImpl( + override val valueParameter: KtSymbol, + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning + internal class TypealiasExpandsToArrayOfNothingsImpl( override val type: KtType, firDiagnostic: KtPsiDiagnostic, diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 2f4ec6bb76c..dbf9dfdfdde 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -357,6 +357,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia 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 @TestMetadata("falseNegativeDuplicateDefaultValues2.kt") public void testFalseNegativeDuplicateDefaultValues2() throws Exception { @@ -753,12 +759,30 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia 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 @TestMetadata("missingWrongAnnotationTarget.kt") public void testMissingWrongAnnotationTarget() throws Exception { runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt"); } + @Test + @TestMetadata("moreThanOneOverriddenMissingK2.kt") + public void testMoreThanOneOverriddenMissingK2() throws Exception { + runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt"); + } + @Test @TestMetadata("MultilineStringTemplates.kt") public void testMultilineStringTemplates() throws Exception { @@ -771,6 +795,18 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia 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 @TestMetadata("multipleDefaultsNoSource.kt") public void testMultipleDefaultsNoSource() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index b1c99a43179..2e1d70c37a5 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -357,6 +357,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated 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 @TestMetadata("falseNegativeDuplicateDefaultValues2.kt") public void testFalseNegativeDuplicateDefaultValues2() throws Exception { @@ -753,12 +759,30 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated 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 @TestMetadata("missingWrongAnnotationTarget.kt") public void testMissingWrongAnnotationTarget() throws Exception { runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt"); } + @Test + @TestMetadata("moreThanOneOverriddenMissingK2.kt") + public void testMoreThanOneOverriddenMissingK2() throws Exception { + runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt"); + } + @Test @TestMetadata("MultilineStringTemplates.kt") public void testMultilineStringTemplates() throws Exception { @@ -771,6 +795,18 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated 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 @TestMetadata("multipleDefaultsNoSource.kt") public void testMultipleDefaultsNoSource() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 5068cc8fca9..ee6d7660ecc 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -357,6 +357,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir 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 @TestMetadata("falseNegativeDuplicateDefaultValues2.kt") public void testFalseNegativeDuplicateDefaultValues2() throws Exception { @@ -753,12 +759,30 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir 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 @TestMetadata("missingWrongAnnotationTarget.kt") public void testMissingWrongAnnotationTarget() throws Exception { runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt"); } + @Test + @TestMetadata("moreThanOneOverriddenMissingK2.kt") + public void testMoreThanOneOverriddenMissingK2() throws Exception { + runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt"); + } + @Test @TestMetadata("MultilineStringTemplates.kt") public void testMultilineStringTemplates() throws Exception { @@ -771,6 +795,18 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir 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 @TestMetadata("multipleDefaultsNoSource.kt") public void testMultipleDefaultsNoSource() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index 379f6255517..c2d5b764ea2 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -357,6 +357,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia 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 @TestMetadata("falseNegativeDuplicateDefaultValues2.kt") public void testFalseNegativeDuplicateDefaultValues2() throws Exception { @@ -753,12 +759,30 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia 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 @TestMetadata("missingWrongAnnotationTarget.kt") public void testMissingWrongAnnotationTarget() throws Exception { runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt"); } + @Test + @TestMetadata("moreThanOneOverriddenMissingK2.kt") + public void testMoreThanOneOverriddenMissingK2() throws Exception { + runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt"); + } + @Test @TestMetadata("MultilineStringTemplates.kt") public void testMultilineStringTemplates() throws Exception { @@ -771,6 +795,18 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia 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 @TestMetadata("multipleDefaultsNoSource.kt") public void testMultipleDefaultsNoSource() throws Exception { diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index deb74b0bcb8..52bd6df1662 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -888,6 +888,18 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error(PositioningStrategy.DECLARATION_NAME) { parameter("valueParameter") } + val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION by deprecationError( + LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes, + PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT + ) { + parameter("valueParameter") + } + val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION by deprecationError( + LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes, + PositioningStrategy.DECLARATION_NAME + ) { + parameter("valueParameter") + } val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error { parameter("type") diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 2c7c391aa59..59bbcb43d58 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.config.LanguageFeature.ForbidExposingTypesInPrimaryC import org.jetbrains.kotlin.config.LanguageFeature.ForbidInferringTypeVariablesIntoEmptyIntersection import org.jetbrains.kotlin.config.LanguageFeature.ForbidUsingExtensionPropertyTypeParameterInDelegate 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.ProhibitConfusingSyntaxInWhenBranches import org.jetbrains.kotlin.config.LanguageFeature.ProhibitCyclesInAnnotations @@ -491,6 +492,8 @@ object FirErrors { val CANNOT_CHANGE_ACCESS_PRIVILEGE by error3, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error1(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error1(SourceElementPositioningStrategies.DECLARATION_NAME) + val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION by deprecationError1(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) + val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION by deprecationError1(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_NAME) val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error1() val OVERRIDING_FINAL_MEMBER by error2, Name>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER) val RETURN_TYPE_MISMATCH_ON_INHERITANCE by error2, FirCallableSymbol<*>>(SourceElementPositioningStrategies.DECLARATION_NAME) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirMultipleDefaultsInheritedFromSupertypesChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirMultipleDefaultsInheritedFromSupertypesChecker.kt index d4f9489acd1..9723a339d76 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirMultipleDefaultsInheritedFromSupertypesChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirMultipleDefaultsInheritedFromSupertypesChecker.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration +import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.reportOn 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.scopes.processAllFunctions import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecker() { override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) { @@ -42,26 +44,59 @@ object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecke } 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()) { val basesWithDefaultValues = overriddenFunctions.count { it.valueParameterSymbols[index].hasDefaultValue } + if (basesWithDefaultValues <= 1) { + continue + } + + val k1WouldMiss = overriddenFunctionsK1WouldConsider.count { it.valueParameterSymbols[index].hasDefaultValue } <= 1 + when { - basesWithDefaultValues <= 1 -> { - continue - } !isExplicitOverride -> { - reporter.reportOn( - declaration.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE, - parameter, context, - ) + reportDiagnosticForImplicitOverride(k1WouldMiss, declaration.source, parameter, context, reporter) // Avoid duplicates break } - else -> reporter.reportOn( - parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES, - parameter, context, - ) + else -> reportDiagnosticForExplicitOverride(k1WouldMiss, parameter, context, reporter) } } } + + 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, + ) + } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt index 3cf57033c6d..355aa7a4192 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt @@ -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_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_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.MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED @@ -1494,9 +1496,29 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() { 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." - map.put(MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES, multipleDefaultsMessage, SYMBOL) - map.put(MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE, multipleDefaultsMessage, SYMBOL) + val multipleDefaultsMessage = "More than one overridden function declares a default value for ''{0}''." + val multipleDefaultsNotAllowed = " As the compiler can not make sure these values agree, this is not allowed." + 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) diff --git a/compiler/testData/codegen/box/bridges/kt46389.kt b/compiler/testData/codegen/box/bridges/kt46389.kt index 5befdb2679b..c93a0bf7c85 100644 --- a/compiler/testData/codegen/box/bridges/kt46389.kt +++ b/compiler/testData/codegen/box/bridges/kt46389.kt @@ -1,6 +1,4 @@ -// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6 -// IGNORE_BACKEND_K2: ANY -// STATUS: This must be red code anyway, KT-36188 +// IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6 // The code in this test should be prohibited in the frontend, see KT-36188. diff --git a/compiler/testData/codegen/box/bridges/kt46389_jvmDefault.kt b/compiler/testData/codegen/box/bridges/kt46389_jvmDefault.kt index b0ff276453f..6cfebf67867 100644 --- a/compiler/testData/codegen/box/bridges/kt46389_jvmDefault.kt +++ b/compiler/testData/codegen/box/bridges/kt46389_jvmDefault.kt @@ -1,6 +1,4 @@ -// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6 -// IGNORE_BACKEND_K2: ANY -// STATUS: This must be red code anyway, KT-36188 +// IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6 // !JVM_DEFAULT_MODE: all // JVM_TARGET: 1.8 diff --git a/compiler/testData/codegen/box/defaultArguments/function/kt36188.kt b/compiler/testData/codegen/box/defaultArguments/function/kt36188.kt index a343c768284..5ed4b2a43cf 100644 --- a/compiler/testData/codegen/box/defaultArguments/function/kt36188.kt +++ b/compiler/testData/codegen/box/defaultArguments/function/kt36188.kt @@ -1,6 +1,4 @@ // 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 diff --git a/compiler/testData/codegen/box/defaultArguments/function/kt36188_2.kt b/compiler/testData/codegen/box/defaultArguments/function/kt36188_2.kt index 20f91488640..e0bb2edad07 100644 --- a/compiler/testData/codegen/box/defaultArguments/function/kt36188_2.kt +++ b/compiler/testData/codegen/box/defaultArguments/function/kt36188_2.kt @@ -1,6 +1,4 @@ // 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 diff --git a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.fir.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.fir.kt index 53f7e504e7b..84d5300be7b 100644 --- a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.fir.kt +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.fir.kt @@ -11,5 +11,5 @@ open class Keker

{ } class Implementation

() : Keker

(), SomeRandomOverride

{ - override fun child(props: Int) {} + override fun child(props: Int) {} } diff --git a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.fir.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.fir.kt new file mode 100644 index 00000000000..f09cb1ff362 --- /dev/null +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.fir.kt @@ -0,0 +1,16 @@ +// LANGUAGE: +ProhibitAllMultipleDefaultsInheritedFromSupertypes +// ISSUE: KT-36188 + +interface SomeRandomBase { + fun child(props: Int = 20) +} + +interface SomeRandomOverride : SomeRandomBase + +open class Keker

{ + open fun child(props: Int = 10) {} +} + +class Implementation

() : Keker

(), SomeRandomOverride

{ + override fun child(props: Int) {} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt new file mode 100644 index 00000000000..6a8b5123ef1 --- /dev/null +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt @@ -0,0 +1,16 @@ +// LANGUAGE: +ProhibitAllMultipleDefaultsInheritedFromSupertypes +// ISSUE: KT-36188 + +interface SomeRandomBase { + fun child(props: Int = 20) +} + +interface SomeRandomOverride : SomeRandomBase + +open class Keker

{ + open fun child(props: Int = 10) {} +} + +class Implementation

() : Keker

(), SomeRandomOverride

{ + override fun child(props: Int) {} +} diff --git a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.fir.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.fir.kt index bcbc3eb98fc..b31e8b459f8 100644 --- a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.fir.kt +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.fir.kt @@ -13,5 +13,5 @@ open class Keker

{ } class Implementation

() : Keker

(), SomeRandomOverride

{ - override fun child(props: Int) {} + override fun child(props: Int) {} } diff --git a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.fir.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.fir.kt index 4a89bb8f708..adea8a0d7a5 100644 --- a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.fir.kt +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.fir.kt @@ -13,5 +13,5 @@ open class Keker

{ } class Implementation

() : Keker

(), SomeRandomOverride

{ - override fun child(props: Int) {} + override fun child(props: Int) {} } diff --git a/compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.fir.kt b/compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.fir.kt new file mode 100644 index 00000000000..575b9f47ada --- /dev/null +++ b/compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.fir.kt @@ -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() +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt b/compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt new file mode 100644 index 00000000000..db8c29a9bbe --- /dev/null +++ b/compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt @@ -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() +} diff --git a/compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt b/compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt new file mode 100644 index 00000000000..8b771df776a --- /dev/null +++ b/compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt @@ -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(param: Int) { + println(param) + } +} + +fun main() { + Baz().foo() + (Baz() as Foo).foo() +} diff --git a/compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt b/compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt new file mode 100644 index 00000000000..495e57c9672 --- /dev/null +++ b/compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt @@ -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") + } +} + +class C02: C01(), I01 + +fun main(){ + C02().some() // K2: x = -1 y = 2 +} diff --git a/compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt b/compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt new file mode 100644 index 00000000000..8adf8978a3e --- /dev/null +++ b/compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt @@ -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(a: String) = a +} + +fun box(): String = Impl().foo() diff --git a/compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.fir.kt b/compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.fir.kt new file mode 100644 index 00000000000..a593fe7b6d1 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.fir.kt @@ -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() \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt b/compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt new file mode 100644 index 00000000000..c1d46174cae --- /dev/null +++ b/compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt @@ -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() diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index d58e68306ba..517b271ad13 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -357,6 +357,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { 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 @TestMetadata("falseNegativeDuplicateDefaultValues2.kt") public void testFalseNegativeDuplicateDefaultValues2() throws Exception { @@ -753,12 +759,30 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { 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 @TestMetadata("missingWrongAnnotationTarget.kt") public void testMissingWrongAnnotationTarget() throws Exception { runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt"); } + @Test + @TestMetadata("moreThanOneOverriddenMissingK2.kt") + public void testMoreThanOneOverriddenMissingK2() throws Exception { + runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt"); + } + @Test @TestMetadata("MultilineStringTemplates.kt") public void testMultilineStringTemplates() throws Exception { @@ -771,6 +795,18 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { 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 @TestMetadata("multipleDefaultsNoSource.kt") public void testMultipleDefaultsNoSource() throws Exception { diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 6b431e57c2c..1a7cac7e282 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -349,6 +349,7 @@ enum class LanguageFeature( AllowResultInReturnType(null), MultiPlatformProjects(sinceVersion = null), ProhibitComparisonOfIncompatibleClasses(sinceVersion = null, kind = BUG_FIX), + ProhibitAllMultipleDefaultsInheritedFromSupertypes(sinceVersion = null, kind = BUG_FIX), ExplicitBackingFields(sinceVersion = null, kind = UNSTABLE_FEATURE), FunctionalTypeWithExtensionAsSupertype(sinceVersion = null), JsAllowInvalidCharsIdentifiersEscaping(sinceVersion = null, kind = UNSTABLE_FEATURE),