good code red: array access expr type should be treated as variable type (IDEA-67675)

This commit is contained in:
anna
2012-10-19 18:44:41 +02:00
parent 9953d363a7
commit 47dd9e09cd
2 changed files with 19 additions and 3 deletions
@@ -33,11 +33,11 @@ public class VarianceTesting {
VarianceTesting z = x.field;
VarianceTesting[] v = x.arrayField;
VarianceTesting v1 = x.arrayField[0];
<error descr="Incompatible types. Found: 'VarianceTesting', required: 'capture<? extends VarianceTesting>'">x.arrayField[0] = new VarianceTesting()</error>;
x.arrayField[0] = new VarianceTesting();
<error descr="Incompatible types. Found: 'VarianceTesting', required: 'capture<? extends VarianceTesting>'">x.field = new VarianceTesting()</error>;
VarianceTesting[] k = x.method();
k[0] = new VarianceTesting();
<error descr="Incompatible types. Found: 'VarianceTesting', required: 'capture<? extends VarianceTesting>'">x.method()[0] = new VarianceTesting()</error>;
x.method()[0] = new VarianceTesting();
<error descr="Incompatible types. Found: 'VarianceTesting[]', required: 'capture<? extends VarianceTesting>[]'">x.arrayField = new VarianceTesting[10]</error>;
l1.addAll<error descr="'addAll(java.util.Collection<? extends capture<? extends VarianceTesting>>)' in 'java.util.List' cannot be applied to '(java.util.ArrayList<VarianceTesting>)'">(new ArrayList<VarianceTesting>())</error>;
<error descr="Incompatible types. Found: 'java.util.ArrayList<java.lang.String>', required: 'java.util.List<? extends VarianceTesting>'">List<? extends VarianceTesting> l2 = new ArrayList<String>();</error>
@@ -266,4 +266,20 @@ class GenericFailureExample {
<T extends Comparable<T>> Comparator<T> bar(Class<T> type) {
return null;
}
}
//IDEA-67675
abstract class A67675<T>
{
abstract T foo();
}
abstract class B67675<T> extends A67675<T[]> { }
class C67675<T extends B67675<?>>
{
void foo(T x)
{
x.foo()[0] = "";
}
}