From 992c7055a58e69fd74f10da5a5af5a0661ded191 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 18 Oct 2013 18:38:58 +0400 Subject: [PATCH] Translate FindUsagesUtils to Kotlin --- .../plugin/findUsages/FindUsagesUtils.java | 59 ---------------- .../KotlinFindClassUsagesHandler.java | 4 +- .../jetbrains/jet/plugin/findUsages/utils.kt | 69 +++++++++++++++++++ .../KotlinCallerMethodsTreeStructure.java | 4 +- 4 files changed, 73 insertions(+), 63 deletions(-) delete mode 100644 idea/src/org/jetbrains/jet/plugin/findUsages/FindUsagesUtils.java create mode 100644 idea/src/org/jetbrains/jet/plugin/findUsages/utils.kt diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/FindUsagesUtils.java b/idea/src/org/jetbrains/jet/plugin/findUsages/FindUsagesUtils.java deleted file mode 100644 index e847168fb6e..00000000000 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/FindUsagesUtils.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.jetbrains.jet.plugin.findUsages; - -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiConstructorCall; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.util.PsiTreeUtil; -import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.BindingContextUtils; -import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache; - -public class FindUsagesUtils { - private FindUsagesUtils() { - } - - private static DeclarationDescriptor getCallDescriptor(PsiElement element, BindingContext bindingContext) { - JetConstructorCalleeExpression constructorCalleeExpression = - PsiTreeUtil.getParentOfType(element, JetConstructorCalleeExpression.class); - if (constructorCalleeExpression != null) { - JetReferenceExpression classReference = constructorCalleeExpression.getConstructorReferenceExpression(); - return bindingContext.get(BindingContext.REFERENCE_TARGET, classReference); - } - - JetCallExpression callExpression = PsiTreeUtil.getParentOfType(element, JetCallExpression.class); - if (callExpression != null) { - JetExpression callee = callExpression.getCalleeExpression(); - if (callee instanceof JetReferenceExpression) { - return bindingContext.get(BindingContext.REFERENCE_TARGET, (JetReferenceExpression) callee); - } - } - - return null; - } - - public static boolean isConstructorUsage(PsiElement element, JetClassOrObject jetClassOrObject) { - PsiConstructorCall constructorCall = PsiTreeUtil.getParentOfType(element, PsiConstructorCall.class); - if (constructorCall != null && constructorCall == element.getParent()) { - PsiMethod constructor = constructorCall.resolveConstructor(); - if (constructor == null) return false; - - PsiClass constructorClass = constructor.getContainingClass(); - return constructorClass != null && constructorClass.getNavigationElement() == jetClassOrObject; - } - if (!(element instanceof JetElement)) return false; - - BindingContext bindingContext = - AnalyzerFacadeWithCache.analyzeFileWithCache((JetFile) element.getContainingFile()).getBindingContext(); - - DeclarationDescriptor descriptor = getCallDescriptor(element, bindingContext); - if (!(descriptor instanceof ConstructorDescriptor)) return false; - - DeclarationDescriptor containingDescriptor = descriptor.getContainingDeclaration(); - return containingDescriptor != null - && BindingContextUtils.descriptorToDeclaration(bindingContext, containingDescriptor) == jetClassOrObject; - } -} diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindClassUsagesHandler.java b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindClassUsagesHandler.java index df6affe1fef..6a9bddd1d4f 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindClassUsagesHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindClassUsagesHandler.java @@ -40,7 +40,7 @@ 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.JetProperty; -import org.jetbrains.jet.plugin.findUsages.FindUsagesUtils; +import org.jetbrains.jet.plugin.findUsages.FindUsagesPackage; import org.jetbrains.jet.plugin.findUsages.KotlinFindUsagesHandlerFactory; import org.jetbrains.jet.plugin.findUsages.dialogs.KotlinFindClassUsagesDialog; import org.jetbrains.jet.plugin.findUsages.options.KotlinClassFindUsagesOptions; @@ -80,7 +80,7 @@ public class KotlinFindClassUsagesHandler extends KotlinFindUsagesHandler()) + if (constructorCalleeExpression != null) { + return bindingContext.get(BindingContext.REFERENCE_TARGET, constructorCalleeExpression.getConstructorReferenceExpression()) + } + + val callExpression = getParentByType(javaClass()) + if (callExpression != null) { + val callee = callExpression.getCalleeExpression() + if (callee is JetReferenceExpression) { + return bindingContext.get(BindingContext.REFERENCE_TARGET, callee) + } + } + + return null + } + + fun checkJavaUsage(): Boolean { + val call = getParentByType(javaClass()) + return call != null && call == getParent() + && call.resolveConstructor()?.getContainingClass()?.getNavigationElement() == jetClassOrObject + } + + fun checkKotlinUsage(): Boolean { + val file = getContainingFile() + if (file !is JetFile) return false + + val bindingContext = AnalyzerFacadeWithCache.analyzeFileWithCache(file).getBindingContext() + + val descriptor = getCallDescriptor(bindingContext) + if (descriptor !is ConstructorDescriptor) return false + + return BindingContextUtils.descriptorToDeclaration(bindingContext, descriptor.getContainingDeclaration()) == jetClassOrObject + } + + return checkJavaUsage() || checkKotlinUsage() +} diff --git a/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallerMethodsTreeStructure.java b/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallerMethodsTreeStructure.java index 773b58b631d..e98971bd5b2 100644 --- a/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallerMethodsTreeStructure.java +++ b/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallerMethodsTreeStructure.java @@ -35,7 +35,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.asJava.LightClassUtil; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.plugin.findUsages.FindUsagesUtils; +import org.jetbrains.jet.plugin.findUsages.FindUsagesPackage; import org.jetbrains.jet.plugin.hierarchy.HierarchyUtils; import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache; import org.jetbrains.jet.plugin.references.JetPsiReference; @@ -150,7 +150,7 @@ public abstract class KotlinCallerMethodsTreeStructure extends KotlinCallTreeStr new Condition() { @Override public boolean value(PsiReference reference) { - return FindUsagesUtils.isConstructorUsage(reference.getElement(), classOrObject); + return FindUsagesPackage.isConstructorUsage(reference.getElement(), classOrObject); } }, defaultQueryProcessor(descriptor, methodToDescriptorMap, false)