diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java index 0dff6c2b704..6a59a99044b 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java @@ -19298,6 +19298,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("javaInheritsKotlinIntersectionOverride.kt") + public void testJavaInheritsKotlinIntersectionOverride() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt"); + } + @Test @TestMetadata("kjkWithPackagePrivate.kt") public void testKjkWithPackagePrivate() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java index beb723692bd..96d27ad410d 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java @@ -19298,6 +19298,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("javaInheritsKotlinIntersectionOverride.kt") + public void testJavaInheritsKotlinIntersectionOverride() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt"); + } + @Test @TestMetadata("kjkWithPackagePrivate.kt") public void testKjkWithPackagePrivate() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index c4f2e9d8144..25adfb94122 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -19287,6 +19287,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("javaInheritsKotlinIntersectionOverride.kt") + public void testJavaInheritsKotlinIntersectionOverride() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt"); + } + @Test @TestMetadata("kjkWithPackagePrivate.kt") public void testKjkWithPackagePrivate() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java index 24a7aba4f8b..57101ddcecb 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java @@ -19287,6 +19287,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("javaInheritsKotlinIntersectionOverride.kt") + public void testJavaInheritsKotlinIntersectionOverride() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt"); + } + @Test @TestMetadata("kjkWithPackagePrivate.kt") public void testKjkWithPackagePrivate() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index 8d9fd1d7506..feea7086096 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -19287,6 +19287,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("javaInheritsKotlinIntersectionOverride.kt") + public void testJavaInheritsKotlinIntersectionOverride() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt"); + } + @Test @TestMetadata("kjkWithPackagePrivate.kt") public void testKjkWithPackagePrivate() throws Exception { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt index a9583ae346b..152f14b28fd 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt @@ -162,26 +162,18 @@ class FirSignatureEnhancement( is FirSyntheticProperty -> { val accessorSymbol = firElement.symbol val getterDelegate = firElement.getter.delegate - val enhancedGetterSymbol = if (getterDelegate.isJava) { - enhancementsCache.enhancedFunctions.getValue(getterDelegate.symbol, this to getterDelegate.name) - } else { - getterDelegate.symbol - } + val enhancedGetterSymbol = getterDelegate.enhanceAccessorOrNull() val setterDelegate = firElement.setter?.delegate - val enhancedSetterSymbol = if (setterDelegate?.isJava == true) { - enhancementsCache.enhancedFunctions.getValue(setterDelegate.symbol, this to setterDelegate.name) - } else { - setterDelegate?.symbol - } - if (!getterDelegate.isJava && setterDelegate?.isJava != true) { + val enhancedSetterSymbol = setterDelegate?.enhanceAccessorOrNull() + if (enhancedGetterSymbol == null && enhancedSetterSymbol == null) { return original } return buildSyntheticProperty { moduleData = this@FirSignatureEnhancement.moduleData this.name = name symbol = FirJavaOverriddenSyntheticPropertySymbol(accessorSymbol.callableId, accessorSymbol.getterId) - delegateGetter = enhancedGetterSymbol.fir as FirSimpleFunction - delegateSetter = enhancedSetterSymbol?.fir as FirSimpleFunction? + delegateGetter = enhancedGetterSymbol?.fir as FirSimpleFunction? ?: getterDelegate + delegateSetter = enhancedSetterSymbol?.fir as FirSimpleFunction? ?: setterDelegate status = firElement.status deprecationsProvider = getDeprecationsProviderFromAccessors(session, delegateGetter, delegateSetter) }.symbol @@ -195,19 +187,43 @@ class FirSignatureEnhancement( } } + private fun FirSimpleFunction.enhanceAccessorOrNull(): FirFunctionSymbol<*>? { + if (!symbol.isEnhanceable()) return null + return enhancedFunction(symbol, name) + } + @PrivateForInline internal fun enhance( original: FirFunctionSymbol<*>, - name: Name? + name: Name?, ): FirFunctionSymbol<*> { - val firMethod = original.fir - - if (!firMethod.isJava) { + if (!original.isEnhanceable()) { return original } + val firMethod = original.fir val enhancedParameters = enhanceTypeParameterBoundsForMethod(firMethod) - return enhanceMethod(firMethod, original.callableId, name, enhancedParameters) + return enhanceMethod(firMethod, original.callableId, name, enhancedParameters, original is FirIntersectionOverrideFunctionSymbol) + } + + private fun FirCallableSymbol<*>.isEnhanceable(): Boolean { + return origin is FirDeclarationOrigin.Java || isEnhanceableIntersection() + } + + /** + * Intersection overrides with Java and Kotlin overridden symbols need to be enhanced so that we get non-flexible types + * in the signature. + * This is required for @PurelyImplements to work properly. + * + * We only enhance intersection overrides if their dispatch receiver is equal to [owner], i.e. we don't enhance inherited + * intersection overrides. + * + * See compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt. + */ + private fun FirCallableSymbol<*>.isEnhanceableIntersection(): Boolean { + return this is FirIntersectionCallableSymbol && + dispatchReceiverClassLookupTagOrNull() == owner.symbol.toLookupTag() && + unwrapFakeOverrides>().origin is FirDeclarationOrigin.Enhancement } /** @@ -219,6 +235,7 @@ class FirSignatureEnhancement( methodId: CallableId, name: Name?, enhancedTypeParameters: List?, + isIntersectionOverride: Boolean, ): FirFunctionSymbol<*> { val predefinedEnhancementInfo = SignatureBuildingComponents.signature( @@ -253,7 +270,7 @@ class FirSignatureEnhancement( if (hasReceiver && index == 0) continue enhancedValueParameterTypes += enhanceValueParameterType( firMethod, overriddenMembers, hasReceiver, - defaultQualifiers, predefinedEnhancementInfo, valueParameter as FirJavaValueParameter, + defaultQualifiers, predefinedEnhancementInfo, valueParameter, if (hasReceiver) index - 1 else index ) } @@ -263,6 +280,8 @@ class FirSignatureEnhancement( val typeParameterSubstitutionMap = mutableMapOf() var typeParameterSubstitutor: ConeSubstitutorByMap? = null + val declarationOrigin = + if (isIntersectionOverride) FirDeclarationOrigin.IntersectionOverride else FirDeclarationOrigin.Enhancement val function = when (firMethod) { is FirConstructor -> { @@ -300,7 +319,7 @@ class FirSignatureEnhancement( source = firMethod.source moduleData = this@FirSignatureEnhancement.moduleData resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES - origin = FirDeclarationOrigin.Enhancement + origin = declarationOrigin // TODO: we should set a new origin / containing declaration to type parameters (KT-60440) this.typeParameters += (enhancedTypeParameters ?: firMethod.typeParameters) } @@ -310,11 +329,15 @@ class FirSignatureEnhancement( FirSimpleFunctionBuilder().apply { source = firMethod.source moduleData = this@FirSignatureEnhancement.moduleData - origin = FirDeclarationOrigin.Enhancement + origin = declarationOrigin this.name = name!! status = firMethod.status - symbol = FirNamedFunctionSymbol(methodId).also { functionSymbol = it } + symbol = if (isIntersectionOverride) { + FirIntersectionOverrideFunctionSymbol(methodId, overriddenMembers.map { it.symbol }) + } else { + FirNamedFunctionSymbol(methodId) + }.also { functionSymbol = it } resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES typeParameters += (enhancedTypeParameters ?: firMethod.typeParameters).map { typeParameter -> // FirJavaMethod contains only FirTypeParameter so [enhancedTypeParameters] must have the same type @@ -324,7 +347,7 @@ class FirSignatureEnhancement( // TODO: we probably shouldn't build a copy second time. See performFirstRoundOfBoundsResolution (KT-60446) val newTypeParameter = buildTypeParameterCopy(typeParameter) { - origin = FirDeclarationOrigin.Enhancement + origin = declarationOrigin symbol = FirTypeParameterSymbol() containingDeclarationSymbol = functionSymbol } @@ -372,7 +395,7 @@ class FirSignatureEnhancement( source = valueParameter.source containingFunctionSymbol = functionSymbol moduleData = this@FirSignatureEnhancement.moduleData - origin = FirDeclarationOrigin.Enhancement + origin = declarationOrigin returnTypeRef = enhancedReturnType.withReplacedConeType( typeParameterSubstitutor?.substituteOrNull(enhancedReturnType.coneType) ) @@ -590,7 +613,7 @@ class FirSignatureEnhancement( hasReceiver: Boolean, defaultQualifiers: JavaTypeQualifiersByElementType?, predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?, - ownerParameter: FirJavaValueParameter, + ownerParameter: FirValueParameter, index: Int ): FirResolvedTypeRef { return ownerFunction.enhanceValueParameter( diff --git a/compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt b/compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt new file mode 100644 index 00000000000..3cc4fabb3f9 --- /dev/null +++ b/compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt @@ -0,0 +1,30 @@ +// TARGET_BACKEND: JVM + +// MODULE: lib +// FILE: KtWhenExpression.java +public class KtWhenExpression extends KtExpressionImpl {} + +// FILE: KtExpressionImpl.kt +abstract class KtExpressionImpl : PsiElementBase(), PsiElement {} + +// FILE: PsiElementBase.java +public abstract class PsiElementBase implements PsiElement { + @Override + public String getProject() { return ""; } +} + +// FILE: PsiElement.java +public interface PsiElement { + String getProject(); +} + +// MODULE: box(lib) +// FILE: box.kt +private fun test(expression: KtWhenExpression) { + expression.project +} + +fun box(): String { + test(KtWhenExpression()) + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableCollection.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableCollection.fir.kt index 135766e6c25..c618ef42da2 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableCollection.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableCollection.fir.kt @@ -23,8 +23,8 @@ fun bar(): String? = null fun foo() { var x = A() - x.add(null) - x.add(bar()) + x.add(null) + x.add(bar()) x.add("") val b1: Collection = x diff --git a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.fir.kt index edb7211f022..4eeba726c46 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/customClassMutableList.fir.kt @@ -23,8 +23,8 @@ fun bar(): String? = null fun foo() { var x = A() - x.add(null) - x.add(bar()) + x.add(null) + x.add(bar()) x.add("") x[0] = null diff --git a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/sets.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/sets.fir.kt index 4ef593c4b3b..30efd868dc0 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/sets.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/purelyImplementedCollection/sets.fir.kt @@ -35,8 +35,8 @@ fun fooTreeSet() { fun fooLinkedHashSet() { var x = LinkedHashSet() - x.add(null) - x.add(bar()) + x.add(null) + x.add(bar()) x.add("") val b1: MutableSet = x diff --git a/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.ir.txt b/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.ir.txt index e6703a9d18c..191b8f626b1 100644 --- a/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.ir.txt +++ b/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.ir.txt @@ -166,11 +166,11 @@ FILE fqName: fileName:/ArrayListOverrides.kt overridden: public open fun hashCode (): kotlin.Int declared in java.util.ArrayList $this: VALUE_PARAMETER name: type:java.util.AbstractList<@[FlexibleNullability] kotlin.String?> - FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<@[FlexibleNullability] kotlin.String?>, p0:kotlin.collections.Collection<@[FlexibleNullability] kotlin.String?>) returnType:kotlin.Boolean [fake_override] + FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<@[FlexibleNullability] kotlin.String?>, p0:kotlin.collections.Collection<@[EnhancedNullability] kotlin.String>) returnType:kotlin.Boolean [fake_override] overridden: - public open fun containsAll (p0: kotlin.collections.Collection<@[FlexibleNullability] E of java.util.ArrayList?>): kotlin.Boolean declared in java.util.ArrayList + public open fun containsAll (p0: kotlin.collections.Collection<@[EnhancedNullability] E of java.util.ArrayList>): kotlin.Boolean declared in java.util.ArrayList $this: VALUE_PARAMETER name: type:java.util.AbstractCollection<@[FlexibleNullability] kotlin.String?> - VALUE_PARAMETER name:p0 index:0 type:kotlin.collections.Collection<@[FlexibleNullability] kotlin.String?> + VALUE_PARAMETER name:p0 index:0 type:kotlin.collections.Collection<@[EnhancedNullability] kotlin.String> FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<@[FlexibleNullability] kotlin.String?>) returnType:@[EnhancedNullability] kotlin.String [fake_override] overridden: public open fun toString (): @[EnhancedNullability] kotlin.String declared in java.util.ArrayList @@ -358,11 +358,11 @@ FILE fqName: fileName:/ArrayListOverrides.kt overridden: public open fun hashCode (): kotlin.Int declared in java.util.ArrayList $this: VALUE_PARAMETER name: type:java.util.AbstractList<@[FlexibleNullability] kotlin.String?> - FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<@[FlexibleNullability] kotlin.String?>, p0:kotlin.collections.Collection<@[FlexibleNullability] kotlin.String?>) returnType:kotlin.Boolean [fake_override] + FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<@[FlexibleNullability] kotlin.String?>, p0:kotlin.collections.Collection<@[EnhancedNullability] kotlin.String>) returnType:kotlin.Boolean [fake_override] overridden: - public open fun containsAll (p0: kotlin.collections.Collection<@[FlexibleNullability] E of java.util.ArrayList?>): kotlin.Boolean declared in java.util.ArrayList + public open fun containsAll (p0: kotlin.collections.Collection<@[EnhancedNullability] E of java.util.ArrayList>): kotlin.Boolean declared in java.util.ArrayList $this: VALUE_PARAMETER name: type:java.util.AbstractCollection<@[FlexibleNullability] kotlin.String?> - VALUE_PARAMETER name:p0 index:0 type:kotlin.collections.Collection<@[FlexibleNullability] kotlin.String?> + VALUE_PARAMETER name:p0 index:0 type:kotlin.collections.Collection<@[EnhancedNullability] kotlin.String> FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<@[FlexibleNullability] kotlin.String?>) returnType:@[EnhancedNullability] kotlin.String [fake_override] overridden: public open fun toString (): @[EnhancedNullability] kotlin.String declared in java.util.ArrayList diff --git a/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.sig.kt.txt b/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.sig.kt.txt index 599660d10ec..783355910d9 100644 --- a/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.sig.kt.txt +++ b/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.sig.kt.txt @@ -51,10 +51,10 @@ class A1 : ArrayList { /* fake */ override operator fun contains(p0: @EnhancedNullability String): Boolean // CHECK JVM_IR: - // Mangled name: A1#containsAll(kotlin.collections.Collection){}kotlin.Boolean - // Public signature: /A1.containsAll|1049727718390523309[0] - // Public signature debug description: containsAll(kotlin.collections.Collection){}kotlin.Boolean - /* fake */ override fun containsAll(p0: Collection): Boolean + // Mangled name: A1#containsAll(kotlin.collections.Collection){}kotlin.Boolean + // Public signature: /A1.containsAll|3856626117350599597[0] + // Public signature debug description: containsAll(kotlin.collections.Collection){}kotlin.Boolean + /* fake */ override fun containsAll(p0: Collection<@EnhancedNullability String>): Boolean // CHECK: // Mangled name: A1#ensureCapacity(kotlin.Int){} @@ -290,10 +290,10 @@ class A2 : ArrayList { /* fake */ override operator fun contains(p0: @EnhancedNullability String): Boolean // CHECK JVM_IR: - // Mangled name: A2#containsAll(kotlin.collections.Collection){}kotlin.Boolean - // Public signature: /A2.containsAll|1049727718390523309[0] - // Public signature debug description: containsAll(kotlin.collections.Collection){}kotlin.Boolean - /* fake */ override fun containsAll(p0: Collection): Boolean + // Mangled name: A2#containsAll(kotlin.collections.Collection){}kotlin.Boolean + // Public signature: /A2.containsAll|3856626117350599597[0] + // Public signature debug description: containsAll(kotlin.collections.Collection){}kotlin.Boolean + /* fake */ override fun containsAll(p0: Collection<@EnhancedNullability String>): Boolean // CHECK: // Mangled name: A2#ensureCapacity(kotlin.Int){} diff --git a/compiler/testData/ir/irText/firProblems/MultiList.fir.ir.txt b/compiler/testData/ir/irText/firProblems/MultiList.fir.ir.txt index 197ba42897d..d0a589c5f72 100644 --- a/compiler/testData/ir/irText/firProblems/MultiList.fir.ir.txt +++ b/compiler/testData/ir/irText/firProblems/MultiList.fir.ir.txt @@ -205,7 +205,7 @@ FILE fqName: fileName:/MultiList.kt FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:kotlin.collections.List<.Some.SomeList>>, elements:kotlin.collections.Collection<.Some.SomeList>>) returnType:kotlin.Boolean [fake_override] overridden: public abstract fun containsAll (elements: kotlin.collections.Collection<.Some.MyList>>): kotlin.Boolean declared in .MyList - public open fun containsAll (p0: kotlin.collections.Collection<@[FlexibleNullability] E of java.util.ArrayList?>): kotlin.Boolean declared in java.util.ArrayList + public open fun containsAll (p0: kotlin.collections.Collection<@[EnhancedNullability] E of java.util.ArrayList>): kotlin.Boolean declared in java.util.ArrayList $this: VALUE_PARAMETER name: type:kotlin.collections.List<.Some.SomeList>> VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<.Some.SomeList>> FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:kotlin.collections.List<.Some.SomeList>>, index:kotlin.Int) returnType:.Some.SomeList> [fake_override,operator] diff --git a/compiler/testData/ir/irText/stubs/builtinMap.fir.ir.txt b/compiler/testData/ir/irText/stubs/builtinMap.fir.ir.txt index 56da0611b8a..4a3f956f861 100644 --- a/compiler/testData/ir/irText/stubs/builtinMap.fir.ir.txt +++ b/compiler/testData/ir/irText/stubs/builtinMap.fir.ir.txt @@ -27,7 +27,7 @@ FILE fqName: fileName:/builtinMap.kt $receiver: VALUE_PARAMETER name:$this$apply type:java.util.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?> BLOCK_BODY TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit - CALL 'public open fun put (p0: @[FlexibleNullability] K of java.util.LinkedHashMap?, p1: @[FlexibleNullability] V of java.util.LinkedHashMap?): V of java.util.LinkedHashMap? declared in java.util.LinkedHashMap' type=V1 of .plus? origin=null + CALL 'public open fun put (p0: @[EnhancedNullability] K of java.util.LinkedHashMap, p1: @[EnhancedNullability] V of java.util.LinkedHashMap): V of java.util.LinkedHashMap? declared in java.util.LinkedHashMap' type=V1 of .plus? origin=null $this: GET_VAR '$this$apply: java.util.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?> declared in .plus.' type=java.util.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?> origin=null p0: CALL 'public final fun (): A of kotlin.Pair declared in kotlin.Pair' type=K1 of .plus origin=GET_PROPERTY $this: GET_VAR 'pair: kotlin.Pair.plus, V1 of .plus> declared in .plus' type=kotlin.Pair.plus, V1 of .plus> origin=null diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java index 9cb458356b2..2d4f48a3bb7 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java @@ -19287,6 +19287,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("javaInheritsKotlinIntersectionOverride.kt") + public void testJavaInheritsKotlinIntersectionOverride() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt"); + } + @Test @TestMetadata("kjkWithPackagePrivate.kt") public void testKjkWithPackagePrivate() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index aa364685a5f..3ce6d50701c 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -18453,6 +18453,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("javaInheritsKotlinIntersectionOverride.kt") + public void testJavaInheritsKotlinIntersectionOverride() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt"); + } + @Test @TestMetadata("kt49371.kt") public void testKt49371() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 39d2cf6ee53..030130175f7 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -19287,6 +19287,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("javaInheritsKotlinIntersectionOverride.kt") + public void testJavaInheritsKotlinIntersectionOverride() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt"); + } + @Test @TestMetadata("kjkWithPackagePrivate.kt") public void testKjkWithPackagePrivate() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index 9a6362ca440..305d7164f10 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -19287,6 +19287,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @Test + @TestMetadata("javaInheritsKotlinIntersectionOverride.kt") + public void testJavaInheritsKotlinIntersectionOverride() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt"); + } + @Test @TestMetadata("kjkWithPackagePrivate.kt") public void testKjkWithPackagePrivate() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 7fa4d440cfa..1d331f1ad03 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -16069,6 +16069,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/fakeOverride/intersectionOverrideBetweenValAndVar.kt"); } + @TestMetadata("javaInheritsKotlinIntersectionOverride.kt") + public void testJavaInheritsKotlinIntersectionOverride() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/javaInheritsKotlinIntersectionOverride.kt"); + } + @TestMetadata("kjkWithPackagePrivate.kt") public void testKjkWithPackagePrivate() throws Exception { runTest("compiler/testData/codegen/box/fakeOverride/kjkWithPackagePrivate.kt");