/* * Copyright 2000-2014 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 com.intellij.find.findUsages; import com.intellij.ide.util.SuperMethodWarningUtil; import com.intellij.lang.java.JavaFindUsagesProvider; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; /** * @author peter */ public class JavaFindUsagesHandlerFactory extends FindUsagesHandlerFactory { private final JavaClassFindUsagesOptions myFindClassOptions; private final JavaMethodFindUsagesOptions myFindMethodOptions; private final JavaPackageFindUsagesOptions myFindPackageOptions; private final JavaThrowFindUsagesOptions myFindThrowOptions; private final JavaVariableFindUsagesOptions myFindVariableOptions; public static JavaFindUsagesHandlerFactory getInstance(@NotNull Project project) { return ContainerUtil.findInstance(Extensions.getExtensions(EP_NAME, project), JavaFindUsagesHandlerFactory.class); } public JavaFindUsagesHandlerFactory(Project project) { myFindClassOptions = new JavaClassFindUsagesOptions(project); myFindMethodOptions = new JavaMethodFindUsagesOptions(project); myFindPackageOptions = new JavaPackageFindUsagesOptions(project); myFindThrowOptions = new JavaThrowFindUsagesOptions(project); myFindVariableOptions = new JavaVariableFindUsagesOptions(project); } @Override public boolean canFindUsages(@NotNull final PsiElement element) { return new JavaFindUsagesProvider().canFindUsagesFor(element); } @Override public FindUsagesHandler createFindUsagesHandler(@NotNull final PsiElement element, final boolean forHighlightUsages) { if (element instanceof PsiDirectory) { final PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage((PsiDirectory)element); return psiPackage == null ? null : new JavaFindUsagesHandler(psiPackage, this); } if (element instanceof PsiMethod && !forHighlightUsages) { final PsiMethod[] methods = SuperMethodWarningUtil.checkSuperMethods((PsiMethod)element, JavaFindUsagesHandler.ACTION_STRING); if (methods.length > 1) { return new JavaFindUsagesHandler(element, methods, this); } if (methods.length == 1) { return new JavaFindUsagesHandler(methods[0], this); } return FindUsagesHandler.NULL_HANDLER; } return new JavaFindUsagesHandler(element, this); } @NotNull public JavaClassFindUsagesOptions getFindClassOptions() { return myFindClassOptions; } @NotNull public JavaMethodFindUsagesOptions getFindMethodOptions() { return myFindMethodOptions; } @NotNull public JavaPackageFindUsagesOptions getFindPackageOptions() { return myFindPackageOptions; } @NotNull public JavaThrowFindUsagesOptions getFindThrowOptions() { return myFindThrowOptions; } @NotNull public JavaVariableFindUsagesOptions getFindVariableOptions() { return myFindVariableOptions; } }