IDEA-141923 Errors in for-each statement header aren't highlighted if there're errors in its body

This commit is contained in:
Alexey Kudravtsev
2015-06-26 14:42:13 +03:00
parent 5465f1cc88
commit 9e99eabbb6
8 changed files with 81 additions and 68 deletions
@@ -13,7 +13,7 @@ class UnsupportedFeatures {
List<error descr="Generics are not supported at this language level"><String></error> list =
new ArrayList<error descr="Generics are not supported at this language level"><></error>();
<error descr="For-each loops are not supported at this language level">for (String s : list) {}</error>
<error descr="For-each loops are not supported at this language level">for (Object s : list) {}</error>
Arrays.asList<error descr="'asList(java.lang.String...)' in 'java.util.Arrays' cannot be applied to '(java.lang.String)'">("")</error>;
<error descr="Incompatible types. Found: 'boolean', required: 'java.lang.Boolean'">Boolean b = true;</error>
<error descr="Incompatible types. Found: 'java.lang.Boolean', required: 'boolean'">boolean b1 = Boolean.TRUE;</error>
@@ -23,7 +23,7 @@ public class DefaultEventSource<<warning descr="Type parameter 'T' is never used
final Iterator<String> <warning descr="Variable 'keys2' is assigned but never accessed">keys2</warning>;
keys2 = <warning descr="Unchecked assignment: 'java.util.Iterator' to 'java.util.Iterator<java.lang.String>'. Reason: 'source' has raw type, so result of getKeys is erased">source.getKeys()</warning>;
for (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">String <warning descr="Parameter 'o' is never used">o</warning> : super.getList()</error>) {}
for (<error descr="Incompatible types. Found: 'java.lang.String', required: 'java.lang.Object'">String <warning descr="Parameter 'o' is never used">o</warning></error> : super.getList()) {}
}
}
@@ -1,30 +1,33 @@
class a {
void f(int[] c) {
for (int i:c) {}
for (<error descr="Incompatible types. Found: 'int', required: 'char'">char i:c</error>) {}
for (<error descr="Incompatible types. Found: 'char', required: 'int'">char i</error>:c) {}
for (double i:c) {}
double[] db = null;
for (<error descr="Incompatible types. Found: 'double', required: 'int'">int i:db</error>) {}
for (<error descr="Incompatible types. Found: 'int', required: 'double'">int i</error>:db) {}
for (double i:db) {}
for (<error descr="Incompatible types. Found: 'int', required: 'double'">int i</error>:db) {
// highlight header event if body has problems
<error descr="Incompatible types. Found: 'java.lang.String', required: 'int'">int di = "";</error>
}
java.util.List list = null;
for (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">String i:list</error>) {}
for (<error descr="Incompatible types. Found: 'java.lang.String', required: 'java.lang.Object'">String i</error>:list) {}
for (Object o:list) {}
java.util.List<Integer> ct = null;
for (Number n:ct) {}
for (Object n:ct) {}
for (Integer n:ct) {}
for (<error descr="Incompatible types. Found: 'java.lang.Integer', required: 'java.lang.String'">String i:ct</error>) {}
for (<error descr="Incompatible types. Found: 'java.lang.Integer', required: 'java.util.List<java.lang.Integer>'">java.util.List<Integer> i:ct</error>) {}
for (<error descr="Incompatible types. Found: 'java.lang.String', required: 'java.lang.Integer'">String i</error>:ct) {}
for (<error descr="Incompatible types. Found: 'java.util.List<java.lang.Integer>', required: 'java.lang.Integer'">java.util.List<Integer> i</error>:ct) {}
Object o = null;
for (Object oi: (Iterable)o) {}
// error descr="Incompatible types. Found: 'double', required: 'int'" was not shown because there is an error in nested for
for (int i : db) {
for (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'int'">int p: list</error>) {}
for (<error descr="Incompatible types. Found: 'int', required: 'double'">int i</error> : db) {
for (<error descr="Incompatible types. Found: 'int', required: 'java.lang.Object'">int p</error>: list) {}
}
for (int gjkh : <error descr="foreach not applicable to type 'int'">222</error>) {
@@ -1,9 +1,8 @@
interface Container<T extends Content> extends Iterable<T> {}
interface Content {}
class Main {
public static void doSomething(Container container) {
for (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'Content'">Content content : container</error>) {}
for (<error descr="Incompatible types. Found: 'Content', required: 'java.lang.Object'">Content content</error> : container) {}
}
}
@@ -1,29 +1,29 @@
class a {
void f(int[] c) {
for (int i:c) {}
for (<error descr="Incompatible types. Found: 'int', required: 'char'">char i:c</error>) {}
for (<error descr="Incompatible types. Found: 'char', required: 'int'">char i</error>:c) {}
for (double i:c) {}
double[] db = null;
for (<error descr="Incompatible types. Found: 'double', required: 'int'">int i:db</error>) {}
for (<error descr="Incompatible types. Found: 'int', required: 'double'">int i</error>:db) {}
for (double i:db) {}
java.util.List list = null;
for (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">String i:list</error>) {}
for (<error descr="Incompatible types. Found: 'java.lang.String', required: 'java.lang.Object'">String i</error>:list) {}
for (Object o:list) {}
java.util.List<Integer> ct = null;
for (Number n:ct) {}
for (Object n:ct) {}
for (Integer n:ct) {}
for (<error descr="Incompatible types. Found: 'java.lang.Integer', required: 'java.lang.String'">String i:ct</error>) {}
for (<error descr="Incompatible types. Found: 'java.lang.Integer', required: 'java.util.List<java.lang.Integer>'">java.util.List<Integer> i:ct</error>) {}
for (<error descr="Incompatible types. Found: 'java.lang.String', required: 'java.lang.Integer'">String i</error>:ct) {}
for (<error descr="Incompatible types. Found: 'java.util.List<java.lang.Integer>', required: 'java.lang.Integer'">java.util.List<Integer> i</error>:ct) {}
Object o = null;
for (Object oi: (Iterable)o) {}
for (int i:db) {
for (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'int'">int p: list</error>) {}
for (<error descr="Incompatible types. Found: 'int', required: 'double'">int i</error>:db) {
for (<error descr="Incompatible types. Found: 'int', required: 'java.lang.Object'">int p</error>: list) {}
}
}
}