array access: don't open captured wildcards

This commit is contained in:
Anna.Kozlova
2016-04-20 14:25:15 +02:00
parent ee4f41b14c
commit 5f72c7380c
3 changed files with 8 additions and 8 deletions

View File

@@ -20,8 +20,8 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.Constants;
import com.intellij.psi.impl.source.tree.ChildRole;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.ChildRoleBase;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
public class PsiArrayAccessExpressionImpl extends ExpressionPsiElement implements PsiArrayAccessExpression, Constants {
@@ -46,7 +46,7 @@ public class PsiArrayAccessExpressionImpl extends ExpressionPsiElement implement
public PsiType getType() {
PsiType arrayType = getArrayExpression().getType();
if (!(arrayType instanceof PsiArrayType)) return null;
return GenericsUtil.getVariableTypeByExpressionType(((PsiArrayType)arrayType).getComponentType(), false);
return ((PsiArrayType)arrayType).getComponentType();
}
@Override

View File

@@ -33,11 +33,11 @@ class VarianceTesting {
VarianceTesting z = x.field;
VarianceTesting[] v = x.arrayField;
VarianceTesting v1 = x.arrayField[0];
x.arrayField[0] = new VarianceTesting();
<error descr="Incompatible types. Found: 'VarianceTesting', required: 'capture<? extends VarianceTesting>'">x.arrayField[0] = new VarianceTesting()</error>;
<error descr="Incompatible types. Found: 'VarianceTesting', required: 'capture<? extends VarianceTesting>'">x.field = new VarianceTesting()</error>;
VarianceTesting[] k = x.method();
k[0] = new VarianceTesting();
x.method()[0] = new VarianceTesting();
<error descr="Incompatible types. Found: 'VarianceTesting', required: 'capture<? extends VarianceTesting>'">x.method()[0] = new VarianceTesting()</error>;
<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>
@@ -280,6 +280,6 @@ class C67675<T extends B67675<?>>
{
void foo(T x)
{
x.foo()[0] = "";
<error descr="Incompatible types. Found: 'java.lang.String', required: 'capture<?>'">x.foo()[0] = ""</error>;
}
}

View File

@@ -33,11 +33,11 @@ class VarianceTesting {
VarianceTesting z = x.field;
VarianceTesting[] v = x.arrayField;
VarianceTesting v1 = x.arrayField[0];
x.arrayField[0] = new VarianceTesting();
<error descr="Incompatible types. Found: 'VarianceTesting', required: 'capture<? extends VarianceTesting>'">x.arrayField[0] = new VarianceTesting()</error>;
<error descr="Incompatible types. Found: 'VarianceTesting', required: 'capture<? extends VarianceTesting>'">x.field = new VarianceTesting()</error>;
VarianceTesting[] k = x.method();
k[0] = new VarianceTesting();
x.method()[0] = new VarianceTesting();
<error descr="Incompatible types. Found: 'VarianceTesting', required: 'capture<? extends VarianceTesting>'">x.method()[0] = new VarianceTesting()</error>;
<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>
@@ -280,6 +280,6 @@ class C67675<T extends B67675<?>>
{
void foo(T x)
{
x.foo()[0] = "";
<error descr="Incompatible types. Found: 'java.lang.String', required: 'capture<?>'">x.foo()[0] = ""</error>;
}
}