JavaResolveResult (@NotNull PsiElement psiElement, @NotNull String qName, @NotNull PsiFile containingFile) { PsiManager manager = containingFile.getManager(); GlobalSearchScope scope = getScope(containingFile); if (myIndex == myJavaClassReferenceSet.getReferences().length - 1) { 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; } 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) { JavaResolveResult javaResolveResult = processor.getResult()[0]; if (javaResolveResult != JavaResolveResult.EMPTY && getOptions() != null) { Boolean value = JavaClassReferenceProvider.RESOLVE_QUALIFIED_CLASS_NAME.getValue(getOptions()); PsiClass psiClass = (PsiClass)javaResolveResult.getElement(); if (value != null && value.booleanValue() && psiClass != null) { String qualifiedName = psiClass.getQualifiedName(); if (!qName.equals(qualifiedName)) { return JavaResolveResult.EMPTY; } } } return javaResolveResult; } } } if (resolveResult instanceof PsiPackageImpl && !((PsiPackageImpl)resolveResult).mayHaveContentInScope(scope)) { return JavaResolveResult.EMPTY; } return resolveResult != null ? new CandidateInfo(resolveResult, PsiSubstitutor.EMPTY, false, false, psiElement) : JavaResolveResult.EMPTY; }