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) {
}
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;
--- /dev/null
+// "Replace with addAll" "true"
+
+import java.util.*;
+
+public class Main {
+ static class MyList extends AbstractCollection<String> {
+ @Override
+ public Iterator<String> iterator() {
+ return Collections.emptyIterator();
+ }
+
+ @Override
+ public int size() {
+ return 0;
+ }
+
+ public boolean myAdd(Collection<? extends String> c) {
+ this.addAll(c);
+ return true;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+// "Replace with addAll" "false"
+
+import java.util.*;
+
+public class Main {
+ static class MyList extends AbstractCollection<String> {
+ @Override
+ public Iterator<String> iterator() {
+ return Collections.emptyIterator();
+ }
+
+ @Override
+ public int size() {
+ return 0;
+ }
+
+ @Override
+ public boolean addAll(Collection<? extends String> c) {
+ for (String e : <caret>c) {
+ add(e);
+ }
+ return true;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+// "Replace with addAll" "true"
+
+import java.util.*;
+
+public class Main {
+ static class MyList extends AbstractCollection<String> {
+ @Override
+ public Iterator<String> iterator() {
+ return Collections.emptyIterator();
+ }
+
+ @Override
+ public int size() {
+ return 0;
+ }
+
+ public boolean myAdd(Collection<? extends String> c) {
+ for (String e : <caret>c) {
+ this.add(e);
+ }
+ return true;
+ }
+ }
+}
\ No newline at end of file