From ca0cc130976d9cec07342f7dda7d12ae351035a3 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 26 Aug 2019 17:19:32 +0300 Subject: [PATCH] New J2K: retrieve constructor call return type correctly #KT-33431 fixed --- .../jetbrains/kotlin/nj2k/symbols/JKMethodSymbol.kt | 10 +++++----- .../function/referenceToConstructor.external.java | 7 +++++++ .../newJ2k/function/referenceToConstructor.java | 12 ++++++++++++ .../newJ2k/function/referenceToConstructor.kt | 10 ++++++++++ ...JavaToKotlinConverterSingleFileTestGenerated.java | 5 +++++ 5 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 nj2k/testData/newJ2k/function/referenceToConstructor.external.java create mode 100644 nj2k/testData/newJ2k/function/referenceToConstructor.java create mode 100644 nj2k/testData/newJ2k/function/referenceToConstructor.kt diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKMethodSymbol.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKMethodSymbol.kt index 068e15c1bd7..a2836170298 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKMethodSymbol.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKMethodSymbol.kt @@ -9,13 +9,12 @@ import com.intellij.psi.PsiMethod import com.intellij.psi.PsiReference import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName +import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.nj2k.JKSymbolProvider -import org.jetbrains.kotlin.nj2k.tree.JKClass -import org.jetbrains.kotlin.nj2k.tree.JKMethod -import org.jetbrains.kotlin.nj2k.tree.JKType +import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.JKClassTypeImpl import org.jetbrains.kotlin.nj2k.tree.impl.JKNoTypeImpl -import org.jetbrains.kotlin.nj2k.tree.toJK import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.utils.addToStdlib.safeAs @@ -49,7 +48,8 @@ class JKMultiverseMethodSymbol( override val parameterTypes: List get() = target.parameterList.parameters.map { it.type.toJK(symbolProvider) } override val returnType: JKType - get() = target.returnType!!.toJK(symbolProvider) + get() = target.returnType?.toJK(symbolProvider) // null for constructor call + ?: symbolProvider.provideClassSymbol(target.getKotlinFqName()!!).asType(Nullability.NotNull) override val fqName: String get() { diff --git a/nj2k/testData/newJ2k/function/referenceToConstructor.external.java b/nj2k/testData/newJ2k/function/referenceToConstructor.external.java new file mode 100644 index 00000000000..8aec8187edf --- /dev/null +++ b/nj2k/testData/newJ2k/function/referenceToConstructor.external.java @@ -0,0 +1,7 @@ +public class Person { + private final String name; + + public Person(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/nj2k/testData/newJ2k/function/referenceToConstructor.java b/nj2k/testData/newJ2k/function/referenceToConstructor.java new file mode 100644 index 00000000000..29f5a456522 --- /dev/null +++ b/nj2k/testData/newJ2k/function/referenceToConstructor.java @@ -0,0 +1,12 @@ +// RUNTIME_WITH_FULL_JDK + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class TestLambda { + public static void main(String[] args) { + List names = Arrays.asList("A", "B"); + List people = names.stream().map(Person::new).collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/nj2k/testData/newJ2k/function/referenceToConstructor.kt b/nj2k/testData/newJ2k/function/referenceToConstructor.kt new file mode 100644 index 00000000000..d933bb19204 --- /dev/null +++ b/nj2k/testData/newJ2k/function/referenceToConstructor.kt @@ -0,0 +1,10 @@ +import java.util.Arrays +import java.util.stream.Collectors + +object TestLambda { + @JvmStatic + fun main(args: Array) { + val names: List = Arrays.asList("A", "B") + val people: List = names.stream().map { name: String -> Person(name) }.collect(Collectors.toList()) + } +} diff --git a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java index 1e197f4fcdc..a757a79905b 100644 --- a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java @@ -2443,6 +2443,11 @@ public class NewJavaToKotlinConverterSingleFileTestGenerated extends AbstractNew runTest("nj2k/testData/newJ2k/function/public.java"); } + @TestMetadata("referenceToConstructor.java") + public void testReferenceToConstructor() throws Exception { + runTest("nj2k/testData/newJ2k/function/referenceToConstructor.java"); + } + @TestMetadata("synchronizedMethod.java") public void testSynchronizedMethod() throws Exception { runTest("nj2k/testData/newJ2k/function/synchronizedMethod.java");