less getContainingFile() during method resolve

This commit is contained in:
peter
2011-03-23 21:07:43 +01:00
parent 92bcbec2cd
commit c8c9ac21d4
3 changed files with 20 additions and 12 deletions
@@ -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) {
@@ -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<CandidateInfo>
private JavaResolveResult[] myCachedResult = null;
protected String myName;
protected final PsiElement myPlace;
protected final PsiFile myPlaceFile;
public ConflictFilterProcessor(String name, ElementFilter filter, PsiConflictResolver[] resolvers, List<CandidateInfo> container,
final PsiElement place){
@@ -48,6 +46,7 @@ public class ConflictFilterProcessor extends FilterScopeProcessor<CandidateInfo>
myResolvers = resolvers;
myName = name;
myPlace = place;
myPlaceFile = place.getContainingFile();
}
public boolean execute(PsiElement element, ResolveState state){
@@ -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)) {