StreamApiMigrationInspection: support parentheses in while(((line) = readLine()) != null)

This commit is contained in:
Tagir Valeev
2018-11-08 17:15:26 +07:00
parent 66974e7445
commit 40dd2986ae
@@ -948,7 +948,10 @@ public class StreamApiMigrationInspection extends AbstractBaseJavaLocalInspectio
@Override
boolean isWriteAllowed(PsiVariable variable, PsiExpression reference) {
if (myVariable == variable) {
if (reference.getParent() == PsiTreeUtil.getParentOfType(myExpression, PsiAssignmentExpression.class)) return true;
if (PsiUtil.skipParenthesizedExprUp(reference.getParent()) ==
PsiTreeUtil.getParentOfType(myExpression, PsiAssignmentExpression.class)) {
return true;
}
PsiForStatement forStatement = PsiTreeUtil.getParentOfType(variable, PsiForStatement.class);
if (forStatement != null && forStatement == PsiTreeUtil.getParentOfType(myVariable, PsiForStatement.class)) {
return PsiTreeUtil.isAncestor(forStatement.getUpdate(), reference, false) ||
@@ -985,7 +988,7 @@ public class StreamApiMigrationInspection extends AbstractBaseJavaLocalInspectio
if (!BUFFERED_READER_READ_LINE.test(readerCall)) return null;
PsiExpression reader = readerCall.getMethodExpression().getQualifierExpression();
PsiLocalVariable lineVar = ExpressionUtils.resolveLocalVariable(assignment.getLExpression());
PsiLocalVariable lineVar = ExpressionUtils.resolveLocalVariable(PsiUtil.skipParenthesizedExprDown(assignment.getLExpression()));
if (lineVar == null) return null;
if (ReferencesSearch.search(lineVar).anyMatch(ref -> !PsiTreeUtil.isAncestor(loopStatement, ref.getElement(), true))) {
return null;