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 6b2a81dbc18..7602dee9a47 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 @@ -2588,6 +2588,20 @@ 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 150f4d42941..b79285406f7 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 @@ -1839,6 +1839,16 @@ 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 efe071dda04..8ccb1b960c1 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 @@ -2209,6 +2209,18 @@ 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/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 019ca2bb104..deb74b0bcb8 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 @@ -882,6 +882,13 @@ 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 1d22faaad9c..2c7c391aa59 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 @@ -489,6 +489,8 @@ 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/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt index 3206b9c945e..70b0d040a79 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt @@ -323,6 +323,8 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set = setOf( "DATA_CLASS_OVERRIDE_DEFAULT_VALUES", "CANNOT_WEAKEN_ACCESS_PRIVILEGE", "CANNOT_CHANGE_ACCESS_PRIVILEGE", + "MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES", + "MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE", "TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS", "OVERRIDING_FINAL_MEMBER", "RETURN_TYPE_MISMATCH_ON_INHERITANCE", 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 9c8a54a99bb..0e70ce53b2b 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 @@ -131,6 +131,7 @@ object CommonDeclarationCheckers : DeclarationCheckers() { FirOuterClassArgumentsRequiredChecker, FirPropertyInitializationChecker, FirDelegateFieldTypeMismatchChecker, + FirMultipleDefaultsInheritedFromSupertypesChecker, FirFiniteBoundRestrictionChecker, ) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt index 9af4e3b828d..5a829ed82bf 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt @@ -28,11 +28,9 @@ import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider -import org.jetbrains.kotlin.fir.scopes.FirTypeScope -import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenFunctions +import org.jetbrains.kotlin.fir.scopes.* +import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope import org.jetbrains.kotlin.fir.scopes.impl.multipleDelegatesWithTheSameSignature -import org.jetbrains.kotlin.fir.scopes.overriddenFunctions -import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.SymbolInternals @@ -726,6 +724,33 @@ fun FirNamedFunctionSymbol.directOverriddenFunctions(session: FirSession, scopeS fun FirNamedFunctionSymbol.directOverriddenFunctions(context: CheckerContext) = directOverriddenFunctions(context.session, context.sessionHolder.scopeSession) +inline fun > FirNamedFunctionSymbol.collectOverriddenFunctionsWhere( + collection: C, + context: CheckerContext, + crossinline condition: (FirNamedFunctionSymbol) -> Boolean, +) = collection.apply { + processOverriddenFunctions(context) { + if (condition(it)) { + add(it) + } + } +} + +inline fun FirNamedFunctionSymbol.processOverriddenFunctions( + context: CheckerContext, + crossinline action: (FirNamedFunctionSymbol) -> Unit, +) { + val containingClass = getContainingClassSymbol(context.session) as? FirClassSymbol ?: return + val firTypeScope = containingClass.unsubstitutedScope(context) + + firTypeScope.processFunctionsByName(callableId.callableName) { } + + firTypeScope.processOverriddenFunctions(this) { + action(it) + ProcessorAction.NEXT + } +} + val CheckerContext.closestNonLocal get() = containingDeclarations.takeWhile { it.isNonLocal }.lastOrNull() fun CheckerContext.closestNonLocalWith(declaration: FirDeclaration) = 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 new file mode 100644 index 00000000000..d4f9489acd1 --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirMultipleDefaultsInheritedFromSupertypesChecker.kt @@ -0,0 +1,67 @@ +/* + * 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.collectOverriddenFunctionsWhere +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.containingClassLookupTag +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin +import org.jetbrains.kotlin.fir.declarations.FirRegularClass +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 + +object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecker() { + override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) { + declaration.unsubstitutedScope(context).processAllFunctions { + if (it.containingClassLookupTag() != declaration.symbol.toLookupTag()) { + return@processAllFunctions + } + + checkFunction(declaration, it, context, reporter) + } + } + + private fun checkFunction( + declaration: FirRegularClass, + function: FirNamedFunctionSymbol, + context: CheckerContext, + reporter: DiagnosticReporter, + ) { + val overriddenFunctions = function.collectOverriddenFunctionsWhere(mutableSetOf(), context) { overridden -> + // Substitution overrides copy default values from originals + !overridden.isSubstitutionOverride && overridden.valueParameterSymbols.any { it.hasDefaultValue } + } + val isExplicitOverride = function.origin == FirDeclarationOrigin.Source + + for ((index, parameter) in function.valueParameterSymbols.withIndex()) { + val basesWithDefaultValues = overriddenFunctions.count { it.valueParameterSymbols[index].hasDefaultValue } + + when { + basesWithDefaultValues <= 1 -> { + continue + } + !isExplicitOverride -> { + reporter.reportOn( + declaration.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE, + parameter, context, + ) + // Avoid duplicates + break + } + 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 2a505999b51..3cf57033c6d 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 @@ -367,6 +367,8 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MIXING_SUSPEND_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 @@ -1492,6 +1494,10 @@ 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 c93a0bf7c85..5befdb2679b 100644 --- a/compiler/testData/codegen/box/bridges/kt46389.kt +++ b/compiler/testData/codegen/box/bridges/kt46389.kt @@ -1,4 +1,6 @@ -// IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6 +// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6 +// IGNORE_BACKEND_K2: ANY +// STATUS: This must be red code anyway, KT-36188 // The code in this test should be prohibited in the frontend, see KT-36188. diff --git a/compiler/testData/codegen/box/bridges/kt46389_jvmDefault.kt b/compiler/testData/codegen/box/bridges/kt46389_jvmDefault.kt index 6cfebf67867..b0ff276453f 100644 --- a/compiler/testData/codegen/box/bridges/kt46389_jvmDefault.kt +++ b/compiler/testData/codegen/box/bridges/kt46389_jvmDefault.kt @@ -1,4 +1,6 @@ -// IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6 +// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6 +// IGNORE_BACKEND_K2: ANY +// STATUS: This must be red code anyway, KT-36188 // !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 5ed4b2a43cf..a343c768284 100644 --- a/compiler/testData/codegen/box/defaultArguments/function/kt36188.kt +++ b/compiler/testData/codegen/box/defaultArguments/function/kt36188.kt @@ -1,4 +1,6 @@ // 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 e0bb2edad07..20f91488640 100644 --- a/compiler/testData/codegen/box/defaultArguments/function/kt36188_2.kt +++ b/compiler/testData/codegen/box/defaultArguments/function/kt36188_2.kt @@ -1,4 +1,6 @@ // 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/annotations/rendering/multipleInheritedDefaults.fir.kt b/compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.fir.kt index 646f648ff0b..3d32fe44823 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/falseNegativeDuplicateDefaultValues1.fir.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.fir.kt new file mode 100644 index 00000000000..53f7e504e7b --- /dev/null +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.fir.kt @@ -0,0 +1,15 @@ +// 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/falseNegativeDuplicateDefaultValues1.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt index fe48226f0c2..88d2d6073a0 100644 --- a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // ISSUE: KT-36188 interface SomeRandomBase { diff --git a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.fir.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.fir.kt new file mode 100644 index 00000000000..bcbc3eb98fc --- /dev/null +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.fir.kt @@ -0,0 +1,17 @@ +// 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/falseNegativeDuplicateDefaultValues2.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.kt index a3df2c872b2..cb422eef183 100644 --- a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.kt +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues2.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // ISSUE: KT-36188 interface SomeRandomBase { diff --git a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.fir.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.fir.kt new file mode 100644 index 00000000000..4a89bb8f708 --- /dev/null +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.fir.kt @@ -0,0 +1,17 @@ +// 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/falseNegativeDuplicateDefaultValues3.kt b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.kt index e7b003474d2..1a2373dced6 100644 --- a/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.kt +++ b/compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues3.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // ISSUE: KT-36188 interface SomeRandomBase { diff --git a/compiler/testData/diagnostics/tests/multipleDefaultsNoSource.fir.kt b/compiler/testData/diagnostics/tests/multipleDefaultsNoSource.fir.kt index 20e29e31c34..8d98d8209a0 100644 --- a/compiler/testData/diagnostics/tests/multipleDefaultsNoSource.fir.kt +++ b/compiler/testData/diagnostics/tests/multipleDefaultsNoSource.fir.kt @@ -10,5 +10,5 @@ interface Y { object YImpl : Y -class Z1 : X, Y by YImpl {} -object Z1O : X, Y by YImpl {} +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 deleted file mode 100644 index 4de8d35e241..00000000000 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypes.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 { - 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 f6aa6986f7c..aabe3c64642 100644 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypes.kt +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypes.kt @@ -1,3 +1,4 @@ +// 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 new file mode 100644 index 00000000000..f1de2a8d1aa --- /dev/null +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypesNoOverride.fir.kt @@ -0,0 +1,15 @@ +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 fd03fbcc64d..f7160d06304 100644 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypesNoOverride.kt +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultParametersInSupertypesNoOverride.kt @@ -1,4 +1,3 @@ -// 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 5a99fa791e6..775e199e75b 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 \ No newline at end of file +class Z : A, B(), C diff --git a/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.fir.kt b/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.fir.kt deleted file mode 100644 index fb7b2d1e764..00000000000 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.fir.kt +++ /dev/null @@ -1,10 +0,0 @@ -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 cf5ffb10eeb..29379af071f 100644 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.kt +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface X { fun foo(a : Int = 1) }