Java 类com.intellij.psi.impl.source.resolve.ClassResolverProcessor 实例源码

项目:consulo-java    文件:PsiReferenceExpressionImpl.java   
@NotNull
private JavaResolveResult[] resolveToClass(@NotNull PsiElement classNameElement, @NotNull PsiFile containingFile)
{
    final String className = classNameElement.getText();

    final ClassResolverProcessor processor = new ClassResolverProcessor(className, this, containingFile);
    PsiScopesUtil.resolveAndWalk(processor, this, null);
    return processor.getResult();
}
项目:intellij-ce-playground    文件:JavaClassReference.java   
private JavaResolveResult advancedResolveInner(@NotNull PsiElement psiElement, @NotNull String qName, @NotNull PsiFile containingFile) {
  final PsiManager manager = containingFile.getManager();
  final GlobalSearchScope scope = getScope(containingFile);
  if (myIndex == myJavaClassReferenceSet.getReferences().length - 1) {
    final PsiClass aClass = JavaPsiFacade.getInstance(manager.getProject()).findClass(qName, scope);
    if (aClass != null) {
      return new ClassCandidateInfo(aClass, PsiSubstitutor.EMPTY, false, psiElement);
    }
    else {
      if (!JavaClassReferenceProvider.ADVANCED_RESOLVE.getBooleanValue(getOptions())) {
        return JavaResolveResult.EMPTY;
      }
    }
  }
  PsiElement resolveResult = JavaPsiFacade.getInstance(manager.getProject()).findPackage(qName);
  if (resolveResult == null) {
    resolveResult = JavaPsiFacade.getInstance(manager.getProject()).findClass(qName, scope);
  }
  if (myInStaticImport && resolveResult == null) {
    resolveResult = resolveMember(qName, manager, getElement().getResolveScope());
  }
  if (resolveResult == null) {
    if (containingFile instanceof PsiJavaFile) {
      if (containingFile instanceof ServerPageFile) {
        containingFile = containingFile.getViewProvider().getPsi(JavaLanguage.INSTANCE);
        if (containingFile == null) return JavaResolveResult.EMPTY;
      }

      final ClassResolverProcessor processor = new ClassResolverProcessor(getCanonicalText(), psiElement, containingFile);
      PsiClass contextClass = myJavaClassReferenceSet.getProvider().getContextClass(psiElement);
      if (contextClass != null) {
        PsiScopesUtil.treeWalkUp(processor, contextClass, null);
      }
      else {
        containingFile.processDeclarations(processor, ResolveState.initial(), null, psiElement);
      }

      if (processor.getResult().length == 1) {
        final JavaResolveResult javaResolveResult = processor.getResult()[0];

        if (javaResolveResult != JavaResolveResult.EMPTY && getOptions() != null) {
          final Boolean value = JavaClassReferenceProvider.RESOLVE_QUALIFIED_CLASS_NAME.getValue(getOptions());
          final PsiClass psiClass = (PsiClass)javaResolveResult.getElement();
          if (value != null && value.booleanValue() && psiClass != null) {
            final String qualifiedName = psiClass.getQualifiedName();

            if (!qName.equals(qualifiedName)) {
              return JavaResolveResult.EMPTY;
            }
          }
        }

        return javaResolveResult;
      }
    }
  }
  return resolveResult != null
         ? new CandidateInfo(resolveResult, PsiSubstitutor.EMPTY, false, false, psiElement)
         : JavaResolveResult.EMPTY;
}
项目:tools-idea    文件:JavaClassReference.java   
private JavaResolveResult advancedResolveInner(final PsiElement psiElement, final String qName) {
  final PsiManager manager = psiElement.getManager();
  final GlobalSearchScope scope = getScope();
  if (myIndex == myJavaClassReferenceSet.getReferences().length - 1) {
    final PsiClass aClass = JavaPsiFacade.getInstance(manager.getProject()).findClass(qName, scope);
    if (aClass != null) {
      return new ClassCandidateInfo(aClass, PsiSubstitutor.EMPTY, false, psiElement);
    }
    else {
      if (!JavaClassReferenceProvider.ADVANCED_RESOLVE.getBooleanValue(getOptions())) {
        return JavaResolveResult.EMPTY;
      }
    }
  }
  PsiElement resolveResult = JavaPsiFacade.getInstance(manager.getProject()).findPackage(qName);
  if (resolveResult == null) {
    resolveResult = JavaPsiFacade.getInstance(manager.getProject()).findClass(qName, scope);
  }
  if (myInStaticImport && resolveResult == null) {
    resolveResult = resolveMember(qName, manager, getElement().getResolveScope());
  }
  if (resolveResult == null) {
    PsiFile containingFile = psiElement.getContainingFile();

    if (containingFile instanceof PsiJavaFile) {
      if (containingFile instanceof JspFile) {
        containingFile = containingFile.getViewProvider().getPsi(JavaLanguage.INSTANCE);
        if (containingFile == null) return JavaResolveResult.EMPTY;
      }

      final ClassResolverProcessor processor = new ClassResolverProcessor(getCanonicalText(), psiElement, containingFile);
      containingFile.processDeclarations(processor, ResolveState.initial(), null, psiElement);

      if (processor.getResult().length == 1) {
        final JavaResolveResult javaResolveResult = processor.getResult()[0];

        if (javaResolveResult != JavaResolveResult.EMPTY && getOptions() != null) {
          final Boolean value = JavaClassReferenceProvider.RESOLVE_QUALIFIED_CLASS_NAME.getValue(getOptions());
          final PsiClass psiClass = (PsiClass)javaResolveResult.getElement();
          if (value != null && value.booleanValue() && psiClass != null) {
            final String qualifiedName = psiClass.getQualifiedName();

            if (!qName.equals(qualifiedName)) {
              return JavaResolveResult.EMPTY;
            }
          }
        }

        return javaResolveResult;
      }
    }
  }
  return resolveResult != null
         ? new CandidateInfo(resolveResult, PsiSubstitutor.EMPTY, false, false, psiElement)
         : JavaResolveResult.EMPTY;
}
项目:consulo-java    文件:JavaClassReference.java   
private JavaResolveResult advancedResolveInner(@NotNull PsiElement psiElement, @NotNull String qName, @NotNull PsiFile containingFile)
{
    final PsiManager manager = containingFile.getManager();
    final GlobalSearchScope scope = getScope(containingFile);
    if(myIndex == myJavaClassReferenceSet.getReferences().length - 1)
    {
        final PsiClass aClass = JavaPsiFacade.getInstance(manager.getProject()).findClass(qName, scope);
        if(aClass != null)
        {
            return new ClassCandidateInfo(aClass, PsiSubstitutor.EMPTY, false, psiElement);
        }
        else
        {
            if(!JavaClassReferenceProvider.ADVANCED_RESOLVE.getBooleanValue(getOptions()))
            {
                return JavaResolveResult.EMPTY;
            }
        }
    }
    PsiElement resolveResult = JavaPsiFacade.getInstance(manager.getProject()).findPackage(qName);
    if(resolveResult == null)
    {
        resolveResult = JavaPsiFacade.getInstance(manager.getProject()).findClass(qName, scope);
    }
    if(myInStaticImport && resolveResult == null)
    {
        resolveResult = resolveMember(qName, manager, getElement().getResolveScope());
    }
    if(resolveResult == null)
    {
        if(containingFile instanceof PsiJavaFile)
        {
            if(containingFile instanceof ServerPageFile)
            {
                containingFile = containingFile.getViewProvider().getPsi(JavaLanguage.INSTANCE);
                if(containingFile == null)
                {
                    return JavaResolveResult.EMPTY;
                }
            }

            final ClassResolverProcessor processor = new ClassResolverProcessor(getCanonicalText(), psiElement, containingFile);
            PsiClass contextClass = myJavaClassReferenceSet.getProvider().getContextClass(psiElement);
            if(contextClass != null)
            {
                PsiScopesUtil.treeWalkUp(processor, contextClass, null);
            }
            else
            {
                containingFile.processDeclarations(processor, ResolveState.initial(), null, psiElement);
            }

            if(processor.getResult().length == 1)
            {
                final JavaResolveResult javaResolveResult = processor.getResult()[0];

                if(javaResolveResult != JavaResolveResult.EMPTY && getOptions() != null)
                {
                    final Boolean value = JavaClassReferenceProvider.RESOLVE_QUALIFIED_CLASS_NAME.getValue(getOptions());
                    final PsiClass psiClass = (PsiClass) javaResolveResult.getElement();
                    if(value != null && value.booleanValue() && psiClass != null)
                    {
                        final String qualifiedName = psiClass.getQualifiedName();

                        if(!qName.equals(qualifiedName))
                        {
                            return JavaResolveResult.EMPTY;
                        }
                    }
                }

                return javaResolveResult;
            }
        }
    }
    return resolveResult != null ? new CandidateInfo(resolveResult, PsiSubstitutor.EMPTY, false, false, psiElement) : JavaResolveResult.EMPTY;
}