new inference: distinguish assignment expressions with eq sign (IDEA-141157)

This commit is contained in:
Anna Kozlova
2015-06-10 15:04:59 +03:00
parent faa8cd1739
commit bdabf14d5d
2 changed files with 18 additions and 1 deletions
@@ -135,7 +135,7 @@ public class PsiPolyExpressionUtil {
private static boolean isAssignmentContext(PsiExpression expr, PsiElement context) {
return PsiUtil.isCondition(expr, context) ||
context instanceof PsiReturnStatement ||
context instanceof PsiAssignmentExpression ||
context instanceof PsiAssignmentExpression && ((PsiAssignmentExpression)context).getOperationTokenType() == JavaTokenType.EQ ||
context instanceof PsiVariable ||
context instanceof PsiLambdaExpression;
}
@@ -100,6 +100,23 @@ public class PsiPolyExpressionUtilTest extends LightCodeInsightFixtureTestCase {
assertTrue(PsiPolyExpressionUtil.isPolyExpression(psiExpression));
}
public void testConditionalInAssignment() throws Exception {
myFixture.configureByText("Foo.java", "class Foo {" +
" public static void main(String[] args) {\n" +
" Object obj = new Object();\n" +
" String str = \"\";\n" +
" str += args.length == 0 <caret>? obj : args[0];\n" +
" }" +
"}");
final PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getCaretOffset());
assertNotNull(elementAtCaret);
final PsiExpression psiExpression = PsiTreeUtil.getParentOfType(elementAtCaret, PsiExpression.class);
assertInstanceOf(psiExpression, PsiConditionalExpression.class);
assertFalse(PsiPolyExpressionUtil.isPolyExpression(psiExpression));
}
private PsiExpression findExpression(String textWithExpression) {
myFixture.configureByText("Foo.java", "import java.util.*;" +
"class Foo {" +