From e42c1be35455315b7ba8ac4ddfd5fd2125709e0a Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 23 Nov 2023 11:22:16 +0100 Subject: [PATCH] K2: use intersection scope override checker also in intersection scope In more details, we use either platform override checker (if we came from platform) or the combined intersection scope override checker at this place. Also this commit fixes various places around JavaOverrideChecker, allowing to apply it in intersection override checker properly: - don't consider return types in this place - apply JavaOverrideChecker if at least one candidate is from Java - compare type primitivity closer to K1 logic #KT-62554 Fixed Partially fixes KT-63242 --- .../scopes/JavaClassUseSiteMemberScope.kt | 1 + .../java/scopes/JavaOverridabilityRules.kt | 34 +++++++--- .../fir/java/scopes/JavaOverrideChecker.kt | 62 ++++++++++++++----- .../impl/AbstractFirUseSiteMemberScope.kt | 13 ++-- .../scopes/impl/FirClassUseSiteMemberScope.kt | 6 ++ .../primitiveDoubleJavaKotlinIntersection.kt | 1 - .../triangleWithFlexibleType.fir.kt | 20 ------ ...triangleWithFlexibleType.fir.overrides.txt | 4 -- .../triangleWithFlexibleType.fir.txt | 2 +- .../triangleWithFlexibleType.kt | 1 + .../triangleWithFlexibleType.overrides.txt | 6 ++ ...ngleWithFlexibleTypeAndSubstitution.fir.kt | 24 ------- ...xibleTypeAndSubstitution.fir.overrides.txt | 6 -- ...triangleWithFlexibleTypeAndSubstitution.kt | 1 + ...hFlexibleTypeAndSubstitution.overrides.txt | 7 +++ ...gleWithFlexibleTypeAndSubstitution2.fir.kt | 26 -------- ...ibleTypeAndSubstitution2.fir.overrides.txt | 6 -- ...riangleWithFlexibleTypeAndSubstitution2.kt | 1 + ...FlexibleTypeAndSubstitution2.overrides.txt | 7 +++ ...gleWithFlexibleTypeAndSubstitution3.fir.kt | 24 ------- ...ibleTypeAndSubstitution3.fir.overrides.txt | 6 -- ...riangleWithFlexibleTypeAndSubstitution3.kt | 1 + ...FlexibleTypeAndSubstitution3.overrides.txt | 7 +++ ...gleWithFlexibleTypeAndSubstitution4.fir.kt | 2 + ...riangleWithFlexibleTypeAndSubstitution4.kt | 2 + ...gleWithFlexibleTypeAndSubstitution5.fir.kt | 24 ------- ...leWithFlexibleTypeAndSubstitution5.fir.txt | 2 +- ...riangleWithFlexibleTypeAndSubstitution5.kt | 1 + ...lexibleTypeAndSubstitution5.overrides.txt} | 11 ++-- .../triangleWithNotNullType.fir.kt | 22 ------- .../triangleWithNotNullType.fir.overrides.txt | 4 -- .../triangleWithNotNullType.fir.txt | 2 +- .../triangleWithNotNullType.kt | 1 + .../triangleWithNotNullType.overrides.txt | 6 ++ ...tersectionOfPrimitiveBasedFunctions.fir.kt | 2 +- 35 files changed, 141 insertions(+), 204 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.overrides.txt create mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.overrides.txt delete mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.fir.overrides.txt create mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.overrides.txt delete mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.fir.overrides.txt create mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.overrides.txt delete mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.fir.overrides.txt create mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.overrides.txt delete mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.fir.kt rename compiler/testData/diagnostics/tests/j+k/primitiveOverrides/{triangleWithFlexibleTypeAndSubstitution5.fir.overrides.txt => triangleWithFlexibleTypeAndSubstitution5.overrides.txt} (50%) delete mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.overrides.txt create mode 100644 compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.overrides.txt diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt index e727a03bf78..66029ad14c9 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt @@ -58,6 +58,7 @@ class JavaClassUseSiteMemberScope( klass.symbol.toLookupTag(), session, JavaOverrideChecker(session, klass.javaTypeParameterStack, superTypeScopes, considerReturnTypeKinds = true), + overrideCheckerForIntersection = null, superTypeScopes, klass.defaultType(), declaredMemberScope diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverridabilityRules.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverridabilityRules.kt index d169bd69ff9..68b359f6cec 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverridabilityRules.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverridabilityRules.kt @@ -15,20 +15,38 @@ import org.jetbrains.kotlin.fir.scopes.PlatformSpecificOverridabilityRules import org.jetbrains.kotlin.fir.unwrapFakeOverrides class JavaOverridabilityRules(session: FirSession) : PlatformSpecificOverridabilityRules { + // Note: return types (considerReturnTypeKinds) look not important when attempting intersection + // From the other side, they can break relevant tests like intersectionWithJavaVoidNothing.kt + // The similar case exists in bootstrap (see IrSimpleBuiltinOperatorDescriptorImpl) private val javaOverrideChecker = - JavaOverrideChecker(session, JavaTypeParameterStack.EMPTY, baseScopes = null, considerReturnTypeKinds = true) + JavaOverrideChecker(session, JavaTypeParameterStack.EMPTY, baseScopes = null, considerReturnTypeKinds = false) override fun isOverriddenFunction(overrideCandidate: FirSimpleFunction, baseDeclaration: FirSimpleFunction): Boolean? { - if (!overrideCandidate.isFromJava() || !baseDeclaration.isFromJava()) return null - - return javaOverrideChecker.isOverriddenFunction(overrideCandidate, baseDeclaration) + return if (shouldApplyJavaChecker(overrideCandidate, baseDeclaration)) { + // takeIf is questionable here (JavaOverrideChecker can forbid overriding, but it cannot allow it on own behalf) + // Known influenced tests: supertypeDifferentParameterNullability.kt became partially green without it + javaOverrideChecker.isOverriddenFunction(overrideCandidate, baseDeclaration).takeIf { !it } + } else { + null + } } override fun isOverriddenProperty(overrideCandidate: FirCallableDeclaration, baseDeclaration: FirProperty): Boolean? { - if (!overrideCandidate.isFromJava() || !baseDeclaration.isFromJava()) return null - - return javaOverrideChecker.isOverriddenProperty(overrideCandidate, baseDeclaration) + return if (shouldApplyJavaChecker(overrideCandidate, baseDeclaration)) { + javaOverrideChecker.isOverriddenProperty(overrideCandidate, baseDeclaration) + } else { + null + } } - private fun FirCallableDeclaration.isFromJava(): Boolean = unwrapFakeOverrides().origin == FirDeclarationOrigin.Enhancement + private fun shouldApplyJavaChecker(overrideCandidate: FirCallableDeclaration, baseDeclaration: FirCallableDeclaration): Boolean { + return when { + // One candidate with Java original is enough to apply Java checker, + // otherwise e.g. primitive type comparisons do not work + overrideCandidate.isOriginallyFromJava() || baseDeclaration.isOriginallyFromJava() -> true + else -> false + } + } + + private fun FirCallableDeclaration.isOriginallyFromJava(): Boolean = unwrapFakeOverrides().origin == FirDeclarationOrigin.Enhancement } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt index 3d4a2934e0f..2ccecf52103 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmDescriptorRepresentation import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.fir.unwrapFakeOverrides import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment @@ -80,6 +81,7 @@ class JavaOverrideChecker internal constructor( substitutor: ConeSubstitutor, forceBoxCandidateType: Boolean, forceBoxBaseType: Boolean, + dontComparePrimitivity: Boolean, ): Boolean { val candidateType = candidateTypeRef.toConeKotlinTypeProbablyFlexible(session, javaTypeParameterStack) val baseType = baseTypeRef.toConeKotlinTypeProbablyFlexible(session, javaTypeParameterStack) @@ -87,7 +89,8 @@ class JavaOverrideChecker internal constructor( val candidateTypeIsPrimitive = !forceBoxCandidateType && candidateType.isPrimitiveInJava(isReturnType = false) val baseTypeIsPrimitive = !forceBoxBaseType && baseType.isPrimitiveInJava(isReturnType = false) - return candidateTypeIsPrimitive == baseTypeIsPrimitive && isEqualTypes(candidateType, baseType, substitutor) + return (dontComparePrimitivity || candidateTypeIsPrimitive == baseTypeIsPrimitive) && + isEqualTypes(candidateType, baseType, substitutor) } // In most cases checking erasure of value parameters should be enough, but in some cases there might be semi-valid Java hierarchies @@ -234,19 +237,7 @@ class JavaOverrideChecker internal constructor( overrideCandidate.lazyResolveToPhase(FirResolvePhase.TYPES) baseDeclaration.lazyResolveToPhase(FirResolvePhase.TYPES) - // NB: overrideCandidate is from Java and has no receiver - val receiverTypeRef = baseDeclaration.receiverParameter?.typeRef - val baseParameterTypes = listOfNotNull(receiverTypeRef) + baseDeclaration.valueParameters.map { it.returnTypeRef } - - if (overrideCandidate.valueParameters.size != baseParameterTypes.size) return false - val substitutor = buildTypeParametersSubstitutorIfCompatible(overrideCandidate, baseDeclaration) - - val forceBoxOverrideParameterType = forceSingleValueParameterBoxing(overrideCandidate) - val forceBoxBaseParameterType = forceSingleValueParameterBoxing(baseDeclaration) - - if (!overrideCandidate.valueParameters.zip(baseParameterTypes).all { (paramFromJava, baseType) -> - isEqualTypes(paramFromJava.returnTypeRef, baseType, substitutor, forceBoxOverrideParameterType, forceBoxBaseParameterType) - }) { + if (!overrideCandidate.hasSameValueParameterTypes(baseDeclaration)) { return false } @@ -266,6 +257,43 @@ class JavaOverrideChecker internal constructor( return true } + private fun FirSimpleFunction.hasSameValueParameterTypes(other: FirSimpleFunction): Boolean { + // NB: 'this' is counted as a Java method that cannot have a receiver + val otherValueParameterTypes = other.collectValueParameterTypes() + val valueParameterTypes = valueParameters.map { it.returnTypeRef } + if (valueParameterTypes.size != otherValueParameterTypes.size) return false + + val substitutor = buildTypeParametersSubstitutorIfCompatible(this, other) + val forceBoxValueParameterType = forceSingleValueParameterBoxing(this) + val forceBoxOtherValueParameterType = forceSingleValueParameterBoxing(other) + val otherUnwrappedValueParameterTypes = other.unwrapFakeOverrides().collectValueParameterTypes() + val unwrappedValueParameterTypes = unwrapFakeOverrides().valueParameters.map { it.returnTypeRef } + + for (i in valueParameterTypes.indices) { + if (!isEqualTypes( + candidateTypeRef = valueParameterTypes[i], + baseTypeRef = otherValueParameterTypes[i], + substitutor = substitutor, + forceBoxCandidateType = forceBoxValueParameterType, + forceBoxBaseType = forceBoxOtherValueParameterType, + // This very hacky place is needed to match K1 logic + // See triangleWithFlexibleTypeAndSubstitution4.kt and neighbor tests + // The idea: normally in Java primitive type does not match non-primitive one + // However, if *both* types were constructed as generic substitutions, + // this check can (and should) be omitted + dontComparePrimitivity = otherUnwrappedValueParameterTypes.getOrNull(i)?.isTypeParameterDependent() == true && + unwrappedValueParameterTypes.getOrNull(i)?.isTypeParameterDependent() == true, + ) + ) return false + } + return true + } + + private fun FirSimpleFunction.collectValueParameterTypes(): List { + val receiverTypeRef = receiverParameter?.typeRef + return listOfNotNull(receiverTypeRef) + valueParameters.map { it.returnTypeRef } + } + override fun isOverriddenProperty(overrideCandidate: FirCallableDeclaration, baseDeclaration: FirProperty): Boolean { if (baseDeclaration.modality == Modality.FINAL) return false @@ -282,7 +310,8 @@ class JavaOverrideChecker internal constructor( if (overrideCandidate.valueParameters.size != 1) return false return isEqualTypes( receiverTypeRef, overrideCandidate.valueParameters.single().returnTypeRef, ConeSubstitutor.Empty, - forceBoxCandidateType = false, forceBoxBaseType = false + forceBoxCandidateType = false, forceBoxBaseType = false, + dontComparePrimitivity = false, ) } } @@ -293,7 +322,8 @@ class JavaOverrideChecker internal constructor( overrideReceiverTypeRef == null -> false else -> isEqualTypes( receiverTypeRef, overrideReceiverTypeRef, ConeSubstitutor.Empty, - forceBoxCandidateType = false, forceBoxBaseType = false + forceBoxCandidateType = false, forceBoxBaseType = false, + dontComparePrimitivity = false, ) } } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt index 2aff19d2cb8..b7bcc4043cf 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt @@ -18,13 +18,18 @@ import org.jetbrains.kotlin.name.Name abstract class AbstractFirUseSiteMemberScope( val ownerClassLookupTag: ConeClassLikeLookupTag, session: FirSession, - overrideChecker: FirOverrideChecker, + overrideCheckerForBaseClass: FirOverrideChecker, + // null means "use overrideCheckerForBaseClass" + overrideCheckerForIntersection: FirOverrideChecker?, protected val superTypeScopes: List, dispatchReceiverType: ConeSimpleKotlinType, protected val declaredMemberScope: FirContainingNamesAwareScope -) : AbstractFirOverrideScope(session, overrideChecker) { - protected val supertypeScopeContext = - FirTypeIntersectionScopeContext(session, overrideChecker, superTypeScopes, dispatchReceiverType, forClassUseSiteScope = true) +) : AbstractFirOverrideScope(session, overrideCheckerForBaseClass) { + protected val supertypeScopeContext = FirTypeIntersectionScopeContext( + session, + overrideCheckerForIntersection ?: overrideCheckerForBaseClass, + superTypeScopes, dispatchReceiverType, forClassUseSiteScope = true + ) private val functions: MutableMap> = hashMapOf() diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt index 7adef0cfa04..1292d9e4b42 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.utils.isStatic import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope +import org.jetbrains.kotlin.fir.scopes.FirIntersectionScopeOverrideChecker import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.scopes.firOverrideChecker import org.jetbrains.kotlin.fir.symbols.impl.* @@ -24,6 +25,11 @@ class FirClassUseSiteMemberScope( klass.symbol.toLookupTag(), session, session.firOverrideChecker, + // The checker here is used for matching supertype intersections + // If we came here from platform (e.g. Native), we use a platform override checker + // JavaClassUseSiteMemberScope also uses its own JavaOverrideChecker here + // Otherwise we should use a special intersection checker (similar one is used in FirTypeIntersectionScope) + session.firOverrideChecker.takeIf { it !is FirStandardOverrideChecker } ?: FirIntersectionScopeOverrideChecker(session), superTypeScopes, klass.defaultType(), declaredMemberScope diff --git a/compiler/testData/codegen/box/fir/primitiveDoubleJavaKotlinIntersection.kt b/compiler/testData/codegen/box/fir/primitiveDoubleJavaKotlinIntersection.kt index 61fd54c2679..36b8b307480 100644 --- a/compiler/testData/codegen/box/fir/primitiveDoubleJavaKotlinIntersection.kt +++ b/compiler/testData/codegen/box/fir/primitiveDoubleJavaKotlinIntersection.kt @@ -1,5 +1,4 @@ // TARGET_BACKEND: JVM_IR -// IGNORE_BACKEND_K2: JVM_IR // IGNORE_LIGHT_ANALYSIS // (Unresolved reference: B supertype in C declaration) // ISSUE: KT-63242 diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.kt deleted file mode 100644 index 21294c9a4ed..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.kt +++ /dev/null @@ -1,20 +0,0 @@ -// ISSUE: KT-62554 -// FIR_DUMP -// SCOPE_DUMP: C:foo -// FILE: A.java - -public class A { - public void foo(Integer x) {} -} - -// FILE: main.kt - -interface B { - fun foo(x: Int) {} -} - -class C : A(), B - -fun main() { - C().foo(42) -} diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.overrides.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.overrides.txt deleted file mode 100644 index dc1e11d9954..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.overrides.txt +++ /dev/null @@ -1,4 +0,0 @@ -C: - [IntersectionOverride]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/Unit| from Use site scope of /C [id: 0] - [Enhancement]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/Unit| from Java enhancement scope for /A [id: 1] - [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| from Use site scope of /B [id: 2] diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.txt index a2dba251a7b..a948d0f17c3 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.txt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.fir.txt @@ -11,5 +11,5 @@ FILE: main.kt } public final fun main(): R|kotlin/Unit| { - R|/C.C|().R|/A.foo|(Int(42)) + R|/C.C|().R|/B.foo|(Int(42)) } diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.kt index c4252edc76b..db22852a22a 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.kt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ISSUE: KT-62554 // FIR_DUMP // SCOPE_DUMP: C:foo diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.overrides.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.overrides.txt new file mode 100644 index 00000000000..80fc9643069 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleType.overrides.txt @@ -0,0 +1,6 @@ +C: + [Enhancement]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/Unit| from Use site scope of /C [id: 0] + [Enhancement]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/Unit| from Java enhancement scope for /A [id: 0] + [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| from Use site scope of /C [id: 0] + [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| from Use site scope of /B [id: 0] + diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.fir.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.fir.kt deleted file mode 100644 index 9c60f71b716..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.fir.kt +++ /dev/null @@ -1,24 +0,0 @@ -// ISSUE: KT-62554 -// FIR_DUMP -// SCOPE_DUMP: D:foo -// FILE: A.java - -public class A { - public T foo(Integer x) { - return "A"; - } -} - -// FILE: main.kt - -interface B { - fun foo(x: Int) = "B" -} - -open class C : A() - -class D : C(), B - -fun main() { - D().foo(42) -} diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.fir.overrides.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.fir.overrides.txt deleted file mode 100644 index 9dc45a0d090..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.fir.overrides.txt +++ /dev/null @@ -1,6 +0,0 @@ -D: - [IntersectionOverride]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 0] - [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /C [id: 1] - [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 1] - [Enhancement]: public open fun foo(x: R|kotlin/Int!|): R|ft| from Java enhancement scope for /A [id: 2] - [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /B [id: 3] diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.kt index d29d88a44a6..6ca406a6a60 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.kt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ISSUE: KT-62554 // FIR_DUMP // SCOPE_DUMP: D:foo diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.overrides.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.overrides.txt new file mode 100644 index 00000000000..9d417d74cc2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution.overrides.txt @@ -0,0 +1,7 @@ +D: + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /D [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /C [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 0] + [Enhancement]: public open fun foo(x: R|kotlin/Int!|): R|ft| from Java enhancement scope for /A [id: 1] + [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 0] + [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /B [id: 0] diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.fir.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.fir.kt deleted file mode 100644 index 8616b3bf4d9..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.fir.kt +++ /dev/null @@ -1,26 +0,0 @@ -// ISSUE: KT-62554 -// FIR_DUMP -// SCOPE_DUMP: D:foo -// FILE: A.java - -public class A { - public String foo(T x) { - return "A"; - } -} - -// FILE: C.java - -public class C extends A {} - -// FILE: main.kt - -interface B { - fun foo(x: Int) = "B" -} - -class D : C(), B - -fun main() { - D().foo(42) -} diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.fir.overrides.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.fir.overrides.txt deleted file mode 100644 index 03ac63a8ec5..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.fir.overrides.txt +++ /dev/null @@ -1,6 +0,0 @@ -D: - [IntersectionOverride]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 0] - [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Java enhancement scope for /C [id: 1] - [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 1] - [Enhancement]: public open fun foo(x: R|ft|): R|kotlin/String!| from Java enhancement scope for /A [id: 2] - [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /B [id: 3] diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.kt index 4c4afbe5811..f4e66103111 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.kt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ISSUE: KT-62554 // FIR_DUMP // SCOPE_DUMP: D:foo diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.overrides.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.overrides.txt new file mode 100644 index 00000000000..2920d59874c --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution2.overrides.txt @@ -0,0 +1,7 @@ +D: + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /D [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Java enhancement scope for /C [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 0] + [Enhancement]: public open fun foo(x: R|ft|): R|kotlin/String!| from Java enhancement scope for /A [id: 1] + [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 0] + [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /B [id: 0] diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.fir.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.fir.kt deleted file mode 100644 index 65565a2e7ef..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.fir.kt +++ /dev/null @@ -1,24 +0,0 @@ -// ISSUE: KT-62554 -// FIR_DUMP -// SCOPE_DUMP: D:foo -// FILE: A.java - -public class A { - public String foo(T x) { - return "A"; - } -} - -// FILE: main.kt - -interface B { - fun foo(x: Int) = "B" -} - -open class C : A() - -class D : C(), B - -fun main() { - D().foo(42) -} diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.fir.overrides.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.fir.overrides.txt deleted file mode 100644 index 8362c8e0a83..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.fir.overrides.txt +++ /dev/null @@ -1,6 +0,0 @@ -D: - [IntersectionOverride]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 0] - [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /C [id: 1] - [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 1] - [Enhancement]: public open fun foo(x: R|ft|): R|kotlin/String!| from Java enhancement scope for /A [id: 2] - [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /B [id: 3] diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.kt index a67932ec7dd..23f4112e09f 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.kt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ISSUE: KT-62554 // FIR_DUMP // SCOPE_DUMP: D:foo diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.overrides.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.overrides.txt new file mode 100644 index 00000000000..c862b4b9ae3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution3.overrides.txt @@ -0,0 +1,7 @@ +D: + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /D [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /C [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 0] + [Enhancement]: public open fun foo(x: R|ft|): R|kotlin/String!| from Java enhancement scope for /A [id: 1] + [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 0] + [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /B [id: 0] diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.fir.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.fir.kt index 6f7d5573d1f..fffdc059ad7 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.fir.kt @@ -1,6 +1,8 @@ // ISSUE: KT-62554 // FIR_DUMP // SCOPE_DUMP: E:foo +// IGNORE_REVERSED_RESOLVE +// ^ resolves to C.foo instead of D.foo for some reason, does not seem important // FILE: A.java public class A { diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.kt index 4620973f07e..0ad3bb19a39 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.kt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.kt @@ -1,6 +1,8 @@ // ISSUE: KT-62554 // FIR_DUMP // SCOPE_DUMP: E:foo +// IGNORE_REVERSED_RESOLVE +// ^ resolves to C.foo instead of D.foo for some reason, does not seem important // FILE: A.java public class A { diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.fir.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.fir.kt deleted file mode 100644 index c0b28d50bc3..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.fir.kt +++ /dev/null @@ -1,24 +0,0 @@ -// ISSUE: KT-62554 -// FIR_DUMP -// SCOPE_DUMP: E:foo -// FILE: A.java - -public class A { - public String foo(Integer x) { - return "A"; - } -} - -// FILE: main.kt - -interface B { - fun foo(x: T) = "B" -} - -interface D : B - -class E : A(), D - -fun main() { - E().foo(42) -} diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.fir.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.fir.txt index fbb64aa8ccb..8fb10012967 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.fir.txt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.fir.txt @@ -14,5 +14,5 @@ FILE: main.kt } public final fun main(): R|kotlin/Unit| { - R|/E.E|().R|/D.foo|(Int(42)) + R|/E.E|().R|SubstitutionOverride|(Int(42)) } diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.kt index 4372f47134b..17c91c3bf58 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.kt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ISSUE: KT-62554 // FIR_DUMP // SCOPE_DUMP: E:foo diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.fir.overrides.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.overrides.txt similarity index 50% rename from compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.fir.overrides.txt rename to compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.overrides.txt index dd4ae94000a..104fb33d46f 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.fir.overrides.txt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution5.overrides.txt @@ -1,6 +1,7 @@ E: - [IntersectionOverride]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /E [id: 0] - [Enhancement]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Java enhancement scope for /A [id: 1] - [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 2] - [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Substitution scope for [Use site scope of /B] for type D [id: 2] - [Source]: public open fun foo(x: R|T|): R|kotlin/String| from Use site scope of /B [id: 3] + [Enhancement]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /E [id: 0] + [Enhancement]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Java enhancement scope for /A [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /E [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 0] + [SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Substitution scope for [Use site scope of /B] for type D [id: 0] + [Source]: public open fun foo(x: R|T|): R|kotlin/String| from Use site scope of /B [id: 1] diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.kt deleted file mode 100644 index 50f5339d979..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.kt +++ /dev/null @@ -1,22 +0,0 @@ -// ISSUE: KT-62554 -// FIR_DUMP -// SCOPE_DUMP: C:foo -// FILE: A.java - -import org.jetbrains.annotations.*; - -public class A { - public void foo(@NotNull Integer x) {} -} - -// FILE: main.kt - -interface B { - fun foo(x: Int) {} -} - -class C : A(), B - -fun main() { - C().foo(42) -} diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.overrides.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.overrides.txt deleted file mode 100644 index 159d788638d..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.overrides.txt +++ /dev/null @@ -1,4 +0,0 @@ -C: - [IntersectionOverride]: public open fun foo(x: R|@EnhancedNullability kotlin/Int|): R|kotlin/Unit| from Use site scope of /C [id: 0] - [Enhancement]: public open fun foo(x: R|@EnhancedNullability kotlin/Int|): R|kotlin/Unit| from Java enhancement scope for /A [id: 1] - [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| from Use site scope of /B [id: 2] diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.txt index a2dba251a7b..0dbba96915a 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.txt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.fir.txt @@ -11,5 +11,5 @@ FILE: main.kt } public final fun main(): R|kotlin/Unit| { - R|/C.C|().R|/A.foo|(Int(42)) + R|/C.C|().#(Int(42)) } diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.kt index d7ee3ce6983..d29829db599 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.kt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ISSUE: KT-62554 // FIR_DUMP // SCOPE_DUMP: C:foo diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.overrides.txt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.overrides.txt new file mode 100644 index 00000000000..1c0780e10a5 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithNotNullType.overrides.txt @@ -0,0 +1,6 @@ +C: + [Enhancement]: public open fun foo(x: R|@EnhancedNullability kotlin/Int|): R|kotlin/Unit| from Use site scope of /C [id: 0] + [Enhancement]: public open fun foo(x: R|@EnhancedNullability kotlin/Int|): R|kotlin/Unit| from Java enhancement scope for /A [id: 0] + [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| from Use site scope of /C [id: 0] + [Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| from Use site scope of /B [id: 0] + diff --git a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/intersectionOfPrimitiveBasedFunctions.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/intersectionOfPrimitiveBasedFunctions.fir.kt index 67cb673516a..a883f19e03f 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/intersectionOfPrimitiveBasedFunctions.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/intersectionOfPrimitiveBasedFunctions.fir.kt @@ -8,7 +8,7 @@ interface II { fun replace(key: Int, value: Int): Int? = null } -abstract class ZI : MyMap(), II +abstract class ZI : MyMap(), II interface IS { fun replace(key: String, value: String): String? = null