diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java index db6040decee4..a56df64c8367 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java @@ -73,7 +73,7 @@ public class JavaResolveUtil { if (visibility == JavaCodeFragment.VisibilityChecker.Visibility.NOT_VISIBLE) return false; } } - else if (isAllSeeingPlace(placeFile)) return true; + else if (ignoreReferencedElementAccessibility(placeFile)) return true; // We don't care about access rights in javadoc if (isInJavaDoc(place)) return true; @@ -85,7 +85,7 @@ public class JavaResolveUtil { int effectiveAccessLevel = PsiUtil.getAccessLevel(modifierList); PsiFile file = placeFile == null ? null : FileContextUtil.getContextFile(placeFile); //TODO: implementation method!!!! if (PsiImplUtil.isInServerPage(file) && PsiImplUtil.isInServerPage(member.getContainingFile())) return true; - if (isAllSeeingPlace(file)) return true; + if (ignoreReferencedElementAccessibility(file)) return true; if (effectiveAccessLevel == PsiUtil.ACCESS_LEVEL_PUBLIC) { return true; } @@ -142,9 +142,10 @@ public class JavaResolveUtil { return true; } - private static boolean isAllSeeingPlace(PsiFile placeFile) { - // TODO HACK introduce a special API here, don't use FileResolveScopeProvider (which just happens to be implemented by correct files) - return placeFile instanceof FileResolveScopeProvider && !PsiImplUtil.isInServerPage(placeFile); + private static boolean ignoreReferencedElementAccessibility(PsiFile placeFile) { + return placeFile instanceof FileResolveScopeProvider && + ((FileResolveScopeProvider) placeFile).ignoreReferencedElementAccessibility() && + !PsiImplUtil.isInServerPage(placeFile); } public static boolean isInJavaDoc(final PsiElement place) { diff --git a/platform/lang-api/src/com/intellij/psi/FileResolveScopeProvider.java b/platform/lang-api/src/com/intellij/psi/FileResolveScopeProvider.java index 6ef5b6a7858b..966b10728bba 100644 --- a/platform/lang-api/src/com/intellij/psi/FileResolveScopeProvider.java +++ b/platform/lang-api/src/com/intellij/psi/FileResolveScopeProvider.java @@ -25,4 +25,5 @@ import com.intellij.psi.search.GlobalSearchScope; */ public interface FileResolveScopeProvider { GlobalSearchScope getFileResolveScope(); + boolean ignoreReferencedElementAccessibility(); } diff --git a/xml/impl/src/com/intellij/psi/impl/source/xml/XmlFileImpl.java b/xml/impl/src/com/intellij/psi/impl/source/xml/XmlFileImpl.java index f598c4f0c6d2..6c9fd3c064cb 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/xml/XmlFileImpl.java +++ b/xml/impl/src/com/intellij/psi/impl/source/xml/XmlFileImpl.java @@ -111,4 +111,9 @@ public class XmlFileImpl extends PsiFileImpl implements XmlFile { public GlobalSearchScope getFileResolveScope() { return ProjectScope.getAllScope(getProject()); } + + @Override + public boolean ignoreReferencedElementAccessibility() { + return true; + } } diff --git a/xml/relaxng/src/org/intellij/plugins/relaxNG/compact/psi/impl/RncFileImpl.java b/xml/relaxng/src/org/intellij/plugins/relaxNG/compact/psi/impl/RncFileImpl.java index daeb05e783d0..497c74f736db 100644 --- a/xml/relaxng/src/org/intellij/plugins/relaxNG/compact/psi/impl/RncFileImpl.java +++ b/xml/relaxng/src/org/intellij/plugins/relaxNG/compact/psi/impl/RncFileImpl.java @@ -116,6 +116,11 @@ public class RncFileImpl extends PsiFileBase implements RncFile, XmlFile { return ProjectScope.getAllScope(getProject()); } + @Override + public boolean ignoreReferencedElementAccessibility() { + return false; + } + @Override public String toString() { return getClass().getSimpleName() + ":" + getName();