From 5690a9f21b2d24378466a916273c0e330fa54aa4 Mon Sep 17 00:00:00 2001 From: "Denis.Zharkov" Date: Mon, 25 Oct 2021 13:35:30 +0300 Subject: [PATCH] FIR: Fix overridability of Kotlin vararg from Java --- ...CompilerTestFE10TestdataTestGenerated.java | 6 ++++++ ...irOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 ++++++ .../fir/java/scopes/JavaOverrideChecker.kt | 3 +-- .../tests/j+k/types/varargOverride.kt | 20 +++++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 ++++++ 6 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/j+k/types/varargOverride.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 2510a1c36d5..de536306958 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -17991,6 +17991,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag public void testTypeParameter() throws Exception { runTest("compiler/testData/diagnostics/tests/j+k/types/typeParameter.kt"); } + + @Test + @TestMetadata("varargOverride.kt") + public void testVarargOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/types/varargOverride.kt"); + } } } diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index f249c94ed81..47dab91dd18 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -17991,6 +17991,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti public void testTypeParameter() throws Exception { runTest("compiler/testData/diagnostics/tests/j+k/types/typeParameter.kt"); } + + @Test + @TestMetadata("varargOverride.kt") + public void testVarargOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/types/varargOverride.kt"); + } } } diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index ec32cdd27a5..e727951d36f 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -17991,6 +17991,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac public void testTypeParameter() throws Exception { runTest("compiler/testData/diagnostics/tests/j+k/types/typeParameter.kt"); } + + @Test + @TestMetadata("varargOverride.kt") + public void testVarargOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/types/varargOverride.kt"); + } } } 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 2fe6120f2a4..95597725e04 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 @@ -94,8 +94,7 @@ class JavaOverrideChecker internal constructor( ): Boolean = when { candidateTypeProjection is ConeKotlinTypeProjection && baseTypeProjection is ConeKotlinTypeProjection -> - candidateTypeProjection.kind == baseTypeProjection.kind && - isEqualTypes(candidateTypeProjection.type, baseTypeProjection.type, substitutor) + isEqualTypes(candidateTypeProjection.type, baseTypeProjection.type, substitutor) candidateTypeProjection is ConeStarProjection && baseTypeProjection is ConeStarProjection -> true else -> false } diff --git a/compiler/testData/diagnostics/tests/j+k/types/varargOverride.kt b/compiler/testData/diagnostics/tests/j+k/types/varargOverride.kt new file mode 100644 index 00000000000..057b1cc3ba1 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/types/varargOverride.kt @@ -0,0 +1,20 @@ +// SKIP_TXT +// FIR_IDENTICAL +// FILE: A.java + +import org.jetbrains.annotations.NotNull; + +public interface A extends B { + void foo(@NotNull String... value); +} + +// FILE: main.kt +interface B { + fun foo(vararg x: String) {} +} + +fun main(a: A) { + a.foo() + a.foo("1") + a.foo("2", "3") +} 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 d3e7797effc..bec57de1848 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 @@ -17997,6 +17997,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { public void testTypeParameter() throws Exception { runTest("compiler/testData/diagnostics/tests/j+k/types/typeParameter.kt"); } + + @Test + @TestMetadata("varargOverride.kt") + public void testVarargOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/types/varargOverride.kt"); + } } }