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 5d7110759954..b3860c3df88d 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 @@ -49,14 +49,23 @@ public class JavaResolveUtil { public static boolean isAccessible(@NotNull PsiMember member, @Nullable final PsiClass memberClass, @Nullable PsiModifierList modifierList, - @NotNull PsiElement place, + @NotNull PsiElement place, @Nullable PsiClass accessObjectClass, @Nullable final PsiElement fileResolveScope) { + return isAccessible(member, memberClass, modifierList, place, accessObjectClass, fileResolveScope, place.getContainingFile()); + } + + public static boolean isAccessible(@NotNull PsiMember member, + @Nullable final PsiClass memberClass, + @Nullable PsiModifierList modifierList, + @NotNull PsiElement place, + @Nullable PsiClass accessObjectClass, + @Nullable final PsiElement fileResolveScope, + final PsiFile placeFile) { if (modifierList == null) return true; - final PsiFile placeContainingFile = place.getContainingFile(); final PsiManager manager = member.getManager(); - if (placeContainingFile instanceof JavaCodeFragment) { - JavaCodeFragment fragment = (JavaCodeFragment)placeContainingFile; + if (placeFile instanceof JavaCodeFragment) { + JavaCodeFragment fragment = (JavaCodeFragment)placeFile; JavaCodeFragment.VisibilityChecker visibilityChecker = fragment.getVisibilityChecker(); if (visibilityChecker != null) { JavaCodeFragment.VisibilityChecker.Visibility visibility = visibilityChecker.isDeclarationVisible(member, place); @@ -64,17 +73,17 @@ public class JavaResolveUtil { if (visibility == JavaCodeFragment.VisibilityChecker.Visibility.NOT_VISIBLE) return false; } } - else if (placeContainingFile instanceof XmlFile && !JspPsiUtil.isInJspFile(placeContainingFile)) return true; + else if (placeFile instanceof XmlFile && !JspPsiUtil.isInJspFile(placeFile)) return true; // We don't care about access rights in javadoc if (isInJavaDoc(place)) return true; if (accessObjectClass != null) { if (!isAccessible(accessObjectClass, accessObjectClass.getContainingClass(), accessObjectClass.getModifierList(), place, null, - null)) return false; + null, placeFile)) return false; } int effectiveAccessLevel = PsiUtil.getAccessLevel(modifierList); - PsiFile file = FileContextUtil.getContextFile(placeContainingFile); //TODO: implementation method!!!! + PsiFile file = FileContextUtil.getContextFile(placeFile); //TODO: implementation method!!!! if (JspPsiUtil.isInJspFile(file) && JspPsiUtil.isInJspFile(member.getContainingFile())) return true; if (file instanceof XmlFile && !JspPsiUtil.isInJspFile(file)) return true; if (effectiveAccessLevel == PsiUtil.ACCESS_LEVEL_PUBLIC) { diff --git a/java/java-impl/src/com/intellij/psi/scope/processor/ConflictFilterProcessor.java b/java/java-impl/src/com/intellij/psi/scope/processor/ConflictFilterProcessor.java index 5dd0c032e455..e6ff85329f71 100644 --- a/java/java-impl/src/com/intellij/psi/scope/processor/ConflictFilterProcessor.java +++ b/java/java-impl/src/com/intellij/psi/scope/processor/ConflictFilterProcessor.java @@ -16,10 +16,7 @@ package com.intellij.psi.scope.processor; import com.intellij.openapi.util.Key; -import com.intellij.psi.JavaResolveResult; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiSubstitutor; -import com.intellij.psi.ResolveState; +import com.intellij.psi.*; import com.intellij.psi.filters.ElementFilter; import com.intellij.psi.infos.CandidateInfo; import com.intellij.psi.scope.JavaScopeProcessorEvent; @@ -41,6 +38,7 @@ public class ConflictFilterProcessor extends FilterScopeProcessor private JavaResolveResult[] myCachedResult = null; protected String myName; protected final PsiElement myPlace; + protected final PsiFile myPlaceFile; public ConflictFilterProcessor(String name, ElementFilter filter, PsiConflictResolver[] resolvers, List container, final PsiElement place){ @@ -48,6 +46,7 @@ public class ConflictFilterProcessor extends FilterScopeProcessor myResolvers = resolvers; myName = name; myPlace = place; + myPlaceFile = place.getContainingFile(); } public boolean execute(PsiElement element, ResolveState state){ diff --git a/java/java-impl/src/com/intellij/psi/scope/processor/MethodCandidatesProcessor.java b/java/java-impl/src/com/intellij/psi/scope/processor/MethodCandidatesProcessor.java index 3f13e40c4cef..d633b2178146 100644 --- a/java/java-impl/src/com/intellij/psi/scope/processor/MethodCandidatesProcessor.java +++ b/java/java-impl/src/com/intellij/psi/scope/processor/MethodCandidatesProcessor.java @@ -50,7 +50,7 @@ public class MethodCandidatesProcessor extends MethodsProcessor{ public void addMethod(final PsiMethod method, final PsiSubstitutor substitutor, final boolean staticProblem) { boolean isAccessible = JavaResolveUtil.isAccessible(method, method.getContainingClass(), method.getModifierList(), - myPlace, myAccessClass, myCurrentFileContext); + myPlace, myAccessClass, myCurrentFileContext, myPlaceFile); myHasAccessibleStaticCorrectCandidate |= isAccessible && !staticProblem; if (isAccepted(method)) {