| /* |
| * Copyright 2000-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 com.intellij.codeInsight.intention; |
| |
| import com.intellij.codeInsight.daemon.HighlightDisplayKey; |
| import com.intellij.codeInspection.LocalQuickFix; |
| import com.intellij.codeInspection.ex.InspectionToolWrapper; |
| import com.intellij.openapi.components.ServiceManager; |
| import com.intellij.openapi.extensions.ExtensionPointName; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.util.Key; |
| import com.intellij.openapi.util.UserDataHolder; |
| import com.intellij.psi.PsiElement; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| import java.util.List; |
| |
| /** |
| * Manager for intentions. All intentions must be registered here. |
| * |
| * @see IntentionAction |
| */ |
| public abstract class IntentionManager { |
| public static final ExtensionPointName<IntentionActionBean> EP_INTENTION_ACTIONS = new ExtensionPointName<IntentionActionBean>("com.intellij.intentionAction"); |
| |
| /** |
| * Key to be used within {@link UserDataHolder} in order to check presence of explicit indication on if intentions sub-menu |
| * should be shown. |
| */ |
| public static final Key<Boolean> SHOW_INTENTION_OPTIONS_KEY = Key.create("SHOW_INTENTION_OPTIONS_KEY"); |
| |
| /** |
| * @deprecated Use {@link #getInstance()} unstead. |
| * Returns instance of <code>IntentionManager</code> for given project. |
| * |
| * @param project the project for which the instance is returned. |
| * @return instance of the <code>IntentionManager</code> assigned for given project. |
| */ |
| @Deprecated |
| public static IntentionManager getInstance(Project project) { |
| return getInstance(); |
| } |
| |
| public static IntentionManager getInstance() { |
| return ServiceManager.getService(IntentionManager.class); |
| } |
| |
| /** |
| * Registers an intention action. |
| * |
| * @param action the intention action to register. |
| */ |
| public abstract void addAction(@NotNull IntentionAction action); |
| |
| /** |
| * Returns all registered intention actions. |
| * |
| * @return array of registered actions. |
| */ |
| @NotNull |
| public abstract IntentionAction[] getIntentionActions(); |
| |
| /** |
| * Returns all registered intention actions which are available now |
| * (not disabled via Settings|Intentions or Alt-Enter|Disable intention quick fix) |
| * |
| * @return array of actions. |
| */ |
| @NotNull |
| public abstract IntentionAction[] getAvailableIntentionActions(); |
| |
| /** |
| * Registers an intention action which can be enabled or disabled through the "Intention |
| * Settings" dialog. To provide the description and the example code for the intention, |
| * the directory with the name equal to {@link IntentionAction#getFamilyName()} needs to |
| * be created under the <code>intentionDescriptions</code> directory of the resource root. |
| * The directory needs to contain three files. <code>description.html</code> provides the |
| * description of the intention, <code>before.java.template</code> provides the sample code |
| * before the intention is invoked, and <code>after.java.template</code> provides the sample |
| * code after invoking the intention. The templates can contain a fragment of code surrounded |
| * with <code><spot></code> and <code></spot></code> markers. If present, that fragment |
| * will be surrounded by a blinking rectangle in the inspection preview pane. |
| * |
| * @param action the intention action to register. |
| * @param category the name of the category or categories under which the intention will be shown |
| * in the "Intention Settings" dialog. |
| */ |
| public abstract void registerIntentionAndMetaData(@NotNull IntentionAction action, @NotNull String... category); |
| |
| /** |
| * @deprecated custom directory name causes problem with internationalization of intention descriptions. |
| * Register intention class via extension point {@link IntentionManager#EP_INTENTION_ACTIONS} instead. |
| */ |
| @Deprecated |
| public abstract void registerIntentionAndMetaData(@NotNull IntentionAction action, |
| @NotNull String[] category, |
| @NotNull String descriptionDirectoryName); |
| |
| public abstract void registerIntentionAndMetaData(@NotNull IntentionAction action, |
| @NotNull String[] category, |
| @NotNull String description, |
| @NotNull String exampleFileExtension, |
| @NotNull String[] exampleTextBefore, |
| @NotNull String[] exampleTextAfter); |
| |
| public abstract void unregisterIntention(@NotNull IntentionAction intentionAction); |
| |
| /** |
| * @return actions used as additional options for the given problem. |
| * E.g. actions for suppress the problem via comment, javadoc or annotation, |
| * and edit corresponding inspection settings. |
| */ |
| @NotNull |
| public abstract List<IntentionAction> getStandardIntentionOptions(@NotNull HighlightDisplayKey displayKey, @NotNull PsiElement context); |
| |
| /** |
| * @return "Fix all '' inspections problems for a file" intention if toolWrapper is local inspection or simple global one |
| */ |
| @Nullable |
| public abstract IntentionAction createFixAllIntention(InspectionToolWrapper toolWrapper, IntentionAction action); |
| |
| /** |
| * Wraps given action in a LocalQuickFix object. |
| * @param action action to convert. |
| * @return quick fix instance. |
| */ |
| @NotNull |
| public abstract LocalQuickFix convertToFix(@NotNull IntentionAction action); |
| } |