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.JetBundle
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaNamespaceDescriptor
import org.jetbrains.jet.lang.resolve.DescriptorUtils
public object JetUsageTypeProvider : UsageTypeProviderEx {
public override fun getUsageType(element: PsiElement?): UsageType? {
@@ -179,7 +180,13 @@ public object JetUsageTypeProvider : UsageTypeProviderEx {
val descriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, reference)
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 FunctionDescriptor -> getFunctionUsageType(descriptor)
else -> null
@@ -20,19 +20,17 @@ import com.intellij.find.findUsages.FindUsagesHandler
import com.intellij.find.findUsages.FindUsagesHandlerFactory
import com.intellij.openapi.project.Project
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.plugin.findUsages.handlers.KotlinFindClassUsagesHandler
import org.jetbrains.jet.plugin.findUsages.handlers.KotlinFindMemberUsagesHandler
import org.jetbrains.jet.plugin.refactoring.JetRefactoringUtil
import org.jetbrains.jet.lang.psi.JetProperty
import org.jetbrains.jet.lang.psi.JetNamedDeclaration
import com.intellij.find.findUsages.FindUsagesOptions
import org.jetbrains.jet.lang.psi.JetTypeParameter
import org.jetbrains.jet.plugin.findUsages.handlers.KotlinTypeParameterFindUsagesHandler
import org.jetbrains.jet.lang.psi.JetParameter
import org.jetbrains.jet.lang.psi.JetNamedDeclaration
import org.jetbrains.jet.lang.psi.JetClassOrObject
public class KotlinFindUsagesHandlerFactory(project: Project) : FindUsagesHandlerFactory() {
val findFunctionOptions = KotlinFunctionFindUsagesOptions(project)
@@ -41,11 +39,15 @@ public class KotlinFindUsagesHandlerFactory(project: Project) : FindUsagesHandle
val defaultOptions = FindUsagesOptions(project)
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 {
when(element) {
is JetClass ->
is JetClassOrObject ->
return KotlinFindClassUsagesHandler(element, this)
is JetNamedFunction, is JetProperty, is JetParameter -> {
@@ -33,7 +33,6 @@ import com.intellij.util.Processor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.asJava.LightClassUtil;
import org.jetbrains.jet.lang.psi.JetClass;
import org.jetbrains.jet.lang.psi.JetClassOrObject;
import org.jetbrains.jet.plugin.findUsages.FindUsagesPackage;
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.UsagesSearchTarget;
public class KotlinFindClassUsagesHandler extends KotlinFindUsagesHandler<JetClass> {
public KotlinFindClassUsagesHandler(@NotNull JetClass jetClass, @NotNull KotlinFindUsagesHandlerFactory factory) {
public class KotlinFindClassUsagesHandler extends KotlinFindUsagesHandler<JetClassOrObject> {
public KotlinFindClassUsagesHandler(@NotNull JetClassOrObject jetClass, @NotNull KotlinFindUsagesHandlerFactory factory) {
super(jetClass, factory);
}
@@ -131,7 +130,7 @@ public class KotlinFindClassUsagesHandler extends KotlinFindUsagesHandler<JetCla
@Override
protected boolean isSearchForTextOccurencesAvailable(@NotNull PsiElement psiElement, boolean isSingleFile) {
if (isSingleFile) return false;
return psiElement instanceof JetClass;
return psiElement instanceof JetClassOrObject;
}
@NotNull
@@ -1,4 +1,4 @@
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclarationName
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclaration
package server;
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
fun foo(): Any {
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
fun foo(): Any {
if (true) {
@@ -1,4 +1,4 @@
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclarationName
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetObjectDeclaration
package 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;
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
package server;
@@ -11,6 +11,6 @@ public open class 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 (14: 37) override fun processRequest() = Foo
Value read (14: 44) override fun processRequest() = Server.Foo
Value read (5: 26) println(Server().Foo)