Fixed resolving references to packages in plugin.
This commit is contained in:
@@ -185,7 +185,7 @@ public object JetUsageTypeProvider : UsageTypeProviderEx {
|
|||||||
} else {
|
} else {
|
||||||
getClassUsageType()
|
getClassUsageType()
|
||||||
}
|
}
|
||||||
is JavaPackageFragmentDescriptor -> getClassUsageType()
|
is PackageViewDescriptor -> getClassUsageType()
|
||||||
is VariableDescriptor -> getVariableUsageType()
|
is VariableDescriptor -> getVariableUsageType()
|
||||||
is FunctionDescriptor -> getFunctionUsageType(descriptor)
|
is FunctionDescriptor -> getFunctionUsageType(descriptor)
|
||||||
else -> null
|
else -> null
|
||||||
|
|||||||
@@ -18,14 +18,15 @@ package org.jetbrains.jet.plugin.references;
|
|||||||
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.psi.PsiElementResolveResult;
|
import com.intellij.psi.*;
|
||||||
import com.intellij.psi.PsiPolyVariantReference;
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
import com.intellij.psi.ResolveResult;
|
|
||||||
import com.intellij.util.IncorrectOperationException;
|
import com.intellij.util.IncorrectOperationException;
|
||||||
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
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.psi.JetReferenceExpression;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
||||||
@@ -119,9 +120,17 @@ public abstract class JetPsiReference implements PsiPolyVariantReference {
|
|||||||
if (targetDescriptors != null) {
|
if (targetDescriptors != null) {
|
||||||
assert !(targetDescriptors.isEmpty()) : "targetDescriptors is not null, but empty, for " + myExpression.getText();
|
assert !(targetDescriptors.isEmpty()) : "targetDescriptors is not null, but empty, for " + myExpression.getText();
|
||||||
Set<PsiElement> result = Sets.newHashSet();
|
Set<PsiElement> result = Sets.newHashSet();
|
||||||
|
Project project = myExpression.getProject();
|
||||||
for (DeclarationDescriptor target : targetDescriptors) {
|
for (DeclarationDescriptor target : targetDescriptors) {
|
||||||
result.addAll(BindingContextUtils.descriptorToDeclarations(context, target));
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package org.jetbrains.jet.testing;
|
|||||||
import com.intellij.navigation.ItemPresentation;
|
import com.intellij.navigation.ItemPresentation;
|
||||||
import com.intellij.navigation.NavigationItem;
|
import com.intellij.navigation.NavigationItem;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
|
import com.intellij.psi.PsiPackage;
|
||||||
import junit.framework.Assert;
|
import junit.framework.Assert;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.asJava.KotlinLightClass;
|
import org.jetbrains.jet.asJava.KotlinLightClass;
|
||||||
@@ -46,6 +47,8 @@ public final class ReferenceUtils {
|
|||||||
|
|
||||||
String presentableText = presentation.getPresentableText();
|
String presentableText = presentation.getPresentableText();
|
||||||
String locationString = presentation.getLocationString();
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user