From ad7044cc6cf9f845d1e3070cab9dd4cfac37b5d5 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 25 Nov 2013 20:52:17 +0400 Subject: [PATCH] Fixed resolving references to packages in plugin. --- .../plugin/findUsages/JetUsageTypeProvider.kt | 2 +- .../plugin/references/JetPsiReference.java | 19 ++++++++++++++----- .../jetbrains/jet/testing/ReferenceUtils.java | 5 ++++- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt b/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt index 1013b239b09..d9324587373 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt @@ -185,7 +185,7 @@ public object JetUsageTypeProvider : UsageTypeProviderEx { } else { getClassUsageType() } - is JavaPackageFragmentDescriptor -> getClassUsageType() + is PackageViewDescriptor -> getClassUsageType() is VariableDescriptor -> getVariableUsageType() is FunctionDescriptor -> getFunctionUsageType(descriptor) else -> null diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java b/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java index 798707fad91..ad778aa9aa1 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java +++ b/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java @@ -18,14 +18,15 @@ package org.jetbrains.jet.plugin.references; import com.google.common.collect.Sets; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiElementResolveResult; -import com.intellij.psi.PsiPolyVariantReference; -import com.intellij.psi.ResolveResult; +import com.intellij.openapi.project.Project; +import com.intellij.psi.*; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor; import org.jetbrains.jet.lang.psi.JetReferenceExpression; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; @@ -119,9 +120,17 @@ public abstract class JetPsiReference implements PsiPolyVariantReference { if (targetDescriptors != null) { assert !(targetDescriptors.isEmpty()) : "targetDescriptors is not null, but empty, for " + myExpression.getText(); Set result = Sets.newHashSet(); + Project project = myExpression.getProject(); for (DeclarationDescriptor target : targetDescriptors) { result.addAll(BindingContextUtils.descriptorToDeclarations(context, target)); - result.addAll(findDeclarationsForDescriptorWithoutTrace(myExpression.getProject(), target)); + result.addAll(findDeclarationsForDescriptorWithoutTrace(project, target)); + + if (target instanceof PackageViewDescriptor) { + JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project); + String fqName = ((PackageViewDescriptor) target).getFqName().asString(); + ContainerUtil.addIfNotNull(result, psiFacade.findPackage(fqName)); + ContainerUtil.addIfNotNull(result, psiFacade.findClass(fqName, GlobalSearchScope.allScope(project))); + } } return result; } diff --git a/idea/tests/org/jetbrains/jet/testing/ReferenceUtils.java b/idea/tests/org/jetbrains/jet/testing/ReferenceUtils.java index 64f0344fa14..7c15c29f412 100644 --- a/idea/tests/org/jetbrains/jet/testing/ReferenceUtils.java +++ b/idea/tests/org/jetbrains/jet/testing/ReferenceUtils.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.testing; import com.intellij.navigation.ItemPresentation; import com.intellij.navigation.NavigationItem; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiPackage; import junit.framework.Assert; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.asJava.KotlinLightClass; @@ -46,6 +47,8 @@ public final class ReferenceUtils { String presentableText = presentation.getPresentableText(); String locationString = presentation.getLocationString(); - return locationString != null ? (locationString + "." + presentableText) : presentableText; + return locationString == null || element instanceof PsiPackage // for PsiPackage, presentableText is FQ name of current package + ? presentableText + : locationString + "." + presentableText; } }