expected type by prefix expression should be calculated by parent (IDEA-166819)

This commit is contained in:
Anna Kozlova
2017-01-19 17:36:51 +03:00
parent f28bfb5bcb
commit 93fa3ed8c8
5 changed files with 42 additions and 3 deletions

View File

@@ -754,8 +754,9 @@ public class ExpectedTypesProvider {
public void visitPrefixExpression(@NotNull PsiPrefixExpression expr) {
IElementType i = expr.getOperationTokenType();
final PsiType type = expr.getType();
final TailType tailType = expr.getParent() instanceof PsiAssignmentExpression && ((PsiAssignmentExpression) expr.getParent()).getRExpression() == expr ?
getAssignmentRValueTailType((PsiAssignmentExpression) expr.getParent()) :
final PsiElement parent = expr.getParent();
final TailType tailType = parent instanceof PsiAssignmentExpression && ((PsiAssignmentExpression)parent).getRExpression() == expr ?
getAssignmentRValueTailType((PsiAssignmentExpression)parent) :
TailType.NONE;
if (i == JavaTokenType.PLUSPLUS || i == JavaTokenType.MINUSMINUS || i == JavaTokenType.TILDE) {
ExpectedTypeInfoImpl info;
@@ -773,7 +774,13 @@ public class ExpectedTypesProvider {
myResult.add(info);
}
else if (i == JavaTokenType.PLUS || i == JavaTokenType.MINUS) {
myResult.add(createInfoImpl(PsiType.DOUBLE, ExpectedTypeInfo.TYPE_OR_SUBTYPE, PsiType.INT, tailType));
if (parent instanceof PsiStatement) {
myResult.add(createInfoImpl(PsiType.DOUBLE, ExpectedTypeInfo.TYPE_OR_SUBTYPE, PsiType.INT, tailType));
}
else {
myExpr = (PsiExpression)myExpr.getParent();
parent.accept(this);
}
}
else if (i == JavaTokenType.EXCL) {
myResult.add(createInfoImpl(PsiType.BOOLEAN, ExpectedTypeInfo.TYPE_STRICTLY, PsiType.BOOLEAN, tailType));

View File

@@ -0,0 +1,10 @@
// "Create method 'f'" "true"
class A {
{
double d = -f();
}
private double f() {
return 0;
}
}

View File

@@ -0,0 +1,10 @@
// "Create method 'f'" "true"
class A {
{
-f();
}
private int f() {
return 0;
}
}

View File

@@ -0,0 +1,6 @@
// "Create method 'f'" "true"
class A {
{
double d = -f<caret>();
}
}

View File

@@ -0,0 +1,6 @@
// "Create method 'f'" "true"
class A {
{
-f<caret>();
}
}