[FIR] Unwrap substitution overrides for multiple default values

Otherwise, duplicate diagnostics may be reported on
subtypes of the type that actually declares the
problematic override.
This commit is contained in:
Nikolay Lunyak
2023-09-18 13:18:01 +03:00
committed by Space Team
parent 76fa812949
commit 2801db0e59
3 changed files with 6 additions and 17 deletions
@@ -20,16 +20,19 @@ import org.jetbrains.kotlin.fir.isSubstitutionOverride
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.unwrapSubstitutionOverrides
import org.jetbrains.kotlin.name.Name
object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecker() {
override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) {
declaration.unsubstitutedScope(context).processAllFunctions {
if (it.containingClassLookupTag() != declaration.symbol.toLookupTag()) {
val originalIfSubstitutionOverride = it.unwrapSubstitutionOverrides()
if (originalIfSubstitutionOverride.containingClassLookupTag() != declaration.symbol.toLookupTag()) {
return@processAllFunctions
}
checkFunction(declaration, it, context, reporter)
checkFunction(declaration, originalIfSubstitutionOverride, context, reporter)
}
}
@@ -1,15 +0,0 @@
interface A<T> {
fun foo(x: Int = 42): Int
}
open class B<K> {
fun foo(x: Int = 239) = x
}
interface C<E> {
fun foo(x: Int): Int
}
open <!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE!>class Z<!><R> : A<R>, B<R>(), C<R>
<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION_WARNING!>class N<!><W> : Z<W>()
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
interface A<T> {
fun foo(x: Int = 42): Int
}