incompatible types: highlight parent call instead of lambda when the error isn't related to lambda (IDEA-218801)

GitOrigin-RevId: 17a2f1f62f7703930aa25a8cfd6dfd4a918e1fe7
This commit is contained in:
Anna.Kozlova
2019-10-10 08:50:12 +02:00
committed by intellij-monorepo-bot
parent 0edaac849d
commit 87deef960c
11 changed files with 15 additions and 21 deletions

View File

@@ -3,8 +3,8 @@ import java.util.*;
class Main {
void foo(List<Integer> list) {
bar(list, <error descr="Failed to resolve argument">i -> i.intValue()</error>, i -> i.<error descr="Cannot resolve method 'unknown' in 'Integer'">unknown</error>());
bar1(list, <error descr="Failed to resolve argument">i -> i.intValue()</error>, i -> i.<error descr="Cannot resolve method 'unknown' in 'Integer'">unknown</error>());
bar(list, i -> i.intValue(), i -> i.<error descr="Cannot resolve method 'unknown' in 'Integer'">unknown</error>());
bar1(list, i -> i.intValue(), i -> i.<error descr="Cannot resolve method 'unknown' in 'Integer'">unknown</error>());
}
<U, S_IN, S_OUT, R> R bar(List<S_IN> list,

View File

@@ -6,7 +6,7 @@ import java.util.function.Function;
class Test {
{
final Map<Comparable, List<Collection<?>>> families = sortingMerge(<error descr="Incompatible types. Found: 'java.util.Map<C,java.util.List<java.lang.Object>>', required: 'java.util.Map<java.lang.Comparable,java.util.List<java.util.Collection<?>>>'">(s) -> 0</error>);
final Map<Comparable, List<Collection<?>>> families = <error descr="Incompatible types. Found: 'java.util.Map<C,java.util.List<java.lang.Object>>', required: 'java.util.Map<java.lang.Comparable,java.util.List<java.util.Collection<?>>>'">sortingMerge((s) -> 0);</error>
}
private <C extends Comparable<C>, T> Map<C, List<T>> sortingMerge(Function<T, C> keyFunction) {

View File

@@ -5,6 +5,6 @@ class Test {
public static <T> void execute(Callable<T>[] cmds) { }
public static void main(String[] args) throws Exception{
execute(<error descr="Callable<T>[] is not a functional interface">() -> null</error>);
execute<error descr="'execute(java.util.concurrent.Callable<T>[])' in 'Test' cannot be applied to '(<lambda expression>)'">(() -> null)</error>;
}
}

View File

@@ -9,7 +9,7 @@ class A {
<error descr="Missing return statement">}</error>);
Map<Integer, Integer> map = Stream.iterate(5, <error descr="Incompatible types. Found: 'java.util.stream.Stream<java.lang.Integer>', required: 'java.util.Map<java.lang.Integer,java.lang.Integer>'">t -> t + 5</error>);
Map<Integer, Integer> map = <error descr="Incompatible types. Found: 'java.util.stream.Stream<java.lang.Integer>', required: 'java.util.Map<java.lang.Integer,java.lang.Integer>'">Stream.iterate(5, t -> t + 5);</error>
}

View File

@@ -26,7 +26,7 @@ abstract class NoFormalParamTypeInferenceNeeded {
{
map(a -> zip(text -> text));
zip(a -> zip(text -> text));
Integer zip = zip(<error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.Integer'">a -> zip(text -> text)</error>);
Integer zip = <error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.Integer'">zip(a -> zip(text -> text));</error>
}
}

View File

@@ -6,7 +6,7 @@ import java.util.stream.Stream;
class MyTest {
{
Stream<String> stream = Stream.of("a", "b", "c", "d");
Set<Integer> set = stream.collect(<error descr="No compile-time declaration for the method reference is found">()->new TreeSet<Integer>()</error>, TreeSet::<error descr="Incompatible types: String is not convertible to Integer">add</error>, TreeSet::addAll);
Set<Integer> set = stream.collect(()->new TreeSet<Integer>(), TreeSet::<error descr="Incompatible types: String is not convertible to Integer">add</error>, TreeSet::addAll);
}
}

View File

@@ -12,7 +12,7 @@ import java.util.function.Function;
class Test {
{
valueOf(processFirst(<error descr="Incompatible types. Found: 'java.lang.Object', required: 'char[]'">x -> x</error>));
valueOf(<error descr="Incompatible types. Found: 'java.lang.Object', required: 'char[]'">processFirst(x -> x)</error>);
}
public static <V> V processFirst(Function<Integer,V> f){

View File

@@ -23,7 +23,7 @@ class MyTest {
});
String s3 = foo(() -> switch (i) {default -> bar();});
String s4 = foo(() -> switch (i) {default -> { yield bar();}});
String s5 = foo(<error descr="Incompatible types. Found: 'java.lang.Integer', required: 'java.lang.String'">() -> switch (i) {default -> { yield 1;}}</error>);
String s5 = <error descr="Incompatible types. Found: 'java.lang.Integer', required: 'java.lang.String'">foo(() -> switch (i) {default -> { yield 1;}});</error>
String s6 = switch (i) {
case 1 -> <error descr="Bad type in switch expression: int cannot be converted to java.lang.String">2</error>;
default -> {