From 76d8e8b95d8a3edf3b9f01e7736c802eacaefe9a Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 2 Aug 2013 16:21:05 +0400 Subject: [PATCH] Introduce parent class for "find usage" handlers --- .../KotlinFindUsagesHandlerFactory.java | 11 ++-- .../KotlinFindClassUsagesHandler.java | 12 ++-- .../KotlinFindFunctionUsagesHandler.java | 12 ++-- .../handlers/KotlinFindUsagesHandler.java | 64 +++++++++++++++++++ 4 files changed, 83 insertions(+), 16 deletions(-) rename idea/src/org/jetbrains/jet/plugin/findUsages/{ => handlers}/KotlinFindClassUsagesHandler.java (61%) rename idea/src/org/jetbrains/jet/plugin/findUsages/{ => handlers}/KotlinFindFunctionUsagesHandler.java (59%) create mode 100644 idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindUsagesHandler.java diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinFindUsagesHandlerFactory.java b/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinFindUsagesHandlerFactory.java index 6d9e1bebc6b..0e8cf8c806e 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinFindUsagesHandlerFactory.java +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinFindUsagesHandlerFactory.java @@ -22,20 +22,23 @@ import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.JetClass; import org.jetbrains.jet.lang.psi.JetFunction; +import org.jetbrains.jet.lang.psi.JetNamedFunction; +import org.jetbrains.jet.plugin.findUsages.handlers.KotlinFindClassUsagesHandler; +import org.jetbrains.jet.plugin.findUsages.handlers.KotlinFindFunctionUsagesHandler; public class KotlinFindUsagesHandlerFactory extends FindUsagesHandlerFactory { @Override public boolean canFindUsages(@NotNull PsiElement element) { - return element instanceof JetClass || element instanceof JetFunction; + return element instanceof JetClass || element instanceof JetNamedFunction; } @Override public FindUsagesHandler createFindUsagesHandler(@NotNull PsiElement element, boolean forHighlightUsages) { if (element instanceof JetClass) { - return new KotlinFindClassUsagesHandler(element); + return new KotlinFindClassUsagesHandler((JetClass) element, this); } - if (element instanceof JetFunction) { - return new KotlinFindFunctionUsagesHandler(element); + if (element instanceof JetNamedFunction) { + return new KotlinFindFunctionUsagesHandler((JetNamedFunction) element, this); } throw new IllegalArgumentException("unexpected element type: " + element); } diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinFindClassUsagesHandler.java b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindClassUsagesHandler.java similarity index 61% rename from idea/src/org/jetbrains/jet/plugin/findUsages/KotlinFindClassUsagesHandler.java rename to idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindClassUsagesHandler.java index 1556caca6b6..495a6f521e6 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinFindClassUsagesHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindClassUsagesHandler.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.jetbrains.jet.plugin.findUsages; +package org.jetbrains.jet.plugin.findUsages.handlers; -import com.intellij.find.findUsages.FindUsagesHandler; -import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.psi.JetClass; +import org.jetbrains.jet.plugin.findUsages.KotlinFindUsagesHandlerFactory; -public class KotlinFindClassUsagesHandler extends FindUsagesHandler { - public KotlinFindClassUsagesHandler(@NotNull PsiElement psiElement) { - super(psiElement); +public class KotlinFindClassUsagesHandler extends KotlinFindUsagesHandler { + public KotlinFindClassUsagesHandler(@NotNull JetClass jetClass, @NotNull KotlinFindUsagesHandlerFactory factory) { + super(jetClass, factory); } } diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinFindFunctionUsagesHandler.java b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindFunctionUsagesHandler.java similarity index 59% rename from idea/src/org/jetbrains/jet/plugin/findUsages/KotlinFindFunctionUsagesHandler.java rename to idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindFunctionUsagesHandler.java index 0e513e95eba..a09be60fdfb 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinFindFunctionUsagesHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindFunctionUsagesHandler.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.jetbrains.jet.plugin.findUsages; +package org.jetbrains.jet.plugin.findUsages.handlers; -import com.intellij.find.findUsages.FindUsagesHandler; -import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.psi.JetNamedFunction; +import org.jetbrains.jet.plugin.findUsages.KotlinFindUsagesHandlerFactory; -public class KotlinFindFunctionUsagesHandler extends FindUsagesHandler { - protected KotlinFindFunctionUsagesHandler(@NotNull PsiElement psiElement) { - super(psiElement); +public class KotlinFindFunctionUsagesHandler extends KotlinFindUsagesHandler { + public KotlinFindFunctionUsagesHandler(@NotNull JetNamedFunction function, @NotNull KotlinFindUsagesHandlerFactory factory) { + super(function, factory); } } diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindUsagesHandler.java b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindUsagesHandler.java new file mode 100644 index 00000000000..714de4c8d68 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindUsagesHandler.java @@ -0,0 +1,64 @@ +/* + * Copyright 2010-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.findUsages.handlers; + +import com.intellij.find.findUsages.FindUsagesHandler; +import com.intellij.find.findUsages.JavaFindUsagesHandlerFactory; +import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.plugin.findUsages.KotlinFindUsagesHandlerFactory; + +import java.util.Collection; +import java.util.Collections; + +public abstract class KotlinFindUsagesHandler extends FindUsagesHandler { + private final KotlinFindUsagesHandlerFactory factory; + private final Collection elementsToSearch; + + public KotlinFindUsagesHandler( + @NotNull T psiElement, + @NotNull Collection elementsToSearch, + @NotNull KotlinFindUsagesHandlerFactory factory + ) { + super(psiElement); + this.factory = factory; + this.elementsToSearch = elementsToSearch; + } + + @SuppressWarnings("unchecked") + @NotNull + public T getElement() { + return (T)getPsiElement(); + } + + public KotlinFindUsagesHandler(@NotNull T psiElement, @NotNull KotlinFindUsagesHandlerFactory factory) { + this(psiElement, Collections.emptyList(), factory); + } + + public final KotlinFindUsagesHandlerFactory getFactory() { + return factory; + } + + @NotNull + @Override + public PsiElement[] getPrimaryElements() { + return elementsToSearch.isEmpty() + ? new PsiElement[] {getPsiElement()} + : elementsToSearch.toArray(new PsiElement[elementsToSearch.size()]); + } +}