From ff32f3d934976de73d3f18f38d2078857253f917 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 28 Jan 2013 13:26:36 +0400 Subject: [PATCH] Cleanup --- .../PsiJavaCodeReferenceElementImpl.java | 76 ++++++++----------- .../daemon/AdvHighlightingTest.java | 4 +- 2 files changed, 35 insertions(+), 45 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java index 52120a16a2d1..a7085c301906 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java @@ -17,6 +17,7 @@ package com.intellij.psi.impl.source; import com.intellij.lang.ASTNode; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; @@ -328,37 +329,33 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme private static final class OurGenericsResolver implements ResolveCache.PolyVariantResolver { private static final OurGenericsResolver INSTANCE = new OurGenericsResolver(); - public static JavaResolveResult[] _resolve(final PsiJavaReference ref, final boolean incompleteCode) { - final PsiJavaCodeReferenceElementImpl referenceElement = (PsiJavaCodeReferenceElementImpl)ref; - final int kind = referenceElement.getKind(); + @NotNull + @Override + public JavaResolveResult[] resolve(@NotNull PsiJavaReference ref, boolean incompleteCode) { + PsiJavaCodeReferenceElementImpl referenceElement = (PsiJavaCodeReferenceElementImpl)ref; + int kind = referenceElement.getKind(); JavaResolveResult[] result = referenceElement.resolve(kind); + if (incompleteCode && result.length == 0 && kind != CLASS_FQ_NAME_KIND && kind != CLASS_FQ_OR_PACKAGE_NAME_KIND) { - final VariableResolverProcessor processor = new VariableResolverProcessor(referenceElement); + VariableResolverProcessor processor = new VariableResolverProcessor(referenceElement); PsiScopesUtil.resolveAndWalk(processor, referenceElement, null, incompleteCode); result = processor.getResult(); if (result.length == 0 && kind == CLASS_NAME_KIND) { - return referenceElement.resolve(PACKAGE_NAME_KIND); + result = referenceElement.resolve(PACKAGE_NAME_KIND); } } - return result; - } - @NotNull - @Override - public JavaResolveResult[] resolve(@NotNull final PsiJavaReference ref, final boolean incompleteCode) { - final JavaResolveResult[] result = _resolve(ref, incompleteCode); if (result.length > 0 && result[0].getElement() instanceof PsiClass) { - final PsiType[] parameters = ((PsiJavaCodeReferenceElement)ref).getTypeParameters(); - final JavaResolveResult[] newResult = new JavaResolveResult[result.length]; + PsiType[] parameters = ((PsiJavaCodeReferenceElement)ref).getTypeParameters(); for (int i = 0; i < result.length; i++) { - final CandidateInfo resolveResult = (CandidateInfo)result[i]; - final PsiClass aClass = (PsiClass)resolveResult.getElement(); - assert aClass != null; - newResult[i] = !aClass.hasTypeParameters() ? - resolveResult : new CandidateInfo(resolveResult, resolveResult.getSubstitutor().putAll(aClass, parameters)); + CandidateInfo resolveResult = (CandidateInfo)result[i]; + PsiElement resultElement = resolveResult.getElement(); + if (resultElement instanceof PsiClass && ((PsiClass)resultElement).hasTypeParameters()) { + result[i] = new CandidateInfo(resolveResult, resolveResult.getSubstitutor().putAll((PsiClass)resultElement, parameters)); + } } - return newResult; } + return result; } } @@ -367,8 +364,7 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme @NotNull public JavaResolveResult advancedResolve(final boolean incompleteCode) { final JavaResolveResult[] results = multiResolve(incompleteCode); - if (results.length == 1) return results[0]; - return JavaResolveResult.EMPTY; + return results.length == 1 ? results[0] : JavaResolveResult.EMPTY; } @Override @@ -397,10 +393,9 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme switch (kind) { case CLASS_FQ_NAME_KIND: { // TODO: support type parameters in FQ names - final String textSkipWhiteSpaceAndComments = getTextSkipWhiteSpaceAndComments(); - if (textSkipWhiteSpaceAndComments == null || textSkipWhiteSpaceAndComments.length() == 0) return JavaResolveResult.EMPTY_ARRAY; - final PsiClass aClass = - JavaPsiFacade.getInstance(getProject()).findClass(textSkipWhiteSpaceAndComments, getResolveScope()); + String text = getTextSkipWhiteSpaceAndComments(); + if (StringUtil.isEmptyOrSpaces(text)) return JavaResolveResult.EMPTY_ARRAY; + PsiClass aClass = JavaPsiFacade.getInstance(getProject()).findClass(text, getResolveScope()); if (aClass == null) return JavaResolveResult.EMPTY_ARRAY; return new JavaResolveResult[]{new CandidateInfo(aClass, updateSubstitutor(PsiSubstitutor.EMPTY, aClass), this, false)}; } @@ -447,40 +442,35 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme final ClassResolverProcessor processor = new ClassResolverProcessor(className, this); PsiScopesUtil.resolveAndWalk(processor, this, null); - return processor.getResult(); } case PACKAGE_NAME_KIND: { - final String packageName = getTextSkipWhiteSpaceAndComments(); - final PsiManager manager = getManager(); - final PsiPackage aPackage = JavaPsiFacade.getInstance(manager.getProject()).findPackage(packageName); + String packageName = getTextSkipWhiteSpaceAndComments(); + Project project = getManager().getProject(); + PsiPackage aPackage = JavaPsiFacade.getInstance(project).findPackage(packageName); if (aPackage == null || !aPackage.isValid()) { - return JavaPsiFacade.getInstance(manager.getProject()).isPartOfPackagePrefix(packageName) - ? CandidateInfo.RESOLVE_RESULT_FOR_PACKAGE_PREFIX_PACKAGE - : JavaResolveResult.EMPTY_ARRAY; + return JavaPsiFacade.getInstance(project).isPartOfPackagePrefix(packageName) ? + CandidateInfo.RESOLVE_RESULT_FOR_PACKAGE_PREFIX_PACKAGE : JavaResolveResult.EMPTY_ARRAY; } return new JavaResolveResult[]{new CandidateInfo(aPackage, PsiSubstitutor.EMPTY)}; } case CLASS_FQ_OR_PACKAGE_NAME_KIND: { - final JavaResolveResult[] result = resolve(CLASS_FQ_NAME_KIND); + JavaResolveResult[] result = resolve(CLASS_FQ_NAME_KIND); if (result.length == 0) { - return resolve(PACKAGE_NAME_KIND); + result = resolve(PACKAGE_NAME_KIND); } return result; } case CLASS_OR_PACKAGE_NAME_KIND: { - final JavaResolveResult[] classResolveResult = resolve(CLASS_NAME_KIND); - // [dsl]todo[ik]: review this change I guess ResolveInfo should be merged if both - // class and package resolve failed. - if (classResolveResult.length == 0) { - final JavaResolveResult[] packageResolveResult = resolve(PACKAGE_NAME_KIND); - if (packageResolveResult.length > 0) return packageResolveResult; + JavaResolveResult[] result = resolve(CLASS_NAME_KIND); + if (result.length == 0) { + result = resolve(PACKAGE_NAME_KIND); } - return classResolveResult; + return result; } - default: - LOG.assertTrue(false); } + + LOG.assertTrue(false, this); return JavaResolveResult.EMPTY_ARRAY; } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingTest.java index d9ff77742351..f3573fcdc11a 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingTest.java @@ -49,8 +49,8 @@ import java.io.File; import java.util.Collection; /** - * This class intended for "heavily-loaded" tests only, e.g. those need to setup separate project directory structure to run - * For "lightweight" tests use LightAdvHighlightingTest + * This class intended for "heavily-loaded" tests only, e.g. those need to setup separate project directory structure to run. + * For "lightweight" tests use LightAdvHighlightingTest. */ public class AdvHighlightingTest extends DaemonAnalyzerTestCase { @NonNls private static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/advHighlighting";