class shadowing

This commit is contained in:
Anna Kozlova
2012-06-04 22:36:20 +04:00
parent e3ab850ddc
commit e5828700d5
2 changed files with 32 additions and 3 deletions
@@ -26,7 +26,6 @@ import com.intellij.psi.scope.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.SmartList;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -153,7 +152,7 @@ public class ClassResolverProcessor extends BaseScopeProcessor implements NameHi
}
}
boolean infoAccessible = info.isAccessible() && !otherClass.hasModifierProperty(PsiModifier.PRIVATE);
boolean infoAccessible = info.isAccessible() && isAccessible(otherClass);
if (infoAccessible && !accessible) {
return Domination.DOMINATED_BY;
}
@@ -184,6 +183,21 @@ public class ClassResolverProcessor extends BaseScopeProcessor implements NameHi
return Domination.EQUAL;
}
private boolean isAccessible(PsiClass otherClass) {
if (otherClass.hasModifierProperty(PsiModifier.PRIVATE)) {
final PsiClass containingClass = otherClass.getContainingClass();
PsiClass containingPlaceClass = PsiTreeUtil.getParentOfType(myPlace, PsiClass.class, false);
while (containingPlaceClass != null) {
if (containingClass == containingPlaceClass) {
return true;
}
containingPlaceClass = PsiTreeUtil.getParentOfType(containingPlaceClass, PsiClass.class);
}
return false;
}
return true;
}
private boolean isAmbiguousInherited(PsiClass containingClass1) {
PsiClass psiClass = PsiTreeUtil.getParentOfType(myPlace, PsiClass.class);
while (psiClass != null) {
@@ -213,7 +227,7 @@ public class ClassResolverProcessor extends BaseScopeProcessor implements NameHi
for (int i = myCandidates.size()-1; i>=0; i--) {
ClassCandidateInfo info = myCandidates.get(i);
Domination domination = dominates(aClass, accessible && !aClass.hasModifierProperty(PsiModifier.PRIVATE), fqName, info);
Domination domination = dominates(aClass, accessible && isAccessible(aClass), fqName, info);
if (domination == Domination.DOMINATED_BY) {
return true;
}
@@ -1,3 +1,5 @@
import java.io.*;
public class Main {
static interface A
{
@@ -80,4 +82,17 @@ class BAO {
void foo(){}
}
}
class WithFileInputStream {
private static final Runnable runn = new Runnable() {
public void run() {
new FileInputStream("path");
}
};
private static class FileInputStream {
private FileInputStream(String str) {
}
}
}