extract method: enable duplicates inside inner classes called methods from outer (IDEA-143504)

This commit is contained in:
Anna Kozlova
2015-08-11 06:00:37 -07:00
parent 1bda9a4e62
commit c7dfe22f31
4 changed files with 47 additions and 4 deletions

View File

@@ -376,10 +376,13 @@ public class DuplicatesFinder {
final PsiClass patternClass = RefactoringChangeUtil.getThisClass(pattern);
final PsiClass candidateClass = RefactoringChangeUtil.getThisClass(candidate);
if (resolveResult1 == resolveResult2 &&
resolveResult1 instanceof PsiMember &&
!InheritanceUtil.isInheritorOrSelf(candidateClass, patternClass, true) &&
InheritanceUtil.isInheritorOrSelf(candidateClass, ((PsiMember)resolveResult1).getContainingClass(), true)) {
return false;
resolveResult1 instanceof PsiMember) {
final PsiClass containingClass = ((PsiMember)resolveResult1).getContainingClass();
if (!InheritanceUtil.isInheritorOrSelf(candidateClass, patternClass, true) &&
InheritanceUtil.isInheritorOrSelf(candidateClass, containingClass, true) &&
InheritanceUtil.isInheritorOrSelf(patternClass, containingClass, true)) {
return false;
}
}
}

View File

@@ -0,0 +1,16 @@
import java.util.*;
class Main {
private final Map<Integer, Map<String, String>> myScheduledUpdates = null;
void foo() {
new Runnable() {
@Override
public void run() {
<selection>myScheduledUpdates.keySet().toArray(new Object[myScheduledUpdates.keySet().size()])</selection>;
}
};
myScheduledUpdates.keySet().toArray(new Object[myScheduledUpdates.keySet().size()]);
}
}

View File

@@ -0,0 +1,20 @@
import java.util.*;
class Main {
private final Map<Integer, Map<String, String>> myScheduledUpdates = null;
void foo() {
new Runnable() {
@Override
public void run() {
newMethod();
}
};
newMethod();
}
private Object[] newMethod() {
return myScheduledUpdates.keySet().toArray(new Object[myScheduledUpdates.keySet().size()]);
}
}

View File

@@ -225,6 +225,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase {
doDuplicatesTest();
}
public void testDuplicatesFromAnonymous() throws Exception {
doDuplicatesTest();
}
public void testCodeDuplicatesWithContinueNoReturn() throws Exception {
doDuplicatesTest();
}