rename: qualify to avoid undiagnosed shadowing ( IDEA-20634 )

This commit is contained in:
anna
2010-06-03 12:39:39 +04:00
parent 941142b346
commit a4b700a126
6 changed files with 90 additions and 0 deletions
@@ -139,6 +139,12 @@ public class RenameJavaClassProcessor extends RenamePsiElementProcessor {
PsiClass parent = (PsiClass)aClass.getParent();
Collection<PsiClass> inheritors = ClassInheritorsSearch.search(parent, parent.getUseScope(), true).findAll();
for (PsiClass inheritor : inheritors) {
if (newName.equals(inheritor.getName())) {
final ClassCollisionsDetector classCollisionsDetector = new ClassCollisionsDetector(aClass);
for (PsiReference reference : ReferencesSearch.search(inheritor, new LocalSearchScope(inheritor))) {
classCollisionsDetector.addClassCollisions(reference.getElement(), newName, result);
}
}
PsiClass[] inners = inheritor.getInnerClasses();
for (PsiClass inner : inners) {
if (newName.equals(inner.getName())) {
@@ -0,0 +1,19 @@
class A {
class <caret>B {
int x = 42;
}
}
public class D {
static class C extends A {
int x = 23;
int m() {
return C.this.x;
}
}
public static void main(String[] args) {
System.out.println(new C().m());
}
}
@@ -0,0 +1,19 @@
class A {
class C {
int x = 42;
}
}
public class D {
static class C extends A {
int x = 23;
int m() {
return D.C.this.x;
}
}
public static void main(String[] args) {
System.out.println(new C().m());
}
}
@@ -0,0 +1,19 @@
class A {
static class <caret>B {
static int x = 42;
}
}
public class D {
static class C extends A {
static int x = 23;
static int m() {
return C.x;
}
}
public static void main(String[] args) {
System.out.println(C.m());
}
}
@@ -0,0 +1,19 @@
class A {
static class C {
static int x = 42;
}
}
public class D {
static class C extends A {
static int x = 23;
static int m() {
return D.C.x;
}
}
public static void main(String[] args) {
System.out.println(D.C.m());
}
}
@@ -160,6 +160,14 @@ public class RenameCollisionsTest extends LightCodeInsightTestCase {
doTest("P");
}
public void testRenameInnerInSuperClass() throws Exception {
doTest("C");
}
public void testRenameInnerInSuperClassStatic() throws Exception {
doTest("C");
}
private void doTest(final String newName) throws Exception {
configureByFile(BASE_PATH + getTestName(false) + ".java");
PsiElement element = TargetElementUtilBase