New J2K: Don't fail on captured types & don't use functional interface with captured types

Note: we have to print captured types for lambda parameters.
It is needed for nullability inference as it requires explicit types specification to work.
Later in post-processing we remove explicit type specifications for lambda parameters which have captured types

#KT-33186 fixed
This commit is contained in:
Ilya Kirillov
2019-08-09 12:46:50 +03:00
parent 0c3c0989b4
commit 09ab98a4f8
17 changed files with 180 additions and 14 deletions
@@ -0,0 +1,13 @@
// RUNTIME_WITH_FULL_JDK
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
public class Test {
private void addPackages(Collection<? extends Number> packages) {
List<Number> sorted = packages.stream()
.filter(repoPackage -> repoPackage != null)
.collect(Collectors.toList());
}
}
@@ -0,0 +1,9 @@
import java.util.stream.Collectors
class Test {
private fun addPackages(packages: Collection<Number>) {
val sorted: List<Number> = packages.stream()
.filter { repoPackage: Number? -> repoPackage != null }
.collect(Collectors.toList())
}
}
@@ -0,0 +1,8 @@
public interface SamFace<T> {
void samMethod(T p);
}
public class SamAcceptor<T> {
public void acceptSam(SamFace<T> sam) {
}
}
@@ -0,0 +1,13 @@
public class Test {
public void useSamUpper(SamAcceptor<? extends Number> acceptor) {
acceptor.acceptSam(p -> {});
}
public void useSamLower(SamAcceptor<? super Number> acceptor) {
acceptor.acceptSam(p -> {});
}
public void useSam(SamAcceptor<?> acceptor) {
acceptor.acceptSam(p -> {});
}
}
@@ -0,0 +1,13 @@
class Test {
fun useSamUpper(acceptor: SamAcceptor<out Number?>) {
acceptor.acceptSam { p: Number? -> }
}
fun useSamLower(acceptor: SamAcceptor<in Number?>) {
acceptor.acceptSam { p -> }
}
fun useSam(acceptor: SamAcceptor<*>) {
acceptor.acceptSam { p: Any? -> }
}
}
@@ -0,0 +1,8 @@
public interface SamFace<T> {
void samMethod(int p);
}
public class SamAcceptor<T> {
public void acceptSam(SamFace<T> sam) {
}
}
@@ -0,0 +1,13 @@
public class Test {
public void useSamUpper(SamAcceptor<? extends Number> acceptor) {
acceptor.acceptSam(p -> {});
}
public void useSamLower(SamAcceptor<? super Number> acceptor) {
acceptor.acceptSam(p -> {});
}
public void useSam(SamAcceptor<?> acceptor) {
acceptor.acceptSam(p -> {});
}
}
@@ -0,0 +1,13 @@
class Test {
fun useSamUpper(acceptor: SamAcceptor<out Number?>) {
acceptor.acceptSam { p: Int -> }
}
fun useSamLower(acceptor: SamAcceptor<in Number?>) {
acceptor.acceptSam { p: Int -> }
}
fun useSam(acceptor: SamAcceptor<*>) {
acceptor.acceptSam { p: Int -> }
}
}