Java 类com.intellij.psi.scope.PsiConflictResolver 实例源码

项目:intellij-ce-playground    文件:ConflictFilterProcessor.java   
@NotNull
public JavaResolveResult[] getResult() {
  JavaResolveResult[] cachedResult = myCachedResult;
  if (cachedResult == null) {
    final List<CandidateInfo> conflicts = getResults();
    for (PsiConflictResolver resolver : myResolvers) {
      CandidateInfo candidate = resolver.resolveConflict(conflicts);
      if (candidate != null) {
        conflicts.clear();
        conflicts.add(candidate);
        break;
      }
    }
    myCachedResult = cachedResult = conflicts.toArray(new JavaResolveResult[conflicts.size()]);
  }

  return cachedResult;
}
项目:intellij-ce-playground    文件:VariableResolverProcessor.java   
public VariableResolverProcessor(@NotNull PsiJavaCodeReferenceElement place, @NotNull PsiFile placeFile) {
  super(place.getReferenceName(), ourFilter, new PsiConflictResolver[]{new JavaVariableConflictResolver()}, new SmartList<CandidateInfo>(), place, placeFile);

  PsiClass access = null;
  PsiElement qualifier = place.getQualifier();
  if (qualifier instanceof PsiExpression) {
    final JavaResolveResult accessClass = PsiUtil.getAccessObjectClass((PsiExpression)qualifier);
    final PsiElement element = accessClass.getElement();
    if (element instanceof PsiTypeParameter) {
      PsiElementFactory factory = JavaPsiFacade.getInstance(placeFile.getProject()).getElementFactory();
      final PsiClassType type = factory.createType((PsiTypeParameter)element);
      final PsiType accessType = accessClass.getSubstitutor().substitute(type);
      if (accessType instanceof PsiArrayType) {
        LanguageLevel languageLevel = PsiUtil.getLanguageLevel(placeFile);
        access = factory.getArrayClass(languageLevel);
      }
      else if (accessType instanceof PsiClassType) {
        access = ((PsiClassType)accessType).resolve();
      }
    }
    else if (element instanceof PsiClass) {
      access = (PsiClass)element;
    }
  }
  myAccessClass = access;
}
项目:intellij-ce-playground    文件:JavaMethodResolveHelper.java   
public JavaMethodResolveHelper(@NotNull final PsiElement argumentList, PsiFile containingFile, @Nullable final PsiType[] argumentTypes) {
  myArgumentTypes = argumentTypes;
  final LanguageLevel languageLevel = PsiUtil.getLanguageLevel(argumentList);
  final PsiConflictResolver resolver = argumentTypes == null ? DuplicateConflictResolver.INSTANCE : new JavaMethodsConflictResolver(argumentList, argumentTypes,
                                                                                                                                    languageLevel);
  myProcessor = new MethodResolverProcessor(argumentList, containingFile, new PsiConflictResolver[]{resolver}) {
    @Override
    protected MethodCandidateInfo createCandidateInfo(@NotNull final PsiMethod method, @NotNull final PsiSubstitutor substitutor,
                                                      final boolean staticProblem,
                                                      final boolean accessible, final boolean varargs) {
      return JavaMethodResolveHelper.this
        .createCandidateInfo(method, substitutor, staticProblem, myCurrentFileContext, !accessible, argumentList, argumentTypes,
                             languageLevel);
    }

    @Override
    protected boolean isAccepted(final PsiMethod candidate) {
      return !candidate.isConstructor();
    }
  };
}
项目:tools-idea    文件:ConflictFilterProcessor.java   
@NotNull
public JavaResolveResult[] getResult() {
  if (myCachedResult == null) {
    final List<CandidateInfo> conflicts = getResults();
    for (PsiConflictResolver resolver : myResolvers) {
      CandidateInfo candidate = resolver.resolveConflict(conflicts);
      if (candidate != null) {
        conflicts.clear();
        conflicts.add(candidate);
        break;
      }
    }
    myCachedResult = conflicts.toArray(new JavaResolveResult[conflicts.size()]);
  }

  return myCachedResult;
}
项目:tools-idea    文件:VariableResolverProcessor.java   
public VariableResolverProcessor(@NotNull PsiJavaCodeReferenceElement place, PsiFile placeFile) {
  super(place.getText(), ourFilter, new PsiConflictResolver[]{new JavaVariableConflictResolver()}, new SmartList<CandidateInfo>(), place, placeFile);

  PsiElement referenceName = place.getReferenceNameElement();
  if (referenceName instanceof PsiIdentifier){
    setName(referenceName.getText());
  }
  PsiClass access = null;
  PsiElement qualifier = place.getQualifier();
  if (qualifier instanceof PsiExpression) {
    final JavaResolveResult accessClass = PsiUtil.getAccessObjectClass((PsiExpression)qualifier);
    final PsiElement element = accessClass.getElement();
    if (element instanceof PsiTypeParameter) {
      PsiElementFactory factory = JavaPsiFacade.getInstance(element.getProject()).getElementFactory();
      final PsiClassType type = factory.createType((PsiTypeParameter)element);
      final PsiType accessType = accessClass.getSubstitutor().substitute(type);
      if (accessType instanceof PsiArrayType) {
        LanguageLevel languageLevel = PsiUtil.getLanguageLevel(qualifier);
        access = factory.getArrayClass(languageLevel);
      }
      else if (accessType instanceof PsiClassType) access = ((PsiClassType)accessType).resolve();
    }
    else if (element instanceof PsiClass) access = (PsiClass)element;
  }
  myAccessClass = access;
}
项目:tools-idea    文件:JavaMethodResolveHelper.java   
public JavaMethodResolveHelper(@NotNull final PsiElement argumentList, PsiFile containingFile, @Nullable final PsiType[] argumentTypes) {
  myArgumentTypes = argumentTypes;
  final LanguageLevel languageLevel = PsiUtil.getLanguageLevel(argumentList);
  final PsiConflictResolver resolver = argumentTypes == null ? DuplicateConflictResolver.INSTANCE : new JavaMethodsConflictResolver(argumentList, argumentTypes,
                                                                                                                                    languageLevel);
  myProcessor = new MethodResolverProcessor(argumentList, containingFile, new PsiConflictResolver[]{resolver}) {
    @Override
    protected MethodCandidateInfo createCandidateInfo(final PsiMethod method, final PsiSubstitutor substitutor,
                                                      final boolean staticProblem,
                                                      final boolean accessible) {
      return JavaMethodResolveHelper.this
        .createCandidateInfo(method, substitutor, staticProblem, myCurrentFileContext, !accessible, argumentList, argumentTypes,
                             languageLevel);
    }

    @Override
    protected boolean isAccepted(final PsiMethod candidate) {
      return !candidate.isConstructor();
    }
  };
}
项目:consulo-java    文件:ConflictFilterProcessor.java   
@NotNull
public JavaResolveResult[] getResult()
{
    JavaResolveResult[] cachedResult = myCachedResult;
    if(cachedResult == null)
    {
        List<CandidateInfo> conflicts = getResults();
        if(!conflicts.isEmpty())
        {
            for(PsiConflictResolver resolver : myResolvers)
            {
                CandidateInfo candidate = resolver.resolveConflict(conflicts);
                if(candidate != null)
                {
                    conflicts.clear();
                    conflicts.add(candidate);
                    break;
                }
            }
        }
        myCachedResult = cachedResult = conflicts.toArray(new JavaResolveResult[conflicts.size()]);
    }

    return cachedResult;
}
项目:consulo-java    文件:VariableResolverProcessor.java   
public VariableResolverProcessor(@NotNull PsiJavaCodeReferenceElement place, PsiFile placeFile) {
  super(place.getText(), ourFilter, new PsiConflictResolver[]{new JavaVariableConflictResolver()}, new SmartList<CandidateInfo>(), place, placeFile);

  PsiElement referenceName = place.getReferenceNameElement();
  if (referenceName instanceof PsiIdentifier){
    setName(referenceName.getText());
  }
  PsiClass access = null;
  PsiElement qualifier = place.getQualifier();
  if (qualifier instanceof PsiExpression) {
    final JavaResolveResult accessClass = PsiUtil.getAccessObjectClass((PsiExpression)qualifier);
    final PsiElement element = accessClass.getElement();
    if (element instanceof PsiTypeParameter) {
      PsiElementFactory factory = JavaPsiFacade.getInstance(element.getProject()).getElementFactory();
      final PsiClassType type = factory.createType((PsiTypeParameter)element);
      final PsiType accessType = accessClass.getSubstitutor().substitute(type);
      if (accessType instanceof PsiArrayType) {
        LanguageLevel languageLevel = PsiUtil.getLanguageLevel(qualifier);
        access = factory.getArrayClass(languageLevel);
      }
      else if (accessType instanceof PsiClassType) access = ((PsiClassType)accessType).resolve();
    }
    else if (element instanceof PsiClass) access = (PsiClass)element;
  }
  myAccessClass = access;
}
项目:consulo-java    文件:MethodParameterInfoHandler.java   
private static CandidateInfo[] getCandidates(PsiCallExpression call)
{
    final MethodCandidatesProcessor processor = new MethodResolverProcessor(call, call.getContainingFile(), new PsiConflictResolver[0])
    {
        @Override
        protected boolean acceptVarargs()
        {
            return false;
        }
    };

    try
    {
        PsiScopesUtil.setupAndRunProcessor(processor, call, true);
    }
    catch(MethodProcessorSetupFailedException e)
    {
        return CandidateInfo.EMPTY_ARRAY;
    }
    final List<CandidateInfo> results = processor.getResults();
    return results.toArray(new CandidateInfo[results.size()]);
}
项目:intellij-ce-playground    文件:ConflictFilterProcessor.java   
public ConflictFilterProcessor(String name,
                               @NotNull ElementFilter filter,
                               @NotNull PsiConflictResolver[] resolvers,
                               @NotNull List<CandidateInfo> container,
                               @NotNull PsiElement place,
                               PsiFile placeFile) {
  super(filter, container);
  myResolvers = resolvers;
  myName = name;
  myPlace = place;
  myPlaceFile = placeFile;
}
项目:intellij-ce-playground    文件:MethodsProcessor.java   
public MethodsProcessor(@NotNull PsiConflictResolver[] resolvers,
                        @NotNull List<CandidateInfo> container,
                        @NotNull PsiElement place,
                        @NotNull PsiFile placeFile) {
  super(null, ourFilter, resolvers, container, place, placeFile);
  myLanguageLevel = PsiUtil.getLanguageLevel(placeFile);
}
项目:intellij-ce-playground    文件:MethodResolverProcessor.java   
public MethodResolverProcessor(@NotNull PsiCallExpression place,
                               @NotNull PsiExpressionList argumentList, 
                               @NotNull PsiFile placeFile){
  this(place, placeFile, new PsiConflictResolver[]{new JavaMethodsConflictResolver(argumentList, PsiUtil.getLanguageLevel(placeFile))});
  setArgumentList(argumentList);
  obtainTypeArguments(place);
}
项目:intellij-ce-playground    文件:MethodResolverProcessor.java   
public MethodResolverProcessor(PsiClass classConstr, @NotNull PsiExpressionList argumentList, @NotNull PsiElement place, @NotNull PsiFile placeFile) {
  super(place, placeFile, new PsiConflictResolver[]{new JavaMethodsConflictResolver(argumentList,
                                                                                    PsiUtil.getLanguageLevel(placeFile))}, new SmartList<CandidateInfo>());
  setIsConstructor(true);
  setAccessClass(classConstr);
  setArgumentList(argumentList);
}
项目:intellij-ce-playground    文件:MethodReferenceResolver.java   
protected PsiConflictResolver createResolver(PsiMethodReferenceExpressionImpl referenceExpression,
                                             PsiMethodReferenceUtil.QualifierResolveResult qualifierResolveResult,
                                             PsiMethod interfaceMethod,
                                             MethodSignature signature) {
  return new MethodReferenceConflictResolver(referenceExpression, qualifierResolveResult, signature,
                                             interfaceMethod != null && interfaceMethod.isVarArgs());
}
项目:tools-idea    文件:ConflictFilterProcessor.java   
public ConflictFilterProcessor(String name,
                               @NotNull ElementFilter filter,
                               @NotNull PsiConflictResolver[] resolvers,
                               @NotNull List<CandidateInfo> container,
                               @NotNull PsiElement place,
                               PsiFile placeFile) {
  super(filter, container);
  myResolvers = resolvers;
  myName = name;
  myPlace = place;
  myPlaceFile = placeFile;
}
项目:tools-idea    文件:MethodsProcessor.java   
public MethodsProcessor(@NotNull PsiConflictResolver[] resolvers,
                        @NotNull List<CandidateInfo> container,
                        @NotNull PsiElement place,
                        @NotNull PsiFile placeFile) {
  super(null, ourFilter, resolvers, container, place, placeFile);
  myLanguageLevel = PsiUtil.getLanguageLevel(placeFile);
}
项目:tools-idea    文件:MethodResolverProcessor.java   
public MethodResolverProcessor(PsiClass classConstr, @NotNull PsiExpressionList argumentList, @NotNull PsiElement place, @NotNull PsiFile placeFile) {
  super(place, placeFile, new PsiConflictResolver[]{new JavaMethodsConflictResolver(argumentList,
                                                                                    PsiUtil.getLanguageLevel(placeFile))}, new SmartList<CandidateInfo>());
  setIsConstructor(true);
  setAccessClass(classConstr);
  setArgumentList(argumentList);
}
项目:consulo-java    文件:ConflictFilterProcessor.java   
public ConflictFilterProcessor(String name,
        @NotNull ElementFilter filter,
        @NotNull PsiConflictResolver[] resolvers,
        @NotNull List<CandidateInfo> container,
        @NotNull PsiElement place,
        PsiFile placeFile)
{
    super(filter, container);
    myResolvers = resolvers;
    myName = name;
    myPlace = place;
    myPlaceFile = placeFile;
}
项目:consulo-java    文件:MethodResolverProcessor.java   
public MethodResolverProcessor(PsiClass classConstr, @NotNull PsiExpressionList argumentList, @NotNull PsiElement place, @NotNull PsiFile placeFile)
{
    super(place, placeFile, new PsiConflictResolver[]{
            new JavaMethodsConflictResolver(argumentList, PsiUtil.getLanguageLevel(placeFile))
    }, new SmartList<CandidateInfo>());
    setIsConstructor(true);
    setAccessClass(classConstr);
    setArgumentList(argumentList);
}
项目:consulo-java    文件:MethodReferenceResolver.java   
protected PsiConflictResolver createResolver(PsiMethodReferenceExpressionImpl referenceExpression,
        PsiMethodReferenceUtil.QualifierResolveResult qualifierResolveResult,
        PsiMethod interfaceMethod,
        MethodSignature signature)
{
    return new MethodReferenceConflictResolver(referenceExpression, qualifierResolveResult, signature, interfaceMethod != null && interfaceMethod.isVarArgs());
}
项目:consulo-java    文件:JavaMethodResolveHelper.java   
public JavaMethodResolveHelper(@NotNull final PsiElement argumentList,
        PsiFile containingFile,
        @Nullable final PsiType[] argumentTypes)
{
    myArgumentTypes = argumentTypes;
    final LanguageLevel languageLevel = PsiUtil.getLanguageLevel(argumentList);
    final PsiConflictResolver resolver = argumentTypes == null ? DuplicateConflictResolver.INSTANCE : new
            JavaMethodsConflictResolver(argumentList, argumentTypes, languageLevel);
    myProcessor = new MethodResolverProcessor(argumentList, containingFile, new PsiConflictResolver[]{resolver})
    {
        @Override
        protected MethodCandidateInfo createCandidateInfo(@NotNull final PsiMethod method,
                @NotNull final PsiSubstitutor substitutor,
                final boolean staticProblem,
                final boolean accessible,
                final boolean varargs)
        {
            return JavaMethodResolveHelper.this.createCandidateInfo(method, substitutor, staticProblem,
                    myCurrentFileContext, !accessible, argumentList, argumentTypes, languageLevel);
        }

        @Override
        protected boolean isAccepted(final PsiMethod candidate)
        {
            return !candidate.isConstructor();
        }
    };
}
项目:intellij-ce-playground    文件:PsiDiamondTypeImpl.java   
@Nullable
private static PsiMethod findConstructorStaticFactory(final PsiClass containingClass, PsiNewExpression newExpression) {
  final PsiExpressionList argumentList = newExpression.getArgumentList();
  if (argumentList == null) return null;

  final LanguageLevel languageLevel = PsiUtil.getLanguageLevel(newExpression);
  final List<CandidateInfo> conflicts = new ArrayList<CandidateInfo>();
  PsiMethod[] constructors = containingClass.getConstructors();
  if (constructors.length == 0) {
    //default constructor
    constructors = new PsiMethod[] {null};
  }

  final PsiConflictResolver[] conflictResolvers = {new JavaMethodsConflictResolver(argumentList, languageLevel)};
  final MethodCandidatesProcessor processor = new MethodCandidatesProcessor(argumentList, argumentList.getContainingFile(), conflictResolvers, conflicts) {
    @Override
    protected boolean isAccepted(PsiMethod candidate) {
      return true;
    }

    @Override
    protected PsiClass getContainingClass(PsiMethod method) {
      return containingClass;
    }

    @Override
    protected boolean acceptVarargs() {
      return true;
    }
  };
  processor.setArgumentList(argumentList);

  for (PsiMethod constructor : constructors) {
    final PsiTypeParameter[] params = getAllTypeParams(constructor, containingClass);
    final PsiMethod staticFactory = generateStaticFactory(constructor, containingClass, params, newExpression.getClassReference());
    if (staticFactory != null) {
      processor.add(staticFactory, PsiSubstitutor.EMPTY);
    }
  }

  final JavaResolveResult[] result = processor.getResult();
  return result.length == 1 ? (PsiMethod)result[0].getElement() : null;
}
项目:intellij-ce-playground    文件:MethodCandidatesProcessor.java   
public MethodCandidatesProcessor(@NotNull PsiElement place, PsiFile placeFile, @NotNull PsiConflictResolver[] resolvers, @NotNull List<CandidateInfo> container) {
  super(resolvers, container, place, placeFile);
}
项目:intellij-ce-playground    文件:MethodCandidatesProcessor.java   
public MethodCandidatesProcessor(@NotNull PsiElement place, PsiFile placeFile) {
  super(new PsiConflictResolver[]{DuplicateConflictResolver.INSTANCE}, new SmartList<CandidateInfo>(), place, placeFile);
}
项目:intellij-ce-playground    文件:MethodResolverProcessor.java   
public MethodResolverProcessor(@NotNull PsiElement place, @NotNull PsiFile placeFile, @NotNull PsiConflictResolver[] resolvers) {
  super(place, placeFile, resolvers, new SmartList<CandidateInfo>());
}
项目:tools-idea    文件:MethodCandidatesProcessor.java   
public MethodCandidatesProcessor(@NotNull PsiElement place, PsiFile placeFile, @NotNull PsiConflictResolver[] resolvers, @NotNull List<CandidateInfo> container) {
  super(resolvers, container, place, placeFile);
}
项目:tools-idea    文件:MethodCandidatesProcessor.java   
public MethodCandidatesProcessor(@NotNull PsiElement place, PsiFile placeFile) {
  super(new PsiConflictResolver[]{DuplicateConflictResolver.INSTANCE}, new SmartList<CandidateInfo>(), place, placeFile);
}
项目:tools-idea    文件:MethodResolverProcessor.java   
public MethodResolverProcessor(@NotNull PsiMethodCallExpression place, @NotNull PsiFile placeFile){
  this(place, placeFile, new PsiConflictResolver[]{new JavaMethodsConflictResolver(place.getArgumentList(),
                                                                                   PsiUtil.getLanguageLevel(placeFile))});
  setArgumentList(place.getArgumentList());
  obtainTypeArguments(place);
}
项目:tools-idea    文件:MethodResolverProcessor.java   
public MethodResolverProcessor(@NotNull PsiElement place, @NotNull PsiFile placeFile, @NotNull PsiConflictResolver[] resolvers) {
  super(place, placeFile, resolvers, new SmartList<CandidateInfo>());
}
项目:consulo-java    文件:PsiDiamondTypeImpl.java   
@Nullable
public static JavaResolveResult[] collectStaticFactories(PsiNewExpression newExpression, final PsiConflictResolver... conflictResolvers)
{
    PsiExpressionList argumentList = newExpression.getArgumentList();
    if(argumentList == null)
    {
        return null;
    }

    final PsiClass psiClass = findClass(newExpression);
    if(psiClass == null)
    {
        //should not happens: unresolved class reference would be first and inference won't start
        return null;
    }

    final List<CandidateInfo> candidates = new ArrayList<CandidateInfo>();
    PsiMethod[] constructors = psiClass.getConstructors();
    if(constructors.length == 0)
    {
        //default constructor
        constructors = new PsiMethod[]{null};
    }

    final MethodCandidatesProcessor processor = new MethodCandidatesProcessor(argumentList, argumentList.getContainingFile(), conflictResolvers, candidates)
    {
        @Override
        protected boolean isAccepted(PsiMethod candidate)
        {
            return true;
        }

        @Override
        protected PsiClass getContainingClass(PsiMethod method)
        {
            return psiClass;
        }

        @Override
        protected boolean acceptVarargs()
        {
            return true;
        }
    };
    processor.setArgumentList(argumentList);

    for(PsiMethod constructor : constructors)
    {
        final PsiTypeParameter[] params = getAllTypeParams(constructor, psiClass);
        final PsiMethod staticFactory = generateStaticFactory(constructor, psiClass, params, newExpression.getClassReference());
        if(staticFactory != null)
        {
            processor.add(staticFactory, PsiSubstitutor.EMPTY);
        }
    }

    return processor.getResult();
}
项目:consulo-java    文件:MethodsProcessor.java   
public MethodsProcessor(@NotNull PsiConflictResolver[] resolvers, @NotNull List<CandidateInfo> container, @NotNull PsiElement place, @NotNull PsiFile placeFile)
{
    super(null, ourFilter, resolvers, container, place, placeFile);
    myLanguageLevel = PsiUtil.getLanguageLevel(placeFile);
}
项目:consulo-java    文件:MethodCandidatesProcessor.java   
public MethodCandidatesProcessor(@NotNull PsiElement place, PsiFile placeFile, @NotNull PsiConflictResolver[] resolvers, @NotNull List<CandidateInfo> container)
{
    super(resolvers, container, place, placeFile);
}
项目:consulo-java    文件:MethodCandidatesProcessor.java   
public MethodCandidatesProcessor(@NotNull PsiElement place, PsiFile placeFile)
{
    super(new PsiConflictResolver[]{DuplicateConflictResolver.INSTANCE}, new SmartList<CandidateInfo>(), place, placeFile);
}
项目:consulo-java    文件:MethodResolverProcessor.java   
public MethodResolverProcessor(@NotNull PsiCallExpression place, @NotNull PsiExpressionList argumentList, @NotNull PsiFile placeFile)
{
    this(place, placeFile, new PsiConflictResolver[]{new JavaMethodsConflictResolver(argumentList, PsiUtil.getLanguageLevel(placeFile))});
    setArgumentList(argumentList);
    obtainTypeArguments(place);
}
项目:consulo-java    文件:MethodResolverProcessor.java   
public MethodResolverProcessor(@NotNull PsiElement place, @NotNull PsiFile placeFile, @NotNull PsiConflictResolver[] resolvers)
{
    super(place, placeFile, resolvers, new SmartList<CandidateInfo>());
}