From fa77e3952df4b854027f4d664ba82f666270e29a Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Mon, 14 Aug 2023 17:01:29 +0200 Subject: [PATCH] [FIR] Bring equivalent call behavior closer to K1 #KT-61159 Fixed --- ...edCall_ResolveInsideLambda.descriptors.txt | 3 - ...InDotQualifiedCall_ResolveInsideLambda.txt | 3 +- ...CompilerTestFE10TestdataTestGenerated.java | 6 ++ ...sticCompilerFE10TestDataTestGenerated.java | 6 ++ ...mixingImplicitAndExplicitReceivers.fir.txt | 4 +- .../mixingImplicitAndExplicitReceivers.kt | 4 +- .../callableReferences/beyoundCalls.fir.txt | 2 +- .../callableReferences/beyoundCalls.kt | 2 +- ...eeOldFrontendDiagnosticsTestGenerated.java | 6 ++ ...siOldFrontendDiagnosticsTestGenerated.java | 6 ++ ...LightTreeBlackBoxCodegenTestGenerated.java | 16 +++ .../FirPsiBlackBoxCodegenTestGenerated.java | 16 +++ .../jvm/ConeEquivalentCallConflictResolver.kt | 33 +++++-- .../scopes/impl/FirStandardOverrideChecker.kt | 22 ++++- .../equivalentCalls/localEquivalentWins.kt | 13 +++ .../dependencyOnItself/library/sample.kt | 16 +++ .../dependencyOnItself/output.txt | 1 + .../MultiDeclarationErrors.fir.kt | 2 +- .../contextReceivers/conflicting.fir.kt | 4 +- .../equivalentCallsDifferentVisibility.kt | 14 +++ .../CallToMainRedeclaredInMultiFile.fir.kt | 2 +- .../test/runners/DiagnosticTestGenerated.java | 6 ++ .../codegen/BlackBoxCodegenTestGenerated.java | 16 +++ .../IrBlackBoxCodegenTestGenerated.java | 16 +++ ...kBoxCodegenWithIrInlinerTestGenerated.java | 16 +++ .../LightAnalysisModeTestGenerated.java | 18 ++++ .../p-5/neg/2.4.fir.kt | 97 ------------------- .../p-5/neg/2.4.kt | 1 + ...tCompileKotlinAgainstCustomBinariesTest.kt | 10 ++ .../fir/FirJsCodegenBoxTestGenerated.java | 16 +++ .../fir/FirJsES6CodegenBoxTestGenerated.java | 16 +++ .../test/ir/IrJsCodegenBoxTestGenerated.java | 16 +++ .../ir/IrJsES6CodegenBoxTestGenerated.java | 16 +++ .../FirNativeCodegenBoxTestGenerated.java | 19 ++++ .../FirNativeCodegenBoxTestNoPLGenerated.java | 21 ++++ .../NativeCodegenBoxTestGenerated.java | 18 ++++ .../NativeCodegenBoxTestNoPLGenerated.java | 19 ++++ .../test/FirWasmCodegenBoxTestGenerated.java | 16 +++ .../test/K1WasmCodegenBoxTestGenerated.java | 16 +++ 39 files changed, 408 insertions(+), 126 deletions(-) delete mode 100644 analysis/analysis-api/testData/referenceResolve/withErrors/NoSelectorInDotQualifiedCall_ResolveInsideLambda.descriptors.txt create mode 100644 compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt create mode 100644 compiler/testData/compileKotlinAgainstCustomBinaries/dependencyOnItself/library/sample.kt create mode 100644 compiler/testData/compileKotlinAgainstCustomBinaries/dependencyOnItself/output.txt create mode 100644 compiler/testData/diagnostics/tests/resolve/overloadConflicts/equivalentCallsDifferentVisibility.kt delete mode 100644 compiler/tests-spec/testData/diagnostics/linked/overload-resolution/building-the-overload-candidate-set-ocs/call-without-an-explicit-receiver/p-5/neg/2.4.fir.kt diff --git a/analysis/analysis-api/testData/referenceResolve/withErrors/NoSelectorInDotQualifiedCall_ResolveInsideLambda.descriptors.txt b/analysis/analysis-api/testData/referenceResolve/withErrors/NoSelectorInDotQualifiedCall_ResolveInsideLambda.descriptors.txt deleted file mode 100644 index 9ad47f23ec4..00000000000 --- a/analysis/analysis-api/testData/referenceResolve/withErrors/NoSelectorInDotQualifiedCall_ResolveInsideLambda.descriptors.txt +++ /dev/null @@ -1,3 +0,0 @@ -Resolved to: -0: (in testing) fun test() -1: (in testing) fun test() \ No newline at end of file diff --git a/analysis/analysis-api/testData/referenceResolve/withErrors/NoSelectorInDotQualifiedCall_ResolveInsideLambda.txt b/analysis/analysis-api/testData/referenceResolve/withErrors/NoSelectorInDotQualifiedCall_ResolveInsideLambda.txt index b2169f57728..9ad47f23ec4 100644 --- a/analysis/analysis-api/testData/referenceResolve/withErrors/NoSelectorInDotQualifiedCall_ResolveInsideLambda.txt +++ b/analysis/analysis-api/testData/referenceResolve/withErrors/NoSelectorInDotQualifiedCall_ResolveInsideLambda.txt @@ -1,2 +1,3 @@ Resolved to: -0: (in testing) fun test() \ No newline at end of file +0: (in testing) fun test() +1: (in testing) fun test() \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 0d3d0e82977..162ee1235f0 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -28143,6 +28143,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/resolve/overloadConflicts/allLambdas.kt"); } + @Test + @TestMetadata("equivalentCallsDifferentVisibility.kt") + public void testEquivalentCallsDifferentVisibility() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/overloadConflicts/equivalentCallsDifferentVisibility.kt"); + } + @Test @TestMetadata("extensionReceiverAndVarargs.kt") public void testExtensionReceiverAndVarargs() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index dc27d701056..bbe2f487a89 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -28143,6 +28143,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/resolve/overloadConflicts/allLambdas.kt"); } + @Test + @TestMetadata("equivalentCallsDifferentVisibility.kt") + public void testEquivalentCallsDifferentVisibility() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/overloadConflicts/equivalentCallsDifferentVisibility.kt"); + } + @Test @TestMetadata("extensionReceiverAndVarargs.kt") public void testExtensionReceiverAndVarargs() throws Exception { diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/mixingImplicitAndExplicitReceivers.fir.txt b/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/mixingImplicitAndExplicitReceivers.fir.txt index e67c517edc3..4d68961cf26 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/mixingImplicitAndExplicitReceivers.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/mixingImplicitAndExplicitReceivers.fir.txt @@ -12,13 +12,13 @@ FILE: mixingImplicitAndExplicitReceivers.kt public final fun withThis(): R|kotlin/Unit| { when () { !=(this@R|/Wrapper|.R|/Wrapper.s|, Null(null)) -> { - R|/takeString|(this@R|/Wrapper|.R|/Wrapper.s|) + #(this@R|/Wrapper|.R|/Wrapper.s|) } } when () { !=(this@R|/Wrapper|.R|/Wrapper.s|, Null(null)) -> { - R|/takeString|(this@R|/Wrapper|.R|/Wrapper.s|) + #(this@R|/Wrapper|.R|/Wrapper.s|) } } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/mixingImplicitAndExplicitReceivers.kt b/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/mixingImplicitAndExplicitReceivers.kt index 9cd0660a7a9..a34e56497f9 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/mixingImplicitAndExplicitReceivers.kt +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/mixingImplicitAndExplicitReceivers.kt @@ -3,10 +3,10 @@ class Wrapper(val s: String?) { fun withThis() { if (s != null) { - takeString(this.s) // Should be OK + takeString(this.s) // Should be OK } if (this.s != null) { - takeString(s) // Should be OK + takeString(s) // Should be OK } } } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/beyoundCalls.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/beyoundCalls.fir.txt index 36eb12f9c5e..ca1ef7fcb91 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/beyoundCalls.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/beyoundCalls.fir.txt @@ -13,7 +13,7 @@ FILE: beyoundCalls.kt } public final fun foo(): R|kotlin/Unit| { lval x: R|(kotlin/String) -> kotlin/Int| = ::R|/bar| - lval y: R|kotlin/reflect/KFunction1| = ::R|/bar| + lval y: = ::# lval z: R|kotlin/reflect/KFunction1| = ::R|/baz| lval w: R|(kotlin/String) -> kotlin/Int| = ::R|/foobaz| ::R|/baz| diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/beyoundCalls.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/beyoundCalls.kt index 0ab5fc03b14..0ffa0b95280 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/beyoundCalls.kt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/beyoundCalls.kt @@ -6,7 +6,7 @@ fun foobaz(x: T): R = TODO() fun foo() { val x: (String) -> Int = ::bar - val y = ::bar + val y = ::bar val z = ::baz val w: (String) -> Int = ::foobaz diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 3d8cbb19e3a..a19abebcedb 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -28143,6 +28143,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/resolve/overloadConflicts/allLambdas.kt"); } + @Test + @TestMetadata("equivalentCallsDifferentVisibility.kt") + public void testEquivalentCallsDifferentVisibility() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/overloadConflicts/equivalentCallsDifferentVisibility.kt"); + } + @Test @TestMetadata("extensionReceiverAndVarargs.kt") public void testExtensionReceiverAndVarargs() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index 6094d6124ec..df32c4aff29 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -28155,6 +28155,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/resolve/overloadConflicts/allLambdas.kt"); } + @Test + @TestMetadata("equivalentCallsDifferentVisibility.kt") + public void testEquivalentCallsDifferentVisibility() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/overloadConflicts/equivalentCallsDifferentVisibility.kt"); + } + @Test @TestMetadata("extensionReceiverAndVarargs.kt") public void testExtensionReceiverAndVarargs() 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 25b33726c29..5d7eb14e86f 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 @@ -17402,6 +17402,22 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") 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 7f7695519a1..a3f313c3234 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 @@ -17402,6 +17402,22 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/ConeEquivalentCallConflictResolver.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/ConeEquivalentCallConflictResolver.kt index a8271665c2d..5683bae4de7 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/ConeEquivalentCallConflictResolver.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/ConeEquivalentCallConflictResolver.kt @@ -13,17 +13,19 @@ import org.jetbrains.kotlin.fir.resolve.calls.AbstractConeCallConflictResolver import org.jetbrains.kotlin.fir.resolve.calls.Candidate import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents import org.jetbrains.kotlin.fir.scopes.impl.FirStandardOverrideChecker -import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry -import org.jetbrains.kotlin.resolve.calls.results.FlatSignature import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator -import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment -// This conflict resolver filters JVM equivalent top-level functions -// like emptyArray() from intrinsics and built-ins +/** + * Resolver that filters out equivalent calls, mainly to deduplicate multiples of the same declaration coming from different versions + * of the same dependency, e.g., multiple stdlibs. + * + * Currently, it will also consider a declaration from source and one from binary equivalent if all conditions are met for backward + * compatibility with K1. + */ class ConeEquivalentCallConflictResolver( specificityComparator: TypeSpecificityComparator, inferenceComponents: InferenceComponents, - transformerComponents: BodyResolveComponents + transformerComponents: BodyResolveComponents, ) : AbstractConeCallConflictResolver( specificityComparator, inferenceComponents, @@ -38,8 +40,13 @@ class ConeEquivalentCallConflictResolver( } private fun filterOutEquivalentCalls(candidates: Collection): Set { + // Since we can consider a declaration from source and one from binary equivalent, we need to make sure we favor the one from + // source, otherwise we might get a behavior change to K1. + // See org.jetbrains.kotlin.resolve.calls.results.OverloadingConflictResolver.filterOutEquivalentCalls. + val fromSourceFirst = candidates.sortedBy { it.symbol.fir.source == null } + val result = mutableSetOf() - outerLoop@ for (myCandidate in candidates) { + outerLoop@ for (myCandidate in fromSourceFirst) { val me = myCandidate.symbol.fir if (me is FirCallableDeclaration && me.symbol.containingClassLookupTag() == null) { for (otherCandidate in result) { @@ -63,6 +70,11 @@ class ConeEquivalentCallConflictResolver( secondCandidate: Candidate ): Boolean { if (first.symbol.callableId != second.symbol.callableId) return false + // Emulate behavior from K1 where declarations from the same module are never equivalent. + // We expect REDECLARATION or CONFLICTING_OVERLOADS to be reported in those cases. + // See a.containingDeclaration == b.containingDeclaration check in + // org.jetbrains.kotlin.resolve.DescriptorEquivalenceForOverrides.areCallableDescriptorsEquivalent. + if (first.moduleData == second.moduleData) return false if (first.isExpect != second.isExpect) return false if (first is FirVariable != second is FirVariable) { return false @@ -73,15 +85,16 @@ class ConeEquivalentCallConflictResolver( val overrideChecker = FirStandardOverrideChecker(inferenceComponents.session) return if (first is FirProperty && second is FirProperty) { - overrideChecker.isOverriddenProperty(first, second) && overrideChecker.isOverriddenProperty(second, first) + overrideChecker.isOverriddenProperty(first, second, ignoreVisibility = true) && + overrideChecker.isOverriddenProperty(second, first, ignoreVisibility = true) } else if (first is FirSimpleFunction && second is FirSimpleFunction) { - overrideChecker.isOverriddenFunction(first, second) && overrideChecker.isOverriddenFunction(second, first) + overrideChecker.isOverriddenFunction(first, second, ignoreVisibility = true) && + overrideChecker.isOverriddenFunction(second, first, ignoreVisibility = true) } else { false } } - /** * If the candidate is a function, then the arguments * order representation is an array containing the diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt index 3dd5d2c66ec..07e6b359b36 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt @@ -122,32 +122,44 @@ class FirStandardOverrideChecker(private val session: FirSession) : FirAbstractO } override fun isOverriddenFunction(overrideCandidate: FirSimpleFunction, baseDeclaration: FirSimpleFunction): Boolean { + return isOverriddenFunction(overrideCandidate, baseDeclaration, ignoreVisibility = false) + } + + fun isOverriddenFunction(overrideCandidate: FirSimpleFunction, baseDeclaration: FirSimpleFunction, ignoreVisibility: Boolean): Boolean { if (overrideCandidate.valueParameters.size != baseDeclaration.valueParameters.size) return false val substitutor = buildTypeParametersSubstitutorIfCompatible(overrideCandidate, baseDeclaration) ?: return false - if (!commonCallableChecks(overrideCandidate, baseDeclaration, substitutor)) return false + if (!commonCallableChecks(overrideCandidate, baseDeclaration, substitutor, ignoreVisibility)) return false return overrideCandidate.valueParameters.zip(baseDeclaration.valueParameters).all { (memberParam, selfParam) -> isEqualTypes(memberParam.returnTypeRef, selfParam.returnTypeRef, substitutor) } } - override fun isOverriddenProperty( + override fun isOverriddenProperty(overrideCandidate: FirCallableDeclaration, baseDeclaration: FirProperty): Boolean { + return isOverriddenProperty(overrideCandidate, baseDeclaration, ignoreVisibility = false) + } + + fun isOverriddenProperty( overrideCandidate: FirCallableDeclaration, - baseDeclaration: FirProperty + baseDeclaration: FirProperty, + ignoreVisibility: Boolean, ): Boolean { if (overrideCandidate !is FirProperty) return false val substitutor = buildTypeParametersSubstitutorIfCompatible(overrideCandidate, baseDeclaration) ?: return false - return commonCallableChecks(overrideCandidate, baseDeclaration, substitutor) + return commonCallableChecks(overrideCandidate, baseDeclaration, substitutor, ignoreVisibility) } private fun FirStandardOverrideChecker.commonCallableChecks( overrideCandidate: FirCallableDeclaration, baseDeclaration: FirCallableDeclaration, substitutor: ConeSubstitutor, + // Overload-ability is used to filter out equivalent calls (see ConeEquivalentCallConflictResolver) in which case visibility + // must be ignored. + ignoreVisibility: Boolean, ): Boolean { - if (Visibilities.isPrivate(baseDeclaration.visibility)) return false + if (!ignoreVisibility && Visibilities.isPrivate(baseDeclaration.visibility)) return false if (overrideCandidate.contextReceivers.size != baseDeclaration.contextReceivers.size) return false overrideCandidate.lazyResolveToPhase(FirResolvePhase.TYPES) diff --git a/compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt b/compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt new file mode 100644 index 00000000000..927a1a82180 --- /dev/null +++ b/compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt @@ -0,0 +1,13 @@ +// MODULE: lib +// FILE: lib.kt +val a = "FAIL 1" + +// MODULE: main(lib) +// FILE: box.kt +private val a = "OK" + +fun box(): String { + if (a != "OK") return a + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/dependencyOnItself/library/sample.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/dependencyOnItself/library/sample.kt new file mode 100644 index 00000000000..d532706edd7 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/dependencyOnItself/library/sample.kt @@ -0,0 +1,16 @@ +fun kotlin.String.exampleExtensionFunction() {} + +class UserKlass +fun T.erroneousExtensionFunction1() {} + +fun kotlin.text.Appendable.erroneousExtensionFunction2() {} + +fun test( + exampleReceiver: kotlin.String, + receiver1: UserKlass, + receiver2: kotlin.text.Appendable +) { + exampleReceiver.exampleExtensionFunction() + receiver1.erroneousExtensionFunction1() + receiver2.erroneousExtensionFunction2() +} diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/dependencyOnItself/output.txt b/compiler/testData/compileKotlinAgainstCustomBinaries/dependencyOnItself/output.txt new file mode 100644 index 00000000000..d86bac9de59 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/dependencyOnItself/output.txt @@ -0,0 +1 @@ +OK diff --git a/compiler/testData/diagnostics/tests/declarationChecks/MultiDeclarationErrors.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/MultiDeclarationErrors.fir.kt index 4729469fdc6..c039dbfd6aa 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/MultiDeclarationErrors.fir.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/MultiDeclarationErrors.fir.kt @@ -11,7 +11,7 @@ class MyClass2 {} fun test(mc1: MyClass, mc2: MyClass2) { val (a, b) = mc1 - val (c) = mc2 + val (c) = mc2 //a,b,c are error types use(a, b, c) diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/conflicting.fir.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/conflicting.fir.kt index 17a407a0c62..b6f76a1d9a5 100644 --- a/compiler/testData/diagnostics/tests/extensions/contextReceivers/conflicting.fir.kt +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/conflicting.fir.kt @@ -10,9 +10,9 @@ fun f(): Unit = TODO() fun f(): Unit = TODO() fun test(a: A, b: B) { - with(a) { + with(a) { with(b) { - f() + f() } } } diff --git a/compiler/testData/diagnostics/tests/resolve/overloadConflicts/equivalentCallsDifferentVisibility.kt b/compiler/testData/diagnostics/tests/resolve/overloadConflicts/equivalentCallsDifferentVisibility.kt new file mode 100644 index 00000000000..aa93d3c6412 --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/overloadConflicts/equivalentCallsDifferentVisibility.kt @@ -0,0 +1,14 @@ +// FIR_IDENTICAL +// MODULE: lib +// FILE: lib.kt + +val lock = "1" + +// MODULE: main(lib) +// FILE: main.kt + +private val lock = "2" + +fun test() { + lock +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/CallToMainRedeclaredInMultiFile.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/CallToMainRedeclaredInMultiFile.fir.kt index fd9991d2390..ae76f8db84a 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/CallToMainRedeclaredInMultiFile.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/CallToMainRedeclaredInMultiFile.fir.kt @@ -8,4 +8,4 @@ fun main(args: Array) {} fun main(args: Array) {} // FILE: c.kt -fun foo() { main(arrayOf("a", "b")) } +fun foo() { main(arrayOf("a", "b")) } diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 1076bfb2aa6..a3b6013a96d 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -29323,6 +29323,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/resolve/overloadConflicts/allLambdas.kt"); } + @Test + @TestMetadata("equivalentCallsDifferentVisibility.kt") + public void testEquivalentCallsDifferentVisibility() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/overloadConflicts/equivalentCallsDifferentVisibility.kt"); + } + @Test @TestMetadata("extensionReceiverAndVarargs.kt") public void testExtensionReceiverAndVarargs() 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 b338af0020e..c2663adbbe1 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 @@ -17000,6 +17000,22 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") 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 a344f561ba7..d92aad5c114 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 @@ -17402,6 +17402,22 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") 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 008e9048769..41c84bb5a36 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 @@ -17402,6 +17402,22 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index d84b4f0872c..7b298e08ca0 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -14405,6 +14405,24 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes } } + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class EquivalentCalls extends AbstractLightAnalysisModeTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath); + } + + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests-spec/testData/diagnostics/linked/overload-resolution/building-the-overload-candidate-set-ocs/call-without-an-explicit-receiver/p-5/neg/2.4.fir.kt b/compiler/tests-spec/testData/diagnostics/linked/overload-resolution/building-the-overload-candidate-set-ocs/call-without-an-explicit-receiver/p-5/neg/2.4.fir.kt deleted file mode 100644 index 2426e5a4b26..00000000000 --- a/compiler/tests-spec/testData/diagnostics/linked/overload-resolution/building-the-overload-candidate-set-ocs/call-without-an-explicit-receiver/p-5/neg/2.4.fir.kt +++ /dev/null @@ -1,97 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION -NOTHING_TO_INLINE -// SKIP_TXT - -/* - * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) - * - * SPEC VERSION: 0.1-278 - * MAIN LINK: overload-resolution, building-the-overload-candidate-set-ocs, call-without-an-explicit-receiver -> paragraph 5 -> sentence 2 - * PRIMARY LINKS: overload-resolution, building-the-overload-candidate-set-ocs, call-without-an-explicit-receiver -> paragraph 4 -> sentence 1 - * overload-resolution, building-the-overload-candidate-set-ocs, call-with-an-explicit-receiver -> paragraph 6 -> sentence 4 - * overload-resolution, building-the-overload-candidate-set-ocs, call-without-an-explicit-receiver -> paragraph 8 -> sentence 1 - * overload-resolution, building-the-overload-candidate-set-ocs, call-without-an-explicit-receiver -> paragraph 6 -> sentence 1 - * overload-resolution, building-the-overload-candidate-set-ocs, call-with-specified-type-parameters -> paragraph 1 -> sentence 2 - * NUMBER: 4 - * DESCRIPTION: The overload candidate sets for each pair of implicit receivers: declared in the package scope extension callables - */ - - - -// FILE: TestCase1.kt -// TESTCASE NUMBER: 1 -package testsCase1 -import libPackageCase1.* -import libPackageCase1Explicit.emptyArray - -fun Case1.emptyArray(): Array = TODO() - -class Case1(){ - - fun case1() { - emptyArray() - } -} - - -// FILE: Lib1.kt -package libPackageCase1 -import testsCase1.* - -public fun emptyArray(): Array = TODO() -fun Case1.emptyArray(): Array = TODO() - -// FILE: Lib2.kt -package libPackageCase1Explicit - -public fun emptyArray(): Array = TODO() - -// FILE: LibtestsPack1.kt -// TESTCASE NUMBER: 1 -package testsCase1 -fun Case1.emptyArray(): Array = TODO() - -public fun emptyArray(): Array = TODO() - - - - -// FILE: TestCase2.kt -// TESTCASE NUMBER: 2 -package testsCase2 -import libPackageCase2.* -import libPackageCase2Explicit.emptyArray - -fun Case2.emptyArray(): Array = TODO() - -class Case2(){ - - fun case1() { - emptyArray() - } -} - -val Case2.emptyArray: A - get() = A() - -class A { - operator fun invoke(): Unit = TODO() -} - -// FILE: Lib3.kt -package libPackageCase2 -import testsCase2.* - -public fun emptyArray(): Array = TODO() -fun Case2.emptyArray(): Array = TODO() - -// FILE: Lib4.kt -package libPackageCase2Explicit - -public fun emptyArray(): Array = TODO() - -// FILE: LibtestsPack2.kt -// TESTCASE NUMBER: 2 -package testsCase2 -fun Case2.emptyArray(): Array = TODO() - -public fun emptyArray(): Array = TODO() diff --git a/compiler/tests-spec/testData/diagnostics/linked/overload-resolution/building-the-overload-candidate-set-ocs/call-without-an-explicit-receiver/p-5/neg/2.4.kt b/compiler/tests-spec/testData/diagnostics/linked/overload-resolution/building-the-overload-candidate-set-ocs/call-without-an-explicit-receiver/p-5/neg/2.4.kt index f320d85e42b..b91dfa1a5d4 100644 --- a/compiler/tests-spec/testData/diagnostics/linked/overload-resolution/building-the-overload-candidate-set-ocs/call-without-an-explicit-receiver/p-5/neg/2.4.kt +++ b/compiler/tests-spec/testData/diagnostics/linked/overload-resolution/building-the-overload-candidate-set-ocs/call-without-an-explicit-receiver/p-5/neg/2.4.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION -NOTHING_TO_INLINE // SKIP_TXT diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstCustomBinariesTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstCustomBinariesTest.kt index 6459f04dbcc..fe6de4dd3e7 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstCustomBinariesTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstCustomBinariesTest.kt @@ -273,6 +273,16 @@ abstract class AbstractCompileKotlinAgainstCustomBinariesTest : AbstractKotlinCo doTestPreReleaseKotlinLibrary(K2JVMCompiler(), "library", tmpdir, "-Xallow-unstable-dependencies", "-Xskip-prerelease-check") } + // KT-61051 K1/K2 difference on extension functions with specific extension receiver types when compiling code that has itself as a dependency + fun testDependencyOnItself() { + val compiledLibrary = compileLibrary("library") + compileKotlin( + "library/sample.kt", + output = tmpdir, + classpath = listOf(compiledLibrary), + ) + } + // KT-60795 K2: missing INCOMPATIBLE_CLASS and corresponding CLI error fun testWrongMetadataVersion() = muteForK2 { doTestKotlinLibraryWithWrongMetadataVersion("library", null) diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java index aa4bd2a207f..f4b8c16223c 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java @@ -13178,6 +13178,22 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java index 2283a030ed7..dc1f691041d 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java @@ -13178,6 +13178,22 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR_ES6, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java index f5e7937a46a..0588136c159 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java @@ -13178,6 +13178,22 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java index fe0aa54ba41..7af1fea18cd 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java @@ -13178,6 +13178,22 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR_ES6, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java index 0d153ce867e..e89a749d49c 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java @@ -14263,6 +14263,25 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + @Tag("frontend-fir") + @FirPipeline() + @UseExtTestCaseGroupProvider() + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.NATIVE, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java index c8e0e239dd8..ec52965c4b4 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java @@ -14597,6 +14597,27 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + @Tag("frontend-fir") + @FirPipeline() + @UseExtTestCaseGroupProvider() + @UsePartialLinkage(mode = Mode.DISABLED) + @Tag("no-partial-linkage-may-be-skipped") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.NATIVE, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java index 73ac5c77b3e..9090ec1fed9 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java @@ -14097,6 +14097,24 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + @UseExtTestCaseGroupProvider() + @DisabledTestsIfProperty(sourceLocations = { "compiler/testData/codegen/box/coroutines/featureIntersection/defaultExpect.kt", "compiler/testData/codegen/box/multiplatform/defaultArguments/*.kt", "compiler/testData/codegen/box/multiplatform/migratedOldTests/*.kt", "compiler/testData/codegen/boxInline/multiplatform/defaultArguments/receiversAndParametersInLambda.kt" }, property = ClassLevelProperty.TEST_MODE, propertyValue = "ONE_STAGE_MULTI_MODULE") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.NATIVE, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java index 31e04fd8eb9..289788a3383 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java @@ -14264,6 +14264,25 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + @UseExtTestCaseGroupProvider() + @UsePartialLinkage(mode = Mode.DISABLED) + @Tag("no-partial-linkage-may-be-skipped") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.NATIVE, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java index bd5649b78d6..b7c8f51f85b 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java @@ -13154,6 +13154,22 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT") diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java index 55bba00829e..01c3f352f57 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java @@ -13154,6 +13154,22 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest } } + @Nested + @TestMetadata("compiler/testData/codegen/box/equivalentCalls") + @TestDataPath("$PROJECT_ROOT") + public class EquivalentCalls { + @Test + public void testAllFilesPresentInEquivalentCalls() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/equivalentCalls"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true); + } + + @Test + @TestMetadata("localEquivalentWins.kt") + public void testLocalEquivalentWins() throws Exception { + runTest("compiler/testData/codegen/box/equivalentCalls/localEquivalentWins.kt"); + } + } + @Nested @TestMetadata("compiler/testData/codegen/box/evaluate") @TestDataPath("$PROJECT_ROOT")