mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-17 16:19:58 +07:00
less getContainingFile() during method resolve
This commit is contained in:
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user