move instance methods: leave this refs inside anonymous classes untouched (IDEA-71575)

This commit is contained in:
anna
2011-08-18 13:18:40 +02:00
parent 9ccddbfdad
commit 3f144f08b4
5 changed files with 37 additions and 2 deletions

View File

@@ -61,7 +61,7 @@ public class MoveInstanceMembersUtil {
if (expression instanceof PsiThisExpression) {
final PsiJavaCodeReferenceElement thisQualifier = ((PsiThisExpression)expression).getQualifier();
PsiClass thisClass = thisQualifier == null ? PsiTreeUtil.getParentOfType(expression, PsiClass.class, true) : ((PsiClass)thisQualifier.resolve());
if (thisClass != null) {
if (thisClass != null && !PsiTreeUtil.isAncestor( refMember,thisClass, false)) {
addReferencedMember(map, thisClass, null);
}
}

View File

@@ -372,7 +372,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
body.accept(new JavaRecursiveElementVisitor() {
@Override public void visitThisExpression(PsiThisExpression expression) {
final PsiClass classReferencedByThis = MoveInstanceMembersUtil.getClassReferencedByThis(expression);
if (classReferencedByThis != null) {
if (classReferencedByThis != null && !PsiTreeUtil.isAncestor(myMethod, classReferencedByThis, false)) {
final PsiElementFactory factory = JavaPsiFacade.getInstance(myProject).getElementFactory();
String paramName = getParameterNameToCreate(classReferencedByThis);
try {

View File

@@ -0,0 +1,16 @@
public class Test {
private void prepare<caret>AnonymousClasses(JetElement aClass) {
aClass.acceptChildren(new JetVisitor() {
public void visitJetElement(JetElement element) {
element.acceptChildren(this);
}
});
}
}
class JetElement {
void acceptChildren(JetVisitor v) {}
}
class JetVisitor {}

View File

@@ -0,0 +1,17 @@
public class Test {
}
class JetElement {
void acceptChildren(JetVisitor v) {}
private void prepareAnonymousClasses() {
acceptChildren(new JetVisitor() {
public void visitJetElement(JetElement element) {
element.acceptChildren(this);
}
});
}
}
class JetVisitor {}

View File

@@ -47,6 +47,8 @@ public class MoveInstanceMethodTest extends LightCodeInsightTestCase {
public void testIDEADEV11257() throws Exception { doTest(true, 0); }
public void testThisInAnonymous() throws Exception { doTest(true, 0); }
public void testEscalateVisibility() throws Exception {
doTest(true, 0, VisibilityUtil.ESCALATE_VISIBILITY);
}