mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
compute language level less times
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.psi.resolve;
|
||||
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.infos.CandidateInfo;
|
||||
import com.intellij.psi.infos.MethodCandidateInfo;
|
||||
@@ -25,6 +26,7 @@ import com.intellij.psi.scope.conflictResolvers.DuplicateConflictResolver;
|
||||
import com.intellij.psi.scope.processor.MethodCandidatesProcessor;
|
||||
import com.intellij.psi.scope.processor.MethodResolverProcessor;
|
||||
import com.intellij.psi.util.MethodSignature;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import gnu.trove.THashSet;
|
||||
@@ -45,12 +47,14 @@ public class JavaMethodResolveHelper {
|
||||
|
||||
public JavaMethodResolveHelper(final PsiElement argumentList, @Nullable final PsiType[] parameterTypes) {
|
||||
myParameterTypes = parameterTypes;
|
||||
final LanguageLevel languageLevel = PsiUtil.getLanguageLevel(argumentList);
|
||||
final PsiConflictResolver resolver = parameterTypes == null ? DuplicateConflictResolver.INSTANCE : new JavaMethodsConflictResolver(argumentList, parameterTypes);
|
||||
myProcessor = new MethodResolverProcessor(argumentList, new PsiConflictResolver[]{resolver}) {
|
||||
protected MethodCandidateInfo createCandidateInfo(final PsiMethod method, final PsiSubstitutor substitutor,
|
||||
final boolean staticProblem,
|
||||
final boolean accessible) {
|
||||
return new MethodCandidateInfo(method, substitutor, !accessible, staticProblem, argumentList, myCurrentFileContext, parameterTypes, PsiType.EMPTY_ARRAY);
|
||||
return new MethodCandidateInfo(method, substitutor, !accessible, staticProblem, argumentList, myCurrentFileContext, parameterTypes,
|
||||
PsiType.EMPTY_ARRAY, languageLevel);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -62,7 +62,7 @@ public class MethodCandidatesProcessor extends MethodsProcessor{
|
||||
final boolean staticProblem,
|
||||
final boolean accessible) {
|
||||
return new MethodCandidateInfo(method, substitutor, !accessible, staticProblem, getArgumentList(), myCurrentFileContext,
|
||||
getArgumentList().getExpressionTypes(), getTypeArguments());
|
||||
getArgumentList().getExpressionTypes(), getTypeArguments(), getLanguageLevel());
|
||||
}
|
||||
|
||||
protected boolean isAccepted(final PsiMethod candidate) {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.intellij.psi.scope.processor;
|
||||
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.filters.ElementFilter;
|
||||
import com.intellij.psi.infos.CandidateInfo;
|
||||
@@ -23,6 +24,7 @@ import com.intellij.psi.scope.ElementClassFilter;
|
||||
import com.intellij.psi.scope.ElementClassHint;
|
||||
import com.intellij.psi.scope.JavaScopeProcessorEvent;
|
||||
import com.intellij.psi.scope.PsiConflictResolver;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.SmartList;
|
||||
|
||||
/**
|
||||
@@ -41,6 +43,7 @@ public abstract class MethodsProcessor extends ConflictFilterProcessor implement
|
||||
protected PsiClass myAccessClass = null;
|
||||
private PsiExpressionList myArgumentList;
|
||||
private PsiType[] myTypeArguments;
|
||||
private LanguageLevel myLanguageLevel;
|
||||
|
||||
public MethodsProcessor(PsiConflictResolver[] resolvers, SmartList<CandidateInfo> container, final PsiElement place) {
|
||||
super(null, ourFilter, resolvers, container, place);
|
||||
@@ -52,6 +55,11 @@ public abstract class MethodsProcessor extends ConflictFilterProcessor implement
|
||||
|
||||
public void setArgumentList(PsiExpressionList argList) {
|
||||
myArgumentList = argList;
|
||||
myLanguageLevel = PsiUtil.getLanguageLevel(myArgumentList);
|
||||
}
|
||||
|
||||
protected LanguageLevel getLanguageLevel() {
|
||||
return myLanguageLevel;
|
||||
}
|
||||
|
||||
public void obtainTypeArguments(PsiCallExpression callExpression) {
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.psi.infos;
|
||||
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -28,6 +29,7 @@ public class MethodCandidateInfo extends CandidateInfo{
|
||||
private final PsiType[] myArgumentTypes;
|
||||
private final PsiType[] myTypeArguments;
|
||||
private PsiSubstitutor myCalcedSubstitutor = null;
|
||||
private final LanguageLevel myLanguageLevel;
|
||||
|
||||
public MethodCandidateInfo(PsiElement candidate,
|
||||
PsiSubstitutor substitutor,
|
||||
@@ -37,10 +39,24 @@ public class MethodCandidateInfo extends CandidateInfo{
|
||||
PsiElement currFileContext,
|
||||
@Nullable PsiType[] argumentTypes,
|
||||
PsiType[] typeArguments) {
|
||||
this(candidate, substitutor, accessProblem, staticsProblem, argumentList, currFileContext, argumentTypes, typeArguments,
|
||||
PsiUtil.getLanguageLevel(argumentList));
|
||||
}
|
||||
|
||||
public MethodCandidateInfo(PsiElement candidate,
|
||||
PsiSubstitutor substitutor,
|
||||
boolean accessProblem,
|
||||
boolean staticsProblem,
|
||||
PsiElement argumentList,
|
||||
PsiElement currFileContext,
|
||||
@Nullable PsiType[] argumentTypes,
|
||||
PsiType[] typeArguments,
|
||||
final LanguageLevel languageLevel) {
|
||||
super(candidate, substitutor, accessProblem, staticsProblem, currFileContext);
|
||||
myArgumentList = argumentList;
|
||||
myArgumentTypes = argumentTypes;
|
||||
myTypeArguments = typeArguments;
|
||||
myLanguageLevel = languageLevel;
|
||||
}
|
||||
|
||||
public boolean isApplicable(){
|
||||
@@ -50,7 +66,7 @@ public class MethodCandidateInfo extends CandidateInfo{
|
||||
private int getApplicabilityLevelInner() {
|
||||
if (myArgumentTypes == null) return ApplicabilityLevel.NOT_APPLICABLE;
|
||||
|
||||
int level = PsiUtil.getApplicabilityLevel(getElement(), getSubstitutor(), myArgumentTypes, PsiUtil.getLanguageLevel(myArgumentList));
|
||||
int level = PsiUtil.getApplicabilityLevel(getElement(), getSubstitutor(), myArgumentTypes, myLanguageLevel);
|
||||
if (level > ApplicabilityLevel.NOT_APPLICABLE && !isTypeArgumentsApplicable()) level = ApplicabilityLevel.NOT_APPLICABLE;
|
||||
return level;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user