New J2K: retrieve constructor call return type correctly

#KT-33431 fixed
This commit is contained in:
Ilya Kirillov
2019-08-26 17:19:32 +03:00
parent 982e7fdd86
commit ca0cc13097
5 changed files with 39 additions and 5 deletions
@@ -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<JKType>
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() {
@@ -0,0 +1,7 @@
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
}
@@ -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<String> names = Arrays.asList("A", "B");
List<Person> people = names.stream().map(Person::new).collect(Collectors.toList());
}
}
+10
View File
@@ -0,0 +1,10 @@
import java.util.Arrays
import java.util.stream.Collectors
object TestLambda {
@JvmStatic
fun main(args: Array<String>) {
val names: List<String> = Arrays.asList("A", "B")
val people: List<Person?> = names.stream().map { name: String -> Person(name) }.collect(Collectors.toList())
}
}
@@ -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");