IDEA-163082 "can be replaced with addAll" inspection suggests a recursive call; support "this" qualifier for collect/addAll conversion

This commit is contained in:
Tagir Valeev
2016-10-25 11:38:24 +07:00
parent 4ce59ee865
commit 6e3d0c6c0e
4 changed files with 79 additions and 2 deletions
@@ -259,7 +259,13 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo
final PsiVariable variable = tb.getVariable();
final PsiMethodCallExpression methodCallExpression = tb.getSingleMethodCall();
LOG.assertTrue(methodCallExpression != null);
return isIdentityMapping(variable, methodCallExpression.getArgumentList().getExpressions()[0]);
if (!isIdentityMapping(variable, methodCallExpression.getArgumentList().getExpressions()[0])) return false;
PsiExpression qualifierExpression = methodCallExpression.getMethodExpression().getQualifierExpression();
if(qualifierExpression == null || qualifierExpression instanceof PsiThisExpression) {
PsiMethod method = PsiTreeUtil.getParentOfType(methodCallExpression, PsiMethod.class);
return method == null || !method.getName().equals("addAll");
}
return true;
}
private static boolean isCollectCall(TerminalBlock tb) {
@@ -280,7 +286,7 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo
}
qualifierClass = PsiUtil.resolveClassInType(qualifierExpression.getType());
}
else if (qualifierExpression == null) {
else if (qualifierExpression == null || qualifierExpression instanceof PsiThisExpression) {
final PsiClass enclosingClass = PsiTreeUtil.getParentOfType(methodCallExpression, PsiClass.class);
if (PsiUtil.getEnclosingStaticElement(methodCallExpression, enclosingClass) == null) {
qualifierClass = enclosingClass;