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 da0ab94691a..f197708d2ef 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 @@ -2562,20 +2562,6 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } - add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES) { firDiagnostic -> - MultipleDefaultsInheritedFromSupertypesImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a), - firDiagnostic as KtPsiDiagnostic, - token, - ) - } - add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE) { firDiagnostic -> - MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideImpl( - 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 77956f1791a..4f571da7800 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 @@ -1821,16 +1821,6 @@ sealed interface KtFirDiagnostic : KtDiagnosticWithPsi { val containingClassName: Name } - interface MultipleDefaultsInheritedFromSupertypes : KtFirDiagnostic { - override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypes::class - val valueParameter: KtSymbol - } - - interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride : KtFirDiagnostic { - override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride::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 c89d293afee..2ed9f34903b 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 @@ -2187,18 +2187,6 @@ internal class CannotChangeAccessPrivilegeImpl( token: KtLifetimeToken, ) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.CannotChangeAccessPrivilege -internal class MultipleDefaultsInheritedFromSupertypesImpl( - override val valueParameter: KtSymbol, - firDiagnostic: KtPsiDiagnostic, - token: KtLifetimeToken, -) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypes - -internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideImpl( - override val valueParameter: KtSymbol, - firDiagnostic: KtPsiDiagnostic, - token: KtLifetimeToken, -) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride - 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 d36e5e04170..1443631a4de 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 @@ -303,6 +303,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/Dollar.kt"); } + @Test + @TestMetadata("duplicateDirrectOverriddenCallables.kt") + public void testDuplicateDirrectOverriddenCallables() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt"); + } + @Test @TestMetadata("emptyLhsClassLiterals.kt") public void testEmptyLhsClassLiterals() throws Exception { @@ -345,6 +351,24 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/ExternalAndAbstract.kt"); } + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues1.kt") + public void testFalseNegativeDuplicateDefaultValues1() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt"); + } + + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues2.kt") + public void testFalseNegativeDuplicateDefaultValues2() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.kt"); + } + + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues3.kt") + public void testFalseNegativeDuplicateDefaultValues3() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.kt"); + } + @Test @TestMetadata("fileDependencyRecursion.kt") public void testFileDependencyRecursion() throws Exception { @@ -729,6 +753,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt"); } + @Test + @TestMetadata("multipleDefaultsNoSource.kt") + public void testMultipleDefaultsNoSource() throws Exception { + runTest("compiler/testData/diagnostics/tests/multipleDefaultsNoSource.kt"); + } + @Test @TestMetadata("NamedFunctionTypeParameterInSupertype.kt") public void testNamedFunctionTypeParameterInSupertype() 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 621942bbff5..4fa7d948cb4 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 @@ -303,6 +303,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/Dollar.kt"); } + @Test + @TestMetadata("duplicateDirrectOverriddenCallables.kt") + public void testDuplicateDirrectOverriddenCallables() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt"); + } + @Test @TestMetadata("emptyLhsClassLiterals.kt") public void testEmptyLhsClassLiterals() throws Exception { @@ -345,6 +351,24 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/ExternalAndAbstract.kt"); } + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues1.kt") + public void testFalseNegativeDuplicateDefaultValues1() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt"); + } + + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues2.kt") + public void testFalseNegativeDuplicateDefaultValues2() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.kt"); + } + + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues3.kt") + public void testFalseNegativeDuplicateDefaultValues3() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.kt"); + } + @Test @TestMetadata("fileDependencyRecursion.kt") public void testFileDependencyRecursion() throws Exception { @@ -729,6 +753,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt"); } + @Test + @TestMetadata("multipleDefaultsNoSource.kt") + public void testMultipleDefaultsNoSource() throws Exception { + runTest("compiler/testData/diagnostics/tests/multipleDefaultsNoSource.kt"); + } + @Test @TestMetadata("NamedFunctionTypeParameterInSupertype.kt") public void testNamedFunctionTypeParameterInSupertype() 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 76e8e6a499c..7e32baf7082 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 @@ -303,6 +303,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/Dollar.kt"); } + @Test + @TestMetadata("duplicateDirrectOverriddenCallables.kt") + public void testDuplicateDirrectOverriddenCallables() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt"); + } + @Test @TestMetadata("emptyLhsClassLiterals.kt") public void testEmptyLhsClassLiterals() throws Exception { @@ -345,6 +351,24 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/ExternalAndAbstract.kt"); } + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues1.kt") + public void testFalseNegativeDuplicateDefaultValues1() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt"); + } + + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues2.kt") + public void testFalseNegativeDuplicateDefaultValues2() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.kt"); + } + + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues3.kt") + public void testFalseNegativeDuplicateDefaultValues3() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.kt"); + } + @Test @TestMetadata("fileDependencyRecursion.kt") public void testFileDependencyRecursion() throws Exception { @@ -729,6 +753,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt"); } + @Test + @TestMetadata("multipleDefaultsNoSource.kt") + public void testMultipleDefaultsNoSource() throws Exception { + runTest("compiler/testData/diagnostics/tests/multipleDefaultsNoSource.kt"); + } + @Test @TestMetadata("NamedFunctionTypeParameterInSupertype.kt") public void testNamedFunctionTypeParameterInSupertype() 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 afef44f5525..d343e266411 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 @@ -303,6 +303,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/Dollar.kt"); } + @Test + @TestMetadata("duplicateDirrectOverriddenCallables.kt") + public void testDuplicateDirrectOverriddenCallables() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt"); + } + @Test @TestMetadata("emptyLhsClassLiterals.kt") public void testEmptyLhsClassLiterals() throws Exception { @@ -345,6 +351,24 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/ExternalAndAbstract.kt"); } + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues1.kt") + public void testFalseNegativeDuplicateDefaultValues1() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt"); + } + + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues2.kt") + public void testFalseNegativeDuplicateDefaultValues2() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.kt"); + } + + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues3.kt") + public void testFalseNegativeDuplicateDefaultValues3() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.kt"); + } + @Test @TestMetadata("fileDependencyRecursion.kt") public void testFileDependencyRecursion() throws Exception { @@ -729,6 +753,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt"); } + @Test + @TestMetadata("multipleDefaultsNoSource.kt") + public void testMultipleDefaultsNoSource() throws Exception { + runTest("compiler/testData/diagnostics/tests/multipleDefaultsNoSource.kt"); + } + @Test @TestMetadata("NamedFunctionTypeParameterInSupertype.kt") public void testNamedFunctionTypeParameterInSupertype() 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 0a172362c85..aff8ae5da7d 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 @@ -872,13 +872,6 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { parameter("containingClassName") } - val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) { - parameter("valueParameter") - } - val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error(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 5b69f9db6ad..2f40d56b3f9 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 @@ -484,8 +484,6 @@ object FirErrors { val DATA_CLASS_OVERRIDE_DEFAULT_VALUES by error2, FirClassSymbol<*>>(SourceElementPositioningStrategies.DATA_MODIFIER) val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error3, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) 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 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/CommonDeclarationCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt index ca7f8ffc8af..965867236c9 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt @@ -129,7 +129,6 @@ object CommonDeclarationCheckers : DeclarationCheckers() { FirOuterClassArgumentsRequiredChecker, FirPropertyInitializationChecker, FirDelegateFieldTypeMismatchChecker, - FirMultipleDefaultsInheritedFromSupertypesChecker, FirFiniteBoundRestrictionChecker, ) 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 deleted file mode 100644 index 8e430cd513f..00000000000 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirMultipleDefaultsInheritedFromSupertypesChecker.kt +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.fir.analysis.checkers.declaration - -import org.jetbrains.kotlin.diagnostics.DiagnosticReporter -import org.jetbrains.kotlin.diagnostics.reportOn -import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext -import org.jetbrains.kotlin.fir.analysis.checkers.directOverriddenFunctions -import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope -import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors -import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.isSubstitutionOrIntersectionOverride -import org.jetbrains.kotlin.fir.scopes.processAllFunctions -import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverrideFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol -import org.jetbrains.kotlin.utils.addToStdlib.UnsafeCastFunction -import org.jetbrains.kotlin.utils.addToStdlib.castAll - -object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecker() { - override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) { - declaration.unsubstitutedScope(context).processAllFunctions { - checkFunction(declaration, it, context, reporter) - } - } - - private fun checkFunction( - declaration: FirRegularClass, - function: FirNamedFunctionSymbol, - context: CheckerContext, - reporter: DiagnosticReporter, - ) { - @OptIn(UnsafeCastFunction::class) - val overriddenFunctions = when (function) { - is FirIntersectionOverrideFunctionSymbol -> function.intersections.castAll>() - else -> function.directOverriddenFunctions(context) - } - - for ((index, parameter) in function.valueParameterSymbols.withIndex()) { - val basesWithDefaultValues = overriddenFunctions.count { it.valueParameterSymbols[index].hasDefaultValue } - - when { - basesWithDefaultValues <= 1 -> { - continue - } - function.isSubstitutionOrIntersectionOverride -> reporter.reportOn( - declaration.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE, - 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 11ae089e1b0..893b711354f 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 @@ -359,8 +359,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MISSING_VAL_ON_AN import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN 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_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 @@ -1458,10 +1456,6 @@ 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) - map.put(TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS, "Type alias expanded to malformed type ''{0}''", RENDER_TYPE) map.put(OVERRIDING_FINAL_MEMBER, "''{0}'' in ''{1}'' is final and cannot be overridden", DECLARATION_NAME, TO_STRING) diff --git a/compiler/testData/codegen/box/bridges/kt46389.kt b/compiler/testData/codegen/box/bridges/kt46389.kt index 101911b0629..c93a0bf7c85 100644 --- a/compiler/testData/codegen/box/bridges/kt46389.kt +++ b/compiler/testData/codegen/box/bridges/kt46389.kt @@ -1,5 +1,4 @@ -// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6 -// IGNORE_BACKEND_K2: ANY +// 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 5ba429ef9e1..6cfebf67867 100644 --- a/compiler/testData/codegen/box/bridges/kt46389_jvmDefault.kt +++ b/compiler/testData/codegen/box/bridges/kt46389_jvmDefault.kt @@ -1,5 +1,4 @@ -// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6 -// IGNORE_BACKEND_K2: ANY +// 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 568f7180f77..5ed4b2a43cf 100644 --- a/compiler/testData/codegen/box/defaultArguments/function/kt36188.kt +++ b/compiler/testData/codegen/box/defaultArguments/function/kt36188.kt @@ -1,5 +1,4 @@ // IGNORE_BACKEND: JS -// IGNORE_BACKEND_K2: ANY // 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 950be78a89b..e0bb2edad07 100644 --- a/compiler/testData/codegen/box/defaultArguments/function/kt36188_2.kt +++ b/compiler/testData/codegen/box/defaultArguments/function/kt36188_2.kt @@ -1,5 +1,4 @@ // IGNORE_BACKEND: JS -// IGNORE_BACKEND_K2: ANY // Test for KT-36188 bug compatibility between non-IR and IR backends diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.fir.kt b/compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.fir.kt index 3d32fe44823..646f648ff0b 100644 --- a/compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.fir.kt +++ b/compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.fir.kt @@ -17,10 +17,10 @@ interface B { fun foo(@An a: @An Int = @An 2) } -class AB1 : A, B +class AB1 : A, B @An class AB2 : A, B { @An - override fun foo(@An a: @An Int) {} + override fun foo(@An a: @An Int) {} } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt b/compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt new file mode 100644 index 00000000000..03ef21b5775 --- /dev/null +++ b/compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt @@ -0,0 +1,14 @@ +// FIR_IDENTICAL +// ISSUE: KT-61095 + +package org.example + +interface Base

{ + fun child(props: Int = 10) +} + +interface Intermediate

: Base

+ +class Implementation

() : Intermediate

, Base

{ + override fun child(props: Int) {} +} diff --git a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt new file mode 100644 index 00000000000..fe48226f0c2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt @@ -0,0 +1,16 @@ +// FIR_IDENTICAL +// 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.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.kt new file mode 100644 index 00000000000..a3df2c872b2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.kt @@ -0,0 +1,18 @@ +// FIR_IDENTICAL +// ISSUE: KT-36188 + +interface SomeRandomBase { + fun child(props: Int = 20) +} + +interface SomeRandomOverride : SomeRandomBase { + override fun child(props: Int) {} +} + +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/falseNegativeDuplicateDefaultValues3.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.kt new file mode 100644 index 00000000000..e7b003474d2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.kt @@ -0,0 +1,18 @@ +// FIR_IDENTICAL +// ISSUE: KT-36188 + +interface SomeRandomBase { + fun child(props: Int = 20) +} + +interface SomeRandomOverride : SomeRandomBase { + override abstract fun child(props: Int) +} + +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/multipleDefaultsNoSource.fir.kt b/compiler/testData/diagnostics/tests/multipleDefaultsNoSource.fir.kt new file mode 100644 index 00000000000..20e29e31c34 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multipleDefaultsNoSource.fir.kt @@ -0,0 +1,14 @@ +// ISSUE: KT-61095 + +interface X { + fun foo(a : Int = 1) {} +} + +interface Y { + fun foo(a : Int = 1) {} +} + +object YImpl : Y + +class Z1 : X, Y by YImpl {} +object Z1O : X, Y by YImpl {} diff --git a/compiler/testData/diagnostics/tests/multipleDefaultsNoSource.kt b/compiler/testData/diagnostics/tests/multipleDefaultsNoSource.kt new file mode 100644 index 00000000000..586234394f7 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multipleDefaultsNoSource.kt @@ -0,0 +1,14 @@ +// ISSUE: KT-61095 + +interface X { + fun foo(a : Int = 1) {} +} + +interface Y { + fun foo(a : Int = 1) {} +} + +object YImpl : Y + +class Z1 : X, Y by YImpl {} +object Z1O : X, Y by YImpl {} diff --git a/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypes.fir.kt b/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypes.fir.kt new file mode 100644 index 00000000000..4de8d35e241 --- /dev/null +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypes.fir.kt @@ -0,0 +1,15 @@ +interface X { + fun foo(a : Int = 1) +} + +interface Y { + fun foo(a : Int = 1) +} + +class Z : X, Y { + override fun foo(a : Int) {} +} + +object ZO : X, Y { + override fun foo(a : Int) {} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypes.kt b/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypes.kt index aabe3c64642..f6aa6986f7c 100644 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypes.kt +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypes.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL interface X { fun foo(a : Int = 1) } diff --git a/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypesNoOverride.fir.kt b/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypesNoOverride.fir.kt deleted file mode 100644 index f1de2a8d1aa..00000000000 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypesNoOverride.fir.kt +++ /dev/null @@ -1,15 +0,0 @@ -interface X { - fun foo(a : Int = 1) -} - -interface Y { - fun foo(a : Int = 1) -} - -class Z : X, Y { - fun foo(a : Int) {} -} - -object ZO : X, Y { - fun foo(a : Int) {} -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypesNoOverride.kt b/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypesNoOverride.kt index f7160d06304..fd03fbcc64d 100644 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypesNoOverride.kt +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypesNoOverride.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface X { fun foo(a : Int = 1) } diff --git a/compiler/testData/diagnostics/tests/override/MultipleDefaultsAndNamesInSupertypes.fir.kt b/compiler/testData/diagnostics/tests/override/MultipleDefaultsAndNamesInSupertypes.fir.kt index 775e199e75b..5a99fa791e6 100644 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultsAndNamesInSupertypes.fir.kt +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultsAndNamesInSupertypes.fir.kt @@ -11,4 +11,4 @@ interface C { } // TODO DIFFERENT_NAMES_FOR_THE_SAME_PARAMETER_IN_SUPERTYPES reported twice -class Z : A, B(), C +class Z : A, B(), C \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.fir.kt b/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.fir.kt new file mode 100644 index 00000000000..fb7b2d1e764 --- /dev/null +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.fir.kt @@ -0,0 +1,10 @@ +interface X { + fun foo(a : Int = 1) +} + +interface Y { + fun foo(a : Int = 1) +} + +class Z1 : X, Y {} // BUG +object Z1O : X, Y {} // BUG diff --git a/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.kt b/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.kt index 29379af071f..cf5ffb10eeb 100644 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.kt +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL interface X { fun foo(a : Int = 1) } 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 5fdd6a41f75..9b78b77a672 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 @@ -303,6 +303,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/Dollar.kt"); } + @Test + @TestMetadata("duplicateDirrectOverriddenCallables.kt") + public void testDuplicateDirrectOverriddenCallables() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt"); + } + @Test @TestMetadata("emptyLhsClassLiterals.kt") public void testEmptyLhsClassLiterals() throws Exception { @@ -345,6 +351,24 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/ExternalAndAbstract.kt"); } + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues1.kt") + public void testFalseNegativeDuplicateDefaultValues1() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt"); + } + + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues2.kt") + public void testFalseNegativeDuplicateDefaultValues2() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.kt"); + } + + @Test + @TestMetadata("falseNegativeDuplicateDefaultValues3.kt") + public void testFalseNegativeDuplicateDefaultValues3() throws Exception { + runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.kt"); + } + @Test @TestMetadata("fileDependencyRecursion.kt") public void testFileDependencyRecursion() throws Exception { @@ -729,6 +753,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt"); } + @Test + @TestMetadata("multipleDefaultsNoSource.kt") + public void testMultipleDefaultsNoSource() throws Exception { + runTest("compiler/testData/diagnostics/tests/multipleDefaultsNoSource.kt"); + } + @Test @TestMetadata("NamedFunctionTypeParameterInSupertype.kt") public void testNamedFunctionTypeParameterInSupertype() throws Exception {