From 41aaaa6a0d68c815ccb25642b36793f4acdb3be4 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Fri, 16 Dec 2016 19:29:39 +0300 Subject: [PATCH] Fix for KT-6790 J2K: Static import of Map.Entry is lost during conversion #KT-6790 fixed --- j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt | 9 +++++++-- j2k/testData/fileOrElement/issues/kt-6790.java | 6 ++++++ j2k/testData/fileOrElement/issues/kt-6790.kt | 6 ++++++ .../JavaToKotlinConverterForWebDemoTestGenerated.java | 6 ++++++ .../JavaToKotlinConverterSingleFileTestGenerated.java | 6 ++++++ 5 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 j2k/testData/fileOrElement/issues/kt-6790.java create mode 100644 j2k/testData/fileOrElement/issues/kt-6790.kt diff --git a/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt b/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt index bc92738939a..d69a23972cb 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt @@ -58,8 +58,13 @@ private fun Converter.convertImport(fqName: FqName, ref: PsiJavaCodeReferenceEle if (!isOnDemand) { if (annotationConverter.isImportNotRequired(fqName)) return emptyList() - // If imported class has a kotlin analog, drop the import - if (JavaToKotlinClassMap.INSTANCE.isJavaPlatformClass(fqName)) return emptyList() + + val mapped = JavaToKotlinClassMap.INSTANCE.mapJavaToKotlin(fqName) + mapped?.let { + // If imported class has a kotlin analog, drop the import if it is not nested + if (!it.isNestedClass) return emptyList() + return convertNonStaticImport(it.asSingleFqName(), false, null) + } } //TODO: how to detect compiled Kotlin here? diff --git a/j2k/testData/fileOrElement/issues/kt-6790.java b/j2k/testData/fileOrElement/issues/kt-6790.java new file mode 100644 index 00000000000..569e8ea793d --- /dev/null +++ b/j2k/testData/fileOrElement/issues/kt-6790.java @@ -0,0 +1,6 @@ +import java.util.Map.Entry; + +public class A { + void foo(Entry o) { + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/issues/kt-6790.kt b/j2k/testData/fileOrElement/issues/kt-6790.kt new file mode 100644 index 00000000000..89807df4930 --- /dev/null +++ b/j2k/testData/fileOrElement/issues/kt-6790.kt @@ -0,0 +1,6 @@ +import kotlin.collections.Map.Entry + +class A { + internal fun foo(o: Entry) { + } +} \ No newline at end of file diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java index f1097232f96..a72acae17f4 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -2927,6 +2927,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("kt-6790.java") + public void testKt_6790() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/issues/kt-6790.java"); + doTest(fileName); + } + @TestMetadata("kt-696.java") public void testKt_696() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/issues/kt-696.java"); diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index fa1c1d58255..c168e1459ee 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -2927,6 +2927,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("kt-6790.java") + public void testKt_6790() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/issues/kt-6790.java"); + doTest(fileName); + } + @TestMetadata("kt-696.java") public void testKt_696() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/issues/kt-696.java");