Fix find usages classification for objects

Objects/enum entries are treated as variables as before. Test data for private
object in superclass was changed because now the object (as opposed to the
property) is no longer resolved due to KT-354
This commit is contained in:
Alexander Udalov
2013-11-21 19:24:07 +04:00
parent ddda69c0a6
commit e48c91bba4
10 changed files with 26 additions and 18 deletions
@@ -32,6 +32,7 @@ import org.jetbrains.jet.lexer.JetTokens
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache
import org.jetbrains.jet.plugin.JetBundle import org.jetbrains.jet.plugin.JetBundle
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaNamespaceDescriptor import org.jetbrains.jet.lang.resolve.java.descriptor.JavaNamespaceDescriptor
import org.jetbrains.jet.lang.resolve.DescriptorUtils
public object JetUsageTypeProvider : UsageTypeProviderEx { public object JetUsageTypeProvider : UsageTypeProviderEx {
public override fun getUsageType(element: PsiElement?): UsageType? { public override fun getUsageType(element: PsiElement?): UsageType? {
@@ -179,7 +180,13 @@ public object JetUsageTypeProvider : UsageTypeProviderEx {
val descriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, reference) val descriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, reference)
return when (descriptor) { return when (descriptor) {
is ClassifierDescriptor, is JavaNamespaceDescriptor -> getClassUsageType() is ClassifierDescriptor -> if (DescriptorUtils.isSingleton(descriptor)) {
// Treat object accesses as variables to simulate the old behaviour (when variables were created for objects)
getVariableUsageType()
} else {
getClassUsageType()
}
is JavaNamespaceDescriptor -> getClassUsageType()
is VariableDescriptor -> getVariableUsageType() is VariableDescriptor -> getVariableUsageType()
is FunctionDescriptor -> getFunctionUsageType(descriptor) is FunctionDescriptor -> getFunctionUsageType(descriptor)
else -> null else -> null
@@ -20,19 +20,17 @@ import com.intellij.find.findUsages.FindUsagesHandler
import com.intellij.find.findUsages.FindUsagesHandlerFactory import com.intellij.find.findUsages.FindUsagesHandlerFactory
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.jet.lang.psi.JetClass
import org.jetbrains.jet.lang.psi.JetDeclaration
import org.jetbrains.jet.lang.psi.JetNamedFunction import org.jetbrains.jet.lang.psi.JetNamedFunction
import org.jetbrains.jet.plugin.findUsages.handlers.KotlinFindClassUsagesHandler import org.jetbrains.jet.plugin.findUsages.handlers.KotlinFindClassUsagesHandler
import org.jetbrains.jet.plugin.findUsages.handlers.KotlinFindMemberUsagesHandler import org.jetbrains.jet.plugin.findUsages.handlers.KotlinFindMemberUsagesHandler
import org.jetbrains.jet.plugin.refactoring.JetRefactoringUtil import org.jetbrains.jet.plugin.refactoring.JetRefactoringUtil
import org.jetbrains.jet.lang.psi.JetProperty import org.jetbrains.jet.lang.psi.JetProperty
import org.jetbrains.jet.lang.psi.JetNamedDeclaration
import com.intellij.find.findUsages.FindUsagesOptions import com.intellij.find.findUsages.FindUsagesOptions
import org.jetbrains.jet.lang.psi.JetTypeParameter import org.jetbrains.jet.lang.psi.JetTypeParameter
import org.jetbrains.jet.plugin.findUsages.handlers.KotlinTypeParameterFindUsagesHandler import org.jetbrains.jet.plugin.findUsages.handlers.KotlinTypeParameterFindUsagesHandler
import org.jetbrains.jet.lang.psi.JetParameter import org.jetbrains.jet.lang.psi.JetParameter
import org.jetbrains.jet.lang.psi.JetNamedDeclaration import org.jetbrains.jet.lang.psi.JetNamedDeclaration
import org.jetbrains.jet.lang.psi.JetClassOrObject
public class KotlinFindUsagesHandlerFactory(project: Project) : FindUsagesHandlerFactory() { public class KotlinFindUsagesHandlerFactory(project: Project) : FindUsagesHandlerFactory() {
val findFunctionOptions = KotlinFunctionFindUsagesOptions(project) val findFunctionOptions = KotlinFunctionFindUsagesOptions(project)
@@ -41,11 +39,15 @@ public class KotlinFindUsagesHandlerFactory(project: Project) : FindUsagesHandle
val defaultOptions = FindUsagesOptions(project) val defaultOptions = FindUsagesOptions(project)
public override fun canFindUsages(element: PsiElement): Boolean = public override fun canFindUsages(element: PsiElement): Boolean =
element is JetClass || element is JetNamedFunction || element is JetProperty || element is JetParameter || element is JetTypeParameter element is JetClassOrObject ||
element is JetNamedFunction ||
element is JetProperty ||
element is JetParameter ||
element is JetTypeParameter
public override fun createFindUsagesHandler(element: PsiElement, forHighlightUsages: Boolean): FindUsagesHandler { public override fun createFindUsagesHandler(element: PsiElement, forHighlightUsages: Boolean): FindUsagesHandler {
when(element) { when(element) {
is JetClass -> is JetClassOrObject ->
return KotlinFindClassUsagesHandler(element, this) return KotlinFindClassUsagesHandler(element, this)
is JetNamedFunction, is JetProperty, is JetParameter -> { is JetNamedFunction, is JetProperty, is JetParameter -> {
@@ -33,7 +33,6 @@ import com.intellij.util.Processor;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.asJava.LightClassUtil; import org.jetbrains.jet.asJava.LightClassUtil;
import org.jetbrains.jet.lang.psi.JetClass;
import org.jetbrains.jet.lang.psi.JetClassOrObject; import org.jetbrains.jet.lang.psi.JetClassOrObject;
import org.jetbrains.jet.plugin.findUsages.FindUsagesPackage; import org.jetbrains.jet.plugin.findUsages.FindUsagesPackage;
import org.jetbrains.jet.plugin.findUsages.KotlinClassFindUsagesOptions; import org.jetbrains.jet.plugin.findUsages.KotlinClassFindUsagesOptions;
@@ -43,8 +42,8 @@ import org.jetbrains.jet.plugin.search.usagesSearch.UsagesSearch;
import org.jetbrains.jet.plugin.search.usagesSearch.UsagesSearchRequest; import org.jetbrains.jet.plugin.search.usagesSearch.UsagesSearchRequest;
import org.jetbrains.jet.plugin.search.usagesSearch.UsagesSearchTarget; import org.jetbrains.jet.plugin.search.usagesSearch.UsagesSearchTarget;
public class KotlinFindClassUsagesHandler extends KotlinFindUsagesHandler<JetClass> { public class KotlinFindClassUsagesHandler extends KotlinFindUsagesHandler<JetClassOrObject> {
public KotlinFindClassUsagesHandler(@NotNull JetClass jetClass, @NotNull KotlinFindUsagesHandlerFactory factory) { public KotlinFindClassUsagesHandler(@NotNull JetClassOrObject jetClass, @NotNull KotlinFindUsagesHandlerFactory factory) {
super(jetClass, factory); super(jetClass, factory);
} }
@@ -131,7 +130,7 @@ public class KotlinFindClassUsagesHandler extends KotlinFindUsagesHandler<JetCla
@Override @Override
protected boolean isSearchForTextOccurencesAvailable(@NotNull PsiElement psiElement, boolean isSingleFile) { protected boolean isSearchForTextOccurencesAvailable(@NotNull PsiElement psiElement, boolean isSingleFile) {
if (isSingleFile) return false; if (isSingleFile) return false;
return psiElement instanceof JetClass; return psiElement instanceof JetClassOrObject;
} }
@NotNull @NotNull
@@ -1,4 +1,4 @@
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclarationName // PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclaration
package server; package server;
object <caret>O { object <caret>O {
@@ -1,4 +1,4 @@
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclarationName // PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclaration
// OPTIONS: usages // OPTIONS: usages
fun foo(): Any { fun foo(): Any {
object <caret>Bar object <caret>Bar
@@ -1,4 +1,4 @@
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclarationName // PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclaration
// OPTIONS: usages // OPTIONS: usages
fun foo(): Any { fun foo(): Any {
if (true) { if (true) {
@@ -1,4 +1,4 @@
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclarationName // PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclaration
package a package a
class A { class A {
@@ -1,4 +1,4 @@
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclarationName // PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclaration
package server; package server;
object <caret>O { object <caret>O {
@@ -1,4 +1,4 @@
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclarationName // PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclaration
// OPTIONS: usages // OPTIONS: usages
package server; package server;
@@ -11,6 +11,6 @@ public open class Server() {
} }
public class ServerEx(): Server() { public class ServerEx(): Server() {
override fun processRequest() = Foo override fun processRequest() = Server.Foo
} }
@@ -1,3 +1,3 @@
Value read (10: 33) open fun processRequest() = Foo Value read (10: 33) open fun processRequest() = Foo
Value read (14: 37) override fun processRequest() = Foo Value read (14: 44) override fun processRequest() = Server.Foo
Value read (5: 26) println(Server().Foo) Value read (5: 26) println(Server().Foo)