From dc9ed5656eda82b84635679c1b58970105c920d8 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Thu, 10 Aug 2023 08:23:00 +0300 Subject: [PATCH] [FIR] Revert FirMultipleDefaultsInheritedFromSupertypesChecker It's possible to write a fix that would prevent false positives with this checker, but the core intuition behind it is invalid. This checker assumes that it's enough to only check direct overriddens, while in reality even simple `Source` override functions are not allowed to contain default values, so they can't be used to make judgements about them. ^KT-59408 Open ^KT-59408 Open ^KT-61095 Fixed ^KT-61165 Fixed ^KT-61029 Fixed --- .../diagnostics/KtFirDataClassConverters.kt | 14 ----- .../api/fir/diagnostics/KtFirDiagnostics.kt | 10 ---- .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 12 ---- ...CompilerTestFE10TestdataTestGenerated.java | 30 ++++++++++ ...sticCompilerFE10TestDataTestGenerated.java | 30 ++++++++++ ...eeOldFrontendDiagnosticsTestGenerated.java | 30 ++++++++++ ...siOldFrontendDiagnosticsTestGenerated.java | 30 ++++++++++ .../diagnostics/FirDiagnosticsList.kt | 7 --- .../fir/analysis/diagnostics/FirErrors.kt | 2 - .../checkers/CommonDeclarationCheckers.kt | 1 - ...eDefaultsInheritedFromSupertypesChecker.kt | 60 ------------------- .../diagnostics/FirErrorsDefaultMessages.kt | 6 -- .../testData/codegen/box/bridges/kt46389.kt | 3 +- .../codegen/box/bridges/kt46389_jvmDefault.kt | 3 +- .../box/defaultArguments/function/kt36188.kt | 1 - .../defaultArguments/function/kt36188_2.kt | 1 - .../multipleInheritedDefaults.fir.kt | 4 +- .../duplicateDirrectOverriddenCallables.kt | 14 +++++ .../falseNegativeDuplicateDefaultValues1.kt | 16 +++++ .../falseNegativeDuplicateDefaultValues2.kt | 18 ++++++ .../falseNegativeDuplicateDefaultValues3.kt | 18 ++++++ .../tests/multipleDefaultsNoSource.fir.kt | 14 +++++ .../tests/multipleDefaultsNoSource.kt | 14 +++++ ...ltipleDefaultParametersInSupertypes.fir.kt | 15 +++++ .../MultipleDefaultParametersInSupertypes.kt | 1 - ...ultParametersInSupertypesNoOverride.fir.kt | 15 ----- ...DefaultParametersInSupertypesNoOverride.kt | 1 + ...ultipleDefaultsAndNamesInSupertypes.fir.kt | 2 +- ...aultsInSupertypesNoExplicitOverride.fir.kt | 10 ++++ ...eDefaultsInSupertypesNoExplicitOverride.kt | 1 - .../test/runners/DiagnosticTestGenerated.java | 30 ++++++++++ 31 files changed, 275 insertions(+), 138 deletions(-) delete mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirMultipleDefaultsInheritedFromSupertypesChecker.kt create mode 100644 compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt create mode 100644 compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt create mode 100644 compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.kt create mode 100644 compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.kt create mode 100644 compiler/testData/diagnostics/tests/multipleDefaultsNoSource.fir.kt create mode 100644 compiler/testData/diagnostics/tests/multipleDefaultsNoSource.kt create mode 100644 compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypes.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypesNoOverride.fir.kt create mode 100644 compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.fir.kt 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 {