mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-26 19:06:24 +07:00
minor
This commit is contained in:
@@ -44,17 +44,16 @@ import com.intellij.psi.filters.element.ExcludeDeclaredFilter;
|
||||
import com.intellij.psi.filters.element.ExcludeSillyAssignment;
|
||||
import com.intellij.psi.html.HtmlTag;
|
||||
import com.intellij.psi.impl.source.PsiImmediateClassType;
|
||||
import com.intellij.psi.infos.ClassCandidateInfo;
|
||||
import com.intellij.psi.javadoc.PsiDocToken;
|
||||
import com.intellij.psi.scope.BaseScopeProcessor;
|
||||
import com.intellij.psi.scope.ElementClassFilter;
|
||||
import com.intellij.psi.scope.ElementClassHint;
|
||||
import com.intellij.psi.scope.NameHint;
|
||||
import com.intellij.psi.scope.util.PsiScopesUtil;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.PsiFormatUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.psi.xml.XmlToken;
|
||||
import com.intellij.psi.xml.XmlTokenType;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -435,14 +434,6 @@ public class JavaCompletionUtil {
|
||||
|
||||
@Nullable
|
||||
public static PsiType getQualifiedMemberReferenceType(@Nullable PsiType qualifierType, @NotNull final PsiMember member) {
|
||||
final ClassCandidateInfo info = TypeConversionUtil.splitType(qualifierType, member);
|
||||
if (info == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final PsiClass element = info.getElement();
|
||||
assert element != null;
|
||||
|
||||
final Ref<PsiSubstitutor> subst = Ref.create(PsiSubstitutor.EMPTY);
|
||||
class MyProcessor extends BaseScopeProcessor implements NameHint, ElementClassHint {
|
||||
public boolean execute(PsiElement element, ResolveState state) {
|
||||
@@ -468,7 +459,7 @@ public class JavaCompletionUtil {
|
||||
}
|
||||
}
|
||||
|
||||
element.processDeclarations(new MyProcessor(), ResolveState.initial().put(PsiSubstitutor.KEY, info.getSubstitutor()), null, member);
|
||||
PsiScopesUtil.processTypeDeclarations(qualifierType, member, new MyProcessor());
|
||||
|
||||
PsiType rawType = member instanceof PsiField ? ((PsiField) member).getType() : ((PsiMethod) member).getReturnType();
|
||||
return subst.get().substitute(rawType);
|
||||
|
||||
@@ -27,7 +27,6 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.infos.ClassCandidateInfo;
|
||||
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
|
||||
import com.intellij.psi.scope.JavaScopeProcessorEvent;
|
||||
import com.intellij.psi.scope.MethodProcessorSetupFailedException;
|
||||
@@ -39,8 +38,8 @@ import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class PsiScopesUtil {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.scope.util.PsiScopesUtil");
|
||||
@@ -108,6 +107,25 @@ public class PsiScopesUtil {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void processTypeDeclarations(PsiType type, PsiElement place, PsiScopeProcessor processor) {
|
||||
if (type instanceof PsiArrayType) {
|
||||
LanguageLevel languageLevel = PsiUtil.getLanguageLevel(place);
|
||||
final PsiClass arrayClass = JavaPsiFacade.getInstance(place.getProject()).getElementFactory().getArrayClass(languageLevel);
|
||||
final PsiTypeParameter[] arrayTypeParameters = arrayClass.getTypeParameters();
|
||||
PsiSubstitutor substitutor = PsiSubstitutor.EMPTY;
|
||||
if (arrayTypeParameters.length > 0) {
|
||||
substitutor = substitutor.put(arrayTypeParameters[0], ((PsiArrayType)type).getComponentType());
|
||||
}
|
||||
arrayClass.processDeclarations(processor, ResolveState.initial().put(PsiSubstitutor.KEY, substitutor), arrayClass, place);
|
||||
} else {
|
||||
final JavaResolveResult result = PsiUtil.resolveGenericsClassInType(type);
|
||||
final PsiClass clazz = (PsiClass)result.getElement();
|
||||
if (clazz != null) {
|
||||
clazz.processDeclarations(processor, ResolveState.initial().put(PsiSubstitutor.KEY, result.getSubstitutor()), clazz, place);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean resolveAndWalk(PsiScopeProcessor processor, PsiJavaCodeReferenceElement ref, PsiElement maxScope) {
|
||||
return resolveAndWalk(processor, ref, maxScope, false);
|
||||
}
|
||||
@@ -127,11 +145,7 @@ public class PsiScopesUtil {
|
||||
PsiType type = null;
|
||||
if (qualifier instanceof PsiExpression) {
|
||||
type = ((PsiExpression)qualifier).getType();
|
||||
final ClassCandidateInfo result = TypeConversionUtil.splitType(type, qualifier);
|
||||
if (result != null) {
|
||||
target = result.getElement();
|
||||
substitutor = result.getSubstitutor();
|
||||
}
|
||||
processTypeDeclarations(type, ref, processor);
|
||||
}
|
||||
|
||||
if (type == null && qualifier instanceof PsiJavaCodeReferenceElement) {
|
||||
|
||||
Reference in New Issue
Block a user