/* * Copyright 2003-2016 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 jetbrains.mps.openapi.editor.menus.substitute; import jetbrains.mps.smodel.runtime.IconResource; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.mps.openapi.language.SAbstractConcept; import org.jetbrains.mps.openapi.model.SNode; /** * @author simon */ public interface SubstituteMenuItem { /** * Returns the concept of the node which will be created by {@link #createNode(String)}. Used to filter actions for constraints. * * @return concept if known, null if not defined */ @Nullable SAbstractConcept getOutputConcept(); /** * Returns the type of the node which will be created by {@link #createNode(String)}, if known and applicable. Used to filter actions for smart completion. * * @param pattern the text that the user has typed so far * @return a node representing the type if known; null if unknown or not defined */ @Nullable SNode getType(@NotNull String pattern); /** * Returns the text that corresponds to this action. Usually this method would return a fixed string, such as a concept alias (e.g. {@code for} for an action * that inserts a ForLoop). Sometimes, however, it may be useful to base the matching text on the pattern. For example, in case of an action that inserts * a method declaration, the method may specify that pattern {@code foo} corresponds to matching text {@code foo()}. * * @param pattern the text that the user has typed so far * @return the text that matches this action, or null if not defined */ @Nullable String getMatchingText(@NotNull String pattern); /** * Returns the short description of this action * * @param pattern the text that the user has typed so far * @return a (short) string or null if not defined */ @Nullable String getDescriptionText(@NotNull String pattern); /** * Indicates whether the action may be executed with the given pattern. Always called in a read action. * * @param pattern the text that the user has typed so far */ boolean canExecute(@NotNull String pattern); /** * Indicates whether the action may be executed with the given pattern immediately, without showing the completion menu. Always called in a read action. * * @param pattern the text that the user has typed so far */ boolean canExecuteStrictly(@NotNull String pattern); /** * Creates a new node which will substitute current selected node. * * @param pattern the text that the user has typed so far */ @Nullable SNode createNode(@NotNull String pattern); /** * Returns the icon resource that corresponds to this action. * * @param pattern the text that the user has typed so far * @return the icon resource, null if not defined */ @Nullable IconResource getIcon(@NotNull String pattern); /** * Performs the selection. * * @param createdNode the node which was created by the actions * @param pattern the text that the user has typed so far */ void select(@NotNull SNode createdNode, @NotNull String pattern); }