diff options
Diffstat (limited to 'plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchDialog.java')
-rw-r--r-- | plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchDialog.java | 1000 |
1 files changed, 0 insertions, 1000 deletions
diff --git a/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchDialog.java b/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchDialog.java deleted file mode 100644 index 5255472d4ce6..000000000000 --- a/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchDialog.java +++ /dev/null @@ -1,1000 +0,0 @@ -package com.intellij.structuralsearch.plugin.ui; - -import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; -import com.intellij.codeInsight.template.impl.Variable; -import com.intellij.find.FindBundle; -import com.intellij.find.FindProgressIndicator; -import com.intellij.find.FindSettings; -import com.intellij.ide.IdeBundle; -import com.intellij.ide.util.scopeChooser.ScopeChooserCombo; -import com.intellij.lang.Language; -import com.intellij.lang.LanguageUtil; -import com.intellij.openapi.application.Result; -import com.intellij.openapi.application.WriteAction; -import com.intellij.openapi.command.WriteCommandAction; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.EditorFactory; -import com.intellij.openapi.editor.SelectionModel; -import com.intellij.openapi.editor.event.DocumentEvent; -import com.intellij.openapi.editor.event.DocumentListener; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.LanguageFileType; -import com.intellij.openapi.fileTypes.impl.FileTypeRenderer; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.ComboBox; -import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.Factory; -import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.wm.ToolWindow; -import com.intellij.openapi.wm.ToolWindowId; -import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.SearchScope; -import com.intellij.structuralsearch.*; -import com.intellij.structuralsearch.impl.matcher.MatcherImpl; -import com.intellij.structuralsearch.plugin.StructuralSearchPlugin; -import com.intellij.ui.ComboboxSpeedSearch; -import com.intellij.ui.IdeBorderFactory; -import com.intellij.ui.ListCellRendererWrapper; -import com.intellij.ui.TitledSeparator; -import com.intellij.usages.*; -import com.intellij.util.Alarm; -import com.intellij.util.Processor; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.*; -import java.util.List; - -/** - * Class to show the user the request for search - */ -@SuppressWarnings({"RefusedBequest", "AssignmentToStaticFieldFromInstanceMethod"}) -public class SearchDialog extends DialogWrapper implements ConfigurationCreator { - protected SearchContext searchContext; - - // text for search - protected Editor searchCriteriaEdit; - - // options of search scope - private ScopeChooserCombo myScopeChooserCombo; - - private JCheckBox recursiveMatching; - private JCheckBox caseSensitiveMatch; - - private JComboBox fileTypes; - private JComboBox contexts; - private JComboBox dialects; - private JLabel status; - private JLabel statusText; - - protected SearchModel model; - private JCheckBox openInNewTab; - private final Alarm myAlarm = new Alarm(Alarm.ThreadToUse.SHARED_THREAD); - - public static final String USER_DEFINED = SSRBundle.message("new.template.defaultname"); - protected final ExistingTemplatesComponent existingTemplatesComponent; - - private boolean useLastConfiguration; - - private static boolean ourOpenInNewTab; - - @NonNls private FileType ourFtSearchVariant = StructuralSearchUtil.getDefaultFileType(); - private static Language ourDialect = null; - private static String ourContext = null; - - private final boolean myShowScopePanel; - private final boolean myRunFindActionOnClose; - private boolean myDoingOkAction; - - private String mySavedEditorText; - private JPanel myContentPanel; - private JComponent myEditorPanel; - - public SearchDialog(SearchContext searchContext) { - this(searchContext, true, true); - } - - public SearchDialog(SearchContext searchContext, boolean showScope, boolean runFindActionOnClose) { - super(searchContext.getProject(), true); - - if (showScope) setModal(false); - myShowScopePanel = showScope; - myRunFindActionOnClose = runFindActionOnClose; - this.searchContext = (SearchContext)searchContext.clone(); - setTitle(getDefaultTitle()); - - if (runFindActionOnClose) { - setOKButtonText(FindBundle.message("find.dialog.find.button")); - } - - existingTemplatesComponent = ExistingTemplatesComponent.getInstance(this.searchContext.getProject()); - model = new SearchModel(createConfiguration()); - - init(); - } - - protected UsageViewContext createUsageViewContext(Configuration configuration) { - return new UsageViewContext(searchContext, configuration); - } - - public void setUseLastConfiguration(boolean useLastConfiguration) { - this.useLastConfiguration = useLastConfiguration; - } - - protected boolean isChanged(Configuration configuration) { - return configuration.getMatchOptions().getSearchPattern() != null && - !searchCriteriaEdit.getDocument().getText().equals(configuration.getMatchOptions().getSearchPattern()); - } - - public void setSearchPattern(final Configuration config) { - model.setShadowConfig(config); - setValuesFromConfig(config); - initiateValidation(); - } - - protected Editor createEditor(final SearchContext searchContext, String text) { - Editor editor = null; - - if (fileTypes != null) { - final FileType fileType = (FileType)fileTypes.getSelectedItem(); - final Language dialect = (Language)dialects.getSelectedItem(); - - final StructuralSearchProfile profile = StructuralSearchUtil.getProfileByFileType(fileType); - if (profile != null) { - editor = profile.createEditor(searchContext, fileType, dialect, text, useLastConfiguration); - } - } - - if (editor == null) { - final EditorFactory factory = EditorFactory.getInstance(); - final Document document = factory.createDocument(""); - editor = factory.createEditor(document, searchContext.getProject()); - editor.getSettings().setFoldingOutlineShown(false); - } - - editor.getDocument().addDocumentListener(new DocumentListener() { - @Override - public void beforeDocumentChange(final DocumentEvent event) { - } - - @Override - public void documentChanged(final DocumentEvent event) { - initiateValidation(); - } - }); - - return editor; - } - - private void initiateValidation() { - myAlarm.cancelAllRequests(); - myAlarm.addRequest(new Runnable() { - - @Override - public void run() { - try { - new WriteAction(){ - @Override - protected void run(Result result) throws Throwable { - if (!isValid()) { - getOKAction().setEnabled(false); - } - else { - getOKAction().setEnabled(true); - reportMessage(null, null); - } - } - }.execute(); - } - catch (Exception e) { - e.printStackTrace(); - } - } - }, 500); - } - - protected void buildOptions(JPanel searchOptions) { - recursiveMatching = new JCheckBox(SSRBundle.message("recursive.matching.checkbox"), true); - if (isRecursiveSearchEnabled()) { - searchOptions.add(UIUtil.createOptionLine(recursiveMatching)); - } - - caseSensitiveMatch = new JCheckBox(FindBundle.message("find.options.case.sensitive"), true); - searchOptions.add(UIUtil.createOptionLine(caseSensitiveMatch)); - - final List<FileType> types = new ArrayList<FileType>(); - - for (FileType fileType : StructuralSearchUtil.getSuitableFileTypes()) { - if (StructuralSearchUtil.getProfileByFileType(fileType) != null) { - types.add(fileType); - } - } - Collections.sort(types, new Comparator<FileType>() { - @Override - public int compare(FileType o1, FileType o2) { - return o1.getName().compareToIgnoreCase(o2.getName()); - } - }); - - final DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel(types.toArray(new FileType[types.size()])); - comboBoxModel.setSelectedItem(ourFtSearchVariant); - fileTypes = new ComboBox(comboBoxModel); - fileTypes.setRenderer(new FileTypeRenderer()); - new ComboboxSpeedSearch(fileTypes) { - @Override - protected String getElementText(Object element) { - return ((FileType)element).getName(); - } - }; - fileTypes.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - updateDialectsAndContexts(); - updateEditor(); - } - }); - - contexts = new JComboBox(new DefaultComboBoxModel()); - contexts.setPreferredSize(new Dimension(60, -1)); - - dialects = new JComboBox(new DefaultComboBoxModel()); - dialects.setRenderer(new ListCellRendererWrapper() { - @Override - public void customize(JList list, Object value, int index, boolean selected, boolean hasFocus) { - if (value == null) { - setText("None"); - } - else if (value instanceof Language) { - setText(((Language)value).getDisplayName()); - } - } - }); - dialects.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - updateEditor(); - } - }); - new ComboboxSpeedSearch(dialects); - dialects.setPreferredSize(new Dimension(120, -1)); - - final JLabel jLabel = new JLabel(SSRBundle.message("search.dialog.file.type.label")); - final JLabel jLabel2 = new JLabel(SSRBundle.message("search.dialog.context.label")); - final JLabel jLabel3 = new JLabel(SSRBundle.message("search.dialog.file.dialect.label")); - searchOptions.add( - UIUtil.createOptionLine( - new JComponent[]{ - jLabel, - fileTypes, - (JComponent)Box.createHorizontalStrut(8), - jLabel2, - contexts, - (JComponent)Box.createHorizontalStrut(8), - jLabel3, - dialects, - } - ) - ); - - jLabel.setLabelFor(fileTypes); - jLabel2.setLabelFor(contexts); - jLabel3.setLabelFor(dialects); - - detectFileTypeAndDialect(); - - fileTypes.setSelectedItem(ourFtSearchVariant); - fileTypes.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) initiateValidation(); - } - }); - - dialects.setSelectedItem(ourDialect); - contexts.setSelectedItem(ourContext); - - updateDialectsAndContexts(); - } - - private void updateEditor() { - if (myContentPanel != null) { - if (myEditorPanel != null) { - myContentPanel.remove(myEditorPanel); - } - disposeEditorContent(); - myEditorPanel = createEditorContent(); - myContentPanel.add(myEditorPanel, BorderLayout.CENTER); - myContentPanel.revalidate(); - } - } - - private void updateDialectsAndContexts() { - final FileType fileType = (FileType)fileTypes.getSelectedItem(); - if (fileType instanceof LanguageFileType) { - Language language = ((LanguageFileType)fileType).getLanguage(); - Language[] languageDialects = LanguageUtil.getLanguageDialects(language); - Arrays.sort(languageDialects, new Comparator<Language>() { - @Override - public int compare(Language o1, Language o2) { - return o1.getDisplayName().compareTo(o2.getDisplayName()); - } - }); - Language[] variants = new Language[languageDialects.length + 1]; - variants[0] = null; - System.arraycopy(languageDialects, 0, variants, 1, languageDialects.length); - dialects.setModel(new DefaultComboBoxModel(variants)); - dialects.setEnabled(variants.length > 1); - } - - final StructuralSearchProfile profile = StructuralSearchUtil.getProfileByFileType(fileType); - - if (profile instanceof StructuralSearchProfileBase) { - final String[] contextNames = ((StructuralSearchProfileBase)profile).getContextNames(); - if (contextNames.length > 0) { - contexts.setModel(new DefaultComboBoxModel(contextNames)); - contexts.setSelectedItem(contextNames[0]); - contexts.setEnabled(true); - return; - } - } - contexts.setSelectedItem(null); - contexts.setEnabled(false); - } - - private void detectFileTypeAndDialect() { - final PsiFile file = searchContext.getFile(); - if (file != null) { - PsiElement context = null; - - if (searchContext.getEditor() != null) { - context = file.findElementAt(searchContext.getEditor().getCaretModel().getOffset()); - if (context != null) { - context = context.getParent(); - } - } - if (context == null) { - context = file; - } - - FileType detectedFileType = null; - - StructuralSearchProfile profile = StructuralSearchUtil.getProfileByPsiElement(context); - if (profile != null) { - FileType fileType = profile.detectFileType(context); - if (fileType != null) { - detectedFileType = fileType; - } - } - - if (detectedFileType == null) { - for (FileType fileType : StructuralSearchUtil.getSuitableFileTypes()) { - if (fileType instanceof LanguageFileType && ((LanguageFileType)fileType).getLanguage().equals(context.getLanguage())) { - detectedFileType = fileType; - break; - } - } - } - - ourFtSearchVariant = detectedFileType != null ? - detectedFileType : - StructuralSearchUtil.getDefaultFileType(); - - // todo: detect dialect - - /*if (file.getLanguage() == StdLanguages.HTML || - (file.getFileType() == StdFileTypes.JSP && - contextLanguage == StdLanguages.HTML - ) - ) { - ourFileType = "html"; - } - else if (file.getLanguage() == StdLanguages.XHTML || - (file.getFileType() == StdFileTypes.JSPX && - contextLanguage == StdLanguages.HTML - )) { - ourFileType = "xml"; - } - else { - ourFileType = DEFAULT_TYPE_NAME; - }*/ - } - } - - protected boolean isRecursiveSearchEnabled() { - return true; - } - - public void setValuesFromConfig(Configuration configuration) { - //searchCriteriaEdit.putUserData(SubstitutionShortInfoHandler.CURRENT_CONFIGURATION_KEY, configuration); - - setDialogTitle(configuration); - final MatchOptions matchOptions = configuration.getMatchOptions(); - - UIUtil.setContent( - searchCriteriaEdit, - matchOptions.getSearchPattern(), - 0, - searchCriteriaEdit.getDocument().getTextLength(), - searchContext.getProject() - ); - - model.getConfig().getMatchOptions().setSearchPattern( - matchOptions.getSearchPattern() - ); - - recursiveMatching.setSelected( - isRecursiveSearchEnabled() && matchOptions.isRecursiveSearch() - ); - - caseSensitiveMatch.setSelected( - matchOptions.isCaseSensitiveMatch() - ); - - model.getConfig().getMatchOptions().clearVariableConstraints(); - if (matchOptions.hasVariableConstraints()) { - for (Iterator<String> i = matchOptions.getVariableConstraintNames(); i.hasNext(); ) { - final MatchVariableConstraint constraint = (MatchVariableConstraint)matchOptions.getVariableConstraint(i.next()).clone(); - model.getConfig().getMatchOptions().addVariableConstraint(constraint); - } - } - - MatchOptions options = configuration.getMatchOptions(); - StructuralSearchProfile profile = StructuralSearchUtil.getProfileByFileType(options.getFileType()); - assert profile != null; - fileTypes.setSelectedItem(options.getFileType()); - dialects.setSelectedItem(options.getDialect()); - if (options.getPatternContext() != null) { - contexts.setSelectedItem(options.getPatternContext()); - } - } - - private void setDialogTitle(final Configuration configuration) { - setTitle(getDefaultTitle() + " - " + configuration.getName()); - } - - @Override - public Configuration createConfiguration() { - SearchConfiguration configuration = new SearchConfiguration(); - configuration.setName(USER_DEFINED); - return configuration; - } - - protected void addOrReplaceSelection(final String selection) { - addOrReplaceSelectionForEditor(selection, searchCriteriaEdit); - } - - protected final void addOrReplaceSelectionForEditor(final String selection, Editor editor) { - final Project project = searchContext.getProject(); - UIUtil.setContent(editor, selection, 0, -1, project); - final Document document = editor.getDocument(); - editor.getSelectionModel().setSelection(0, document.getTextLength()); - final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project); - documentManager.commitDocument(document); - final PsiFile file = documentManager.getPsiFile(document); - if (file == null) return; - - new WriteCommandAction(project, file) { - @Override protected void run(@NotNull Result result) throws Throwable { - CodeStyleManager.getInstance(project).adjustLineIndent(file, new TextRange(0, document.getTextLength())); - } - }.execute(); - } - - protected void runAction(final Configuration config, final SearchContext searchContext) { - createUsageView(searchContext, config); - } - - protected void createUsageView(final SearchContext searchContext, final Configuration config) { - UsageViewManager manager = UsageViewManager.getInstance(searchContext.getProject()); - - final UsageViewContext context = createUsageViewContext(config); - final UsageViewPresentation presentation = new UsageViewPresentation(); - presentation.setOpenInNewTab(openInNewTab.isSelected()); - presentation.setScopeText(config.getMatchOptions().getScope().getDisplayName()); - context.configure(presentation); - - final FindUsagesProcessPresentation processPresentation = new FindUsagesProcessPresentation(presentation); - processPresentation.setShowNotFoundMessage(true); - processPresentation.setShowPanelIfOnlyOneUsage(true); - - processPresentation.setProgressIndicatorFactory( - new Factory<ProgressIndicator>() { - @Override - public ProgressIndicator create() { - return new FindProgressIndicator(searchContext.getProject(), presentation.getScopeText()) { - @Override - public void cancel() { - context.getCommand().stopAsyncSearch(); - super.cancel(); - } - }; - } - } - ); - - PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); - - manager.searchAndShowUsages( - new UsageTarget[]{ - context.getTarget() - }, - new Factory<UsageSearcher>() { - @Override - public UsageSearcher create() { - return new UsageSearcher() { - @Override - public void generate(@NotNull final Processor<Usage> processor) { - context.getCommand().findUsages(processor); - } - }; - } - }, - processPresentation, - presentation, - new UsageViewManager.UsageViewStateListener() { - @Override - public void usageViewCreated(@NotNull UsageView usageView) { - context.setUsageView(usageView); - context.configureActions(); - } - - @Override - public void findingUsagesFinished(final UsageView usageView) { - } - } - ); - } - - protected String getDefaultTitle() { - return SSRBundle.message("structural.search.title"); - } - - protected JComponent createEditorContent() { - JPanel result = new JPanel(new BorderLayout()); - - result.add(BorderLayout.NORTH, new JLabel(SSRBundle.message("search.template"))); - searchCriteriaEdit = createEditor(searchContext, mySavedEditorText != null ? mySavedEditorText : ""); - result.add(BorderLayout.CENTER, searchCriteriaEdit.getComponent()); - result.setMinimumSize(new Dimension(150, 100)); - - return result; - } - - protected int getRowsCount() { - return 4; - } - - @Override - protected JComponent createCenterPanel() { - myContentPanel = new JPanel(new BorderLayout()); - myEditorPanel = createEditorContent(); - myContentPanel.add(BorderLayout.CENTER, myEditorPanel); - myContentPanel.add(BorderLayout.SOUTH, Box.createVerticalStrut(8)); - JComponent centerPanel = new JPanel(new BorderLayout()); - { - JPanel panel = new JPanel(new BorderLayout()); - panel.add(BorderLayout.CENTER, myContentPanel); - panel.add(BorderLayout.SOUTH, createTemplateManagementButtons()); - centerPanel.add(BorderLayout.CENTER, panel); - } - - JPanel optionsContent = new JPanel(new BorderLayout()); - centerPanel.add(BorderLayout.SOUTH, optionsContent); - - JPanel searchOptions = new JPanel(); - searchOptions.setLayout(new GridLayout(getRowsCount(), 1, 0, 0)); - searchOptions.setBorder(IdeBorderFactory.createTitledBorder(SSRBundle.message("ssdialog.options.group.border"), - true)); - - myScopeChooserCombo = new ScopeChooserCombo( - searchContext.getProject(), - true, - false, - FindSettings.getInstance().getDefaultScopeName() - ); - Disposer.register(myDisposable, myScopeChooserCombo); - JPanel allOptions = new JPanel(new BorderLayout()); - if (myShowScopePanel) { - JPanel scopePanel = new JPanel(new GridBagLayout()); - - TitledSeparator separator = new TitledSeparator(SSRBundle.message("search.dialog.scope.label"), myScopeChooserCombo.getComboBox()); - scopePanel.add(separator, new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, - new Insets(5, 0, 0, 0), 0, 0)); - - scopePanel.add(myScopeChooserCombo, new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, - new Insets(0, 10, 0, 0), 0, 0)); - - allOptions.add( - scopePanel, - BorderLayout.SOUTH - ); - - myScopeChooserCombo.getComboBox().addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - initiateValidation(); - } - }); - } - - buildOptions(searchOptions); - - allOptions.add(searchOptions, BorderLayout.CENTER); - optionsContent.add(allOptions, BorderLayout.CENTER); - - if (myRunFindActionOnClose) { - JPanel panel = new JPanel(new BorderLayout()); - panel.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 0)); - openInNewTab = new JCheckBox(FindBundle.message("find.open.in.new.tab.checkbox")); - openInNewTab.setSelected(ourOpenInNewTab); - ToolWindow findWindow = ToolWindowManager.getInstance(searchContext.getProject()).getToolWindow(ToolWindowId.FIND); - openInNewTab.setEnabled(findWindow != null && findWindow.isAvailable()); - panel.add(openInNewTab, BorderLayout.EAST); - - optionsContent.add(BorderLayout.SOUTH, panel); - } - - updateEditor(); - return centerPanel; - } - - - @Override - protected JComponent createSouthPanel() { - final JPanel statusPanel = new JPanel(new BorderLayout(5, 0)); - statusPanel.add(super.createSouthPanel(), BorderLayout.NORTH); - statusPanel.add(statusText = new JLabel(SSRBundle.message("status.message")), BorderLayout.WEST); - statusPanel.add(status = new JLabel(), BorderLayout.CENTER); - return statusPanel; - } - - private JPanel createTemplateManagementButtons() { - JPanel panel = new JPanel(null); - panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - panel.add(Box.createHorizontalGlue()); - - panel.add( - createJButtonForAction(new AbstractAction() { - { - putValue(NAME, SSRBundle.message("save.template.text.button")); - } - - @Override - public void actionPerformed(ActionEvent e) { - String name = showSaveTemplateAsDialog(); - - if (name != null) { - final Project project = searchContext.getProject(); - final ConfigurationManager configurationManager = StructuralSearchPlugin.getInstance(project).getConfigurationManager(); - final Collection<Configuration> configurations = configurationManager.getConfigurations(); - - if (configurations != null) { - name = ConfigurationManager.findAppropriateName(configurations, name, project); - if (name == null) return; - } - - model.getConfig().setName(name); - setValuesToConfig(model.getConfig()); - setDialogTitle(model.getConfig()); - - if (model.getShadowConfig() == null || - model.getShadowConfig().isPredefined()) { - existingTemplatesComponent.addConfigurationToUserTemplates(model.getConfig()); - } - else { // ??? - setValuesToConfig(model.getShadowConfig()); - model.getShadowConfig().setName(name); - } - } - } - }) - ); - - panel.add( - Box.createHorizontalStrut(8) - ); - - panel.add( - createJButtonForAction( - new AbstractAction() { - { - putValue(NAME, SSRBundle.message("edit.variables.button")); - } - - @Override - public void actionPerformed(ActionEvent e) { - EditVarConstraintsDialog.setProject(searchContext.getProject()); - new EditVarConstraintsDialog( - searchContext.getProject(), - model, getVariablesFromListeners(), - isReplaceDialog(), - (FileType)fileTypes.getSelectedItem() - ).show(); - initiateValidation(); - EditVarConstraintsDialog.setProject(null); - } - } - ) - ); - - panel.add( - Box.createHorizontalStrut(8) - ); - - panel.add( - createJButtonForAction( - new AbstractAction() { - { - putValue(NAME, SSRBundle.message("history.button")); - } - - @Override - public void actionPerformed(ActionEvent e) { - SelectTemplateDialog dialog = new SelectTemplateDialog(searchContext.getProject(), true, isReplaceDialog()); - dialog.show(); - - if (!dialog.isOK()) { - return; - } - Configuration[] configurations = dialog.getSelectedConfigurations(); - if (configurations.length == 1) { - setSearchPattern(configurations[0]); - } - } - } - ) - ); - - panel.add( - Box.createHorizontalStrut(8) - ); - - panel.add( - createJButtonForAction( - new AbstractAction() { - { - putValue(NAME, SSRBundle.message("copy.existing.template.button")); - } - - @Override - public void actionPerformed(ActionEvent e) { - SelectTemplateDialog dialog = new SelectTemplateDialog(searchContext.getProject(), false, isReplaceDialog()); - dialog.show(); - - if (!dialog.isOK()) { - return; - } - Configuration[] configurations = dialog.getSelectedConfigurations(); - if (configurations.length == 1) { - setSearchPattern(configurations[0]); - } - } - } - ) - ); - - return panel; - } - - protected List<Variable> getVariablesFromListeners() { - return getVarsFrom(searchCriteriaEdit); - } - - protected static ArrayList<Variable> getVarsFrom(Editor searchCriteriaEdit) { - SubstitutionShortInfoHandler handler = searchCriteriaEdit.getUserData(UIUtil.LISTENER_KEY); - return new ArrayList<Variable>(handler.getVariables()); - } - - public final Project getProject() { - return searchContext.getProject(); - } - - public String showSaveTemplateAsDialog() { - return ConfigurationManager.showSaveTemplateAsDialog( - model.getShadowConfig() != null ? model.getShadowConfig().getName() : SSRBundle.message("user.defined.category"), - searchContext.getProject() - ); - } - - protected boolean isReplaceDialog() { - return false; - } - - @Override - public void show() { - StructuralSearchPlugin.getInstance(getProject()).setDialogVisible(true); - Configuration.setActiveCreator(this); - searchCriteriaEdit.putUserData( - SubstitutionShortInfoHandler.CURRENT_CONFIGURATION_KEY, - model.getConfig() - ); - - if (!useLastConfiguration) { - final Editor editor = FileEditorManager.getInstance(searchContext.getProject()).getSelectedTextEditor(); - boolean setSomeText = false; - - if (editor != null) { - final SelectionModel selectionModel = editor.getSelectionModel(); - - if (selectionModel.hasSelection()) { - addOrReplaceSelection(selectionModel.getSelectedText()); - existingTemplatesComponent.getPatternTree().setSelectionPath(null); - existingTemplatesComponent.getHistoryList().setSelectedIndex(-1); - setSomeText = true; - } - } - - if (!setSomeText) { - int selection = existingTemplatesComponent.getHistoryList().getSelectedIndex(); - if (selection != -1) { - setValuesFromConfig( - (Configuration)existingTemplatesComponent.getHistoryList().getSelectedValue() - ); - } - } - } - - initiateValidation(); - - super.show(); - } - - @Override - public JComponent getPreferredFocusedComponent() { - return searchCriteriaEdit.getContentComponent(); - } - - // Performs ok action - @Override - protected void doOKAction() { - SearchScope selectedScope = getSelectedScope(); - if (selectedScope == null) return; - - myDoingOkAction = true; - boolean result = isValid(); - myDoingOkAction = false; - if (!result) return; - - myAlarm.cancelAllRequests(); - super.doOKAction(); - if (!myRunFindActionOnClose) return; - - FindSettings.getInstance().setDefaultScopeName(selectedScope.getDisplayName()); - ourOpenInNewTab = openInNewTab.isSelected(); - - try { - if (model.getShadowConfig() != null) { - if (model.getShadowConfig().isPredefined()) { - model.getConfig().setName( - model.getShadowConfig().getName() - ); - } //else { - // // user template, save it - // setValuesToConfig(model.getShadowConfig()); - //} - } - existingTemplatesComponent.addConfigurationToHistory(model.getConfig()); - - runAction(model.getConfig(), searchContext); - } - catch (MalformedPatternException ex) { - reportMessage("this.pattern.is.malformed.message", searchCriteriaEdit, ex.getMessage()); - } - } - - public Configuration getConfiguration() { - return model.getConfig(); - } - - private SearchScope getSelectedScope() { - return myScopeChooserCombo.getSelectedScope(); - } - - protected boolean isValid() { - setValuesToConfig(model.getConfig()); - boolean result = true; - - try { - MatcherImpl.validate(searchContext.getProject(), model.getConfig().getMatchOptions()); - } - catch (MalformedPatternException ex) { - if (myRunFindActionOnClose) { - reportMessage( - "this.pattern.is.malformed.message", - searchCriteriaEdit, - ex.getMessage() != null ? ex.getMessage() : "" - ); - result = false; - } - } - catch (UnsupportedPatternException ex) { - reportMessage("this.pattern.is.unsupported.message", searchCriteriaEdit, ex.getMessage()); - result = false; - } - - //getOKAction().setEnabled(result); - return result; - } - - protected void reportMessage(@NonNls String messageId, Editor editor, Object... params) { - final String message = messageId != null ? SSRBundle.message(messageId, params) : ""; - status.setText(message); - status.setToolTipText(message); - status.revalidate(); - statusText.setLabelFor(editor != null ? editor.getContentComponent() : null); - } - - protected void setValuesToConfig(Configuration config) { - - MatchOptions options = config.getMatchOptions(); - - boolean searchWithinHierarchy = IdeBundle.message("scope.class.hierarchy").equals(myScopeChooserCombo.getSelectedScopeName()); - // We need to reset search within hierarchy scope during online validation since the scope works with user participation - options.setScope( - searchWithinHierarchy && !myDoingOkAction ? GlobalSearchScope.projectScope(getProject()) : myScopeChooserCombo.getSelectedScope()); - options.setLooseMatching(true); - options.setRecursiveSearch(isRecursiveSearchEnabled() && recursiveMatching.isSelected()); - - ourFtSearchVariant = (FileType)fileTypes.getSelectedItem(); - ourDialect = (Language)dialects.getSelectedItem(); - ourContext = (String)contexts.getSelectedItem(); - FileType fileType = ourFtSearchVariant; - options.setFileType(fileType); - options.setDialect(ourDialect); - options.setPatternContext(ourContext); - - options.setSearchPattern(searchCriteriaEdit.getDocument().getText()); - options.setCaseSensitiveMatch(caseSensitiveMatch.isSelected()); - } - - @Override - protected String getDimensionServiceKey() { - return "#com.intellij.structuralsearch.plugin.ui.SearchDialog"; - } - - @Override - public void dispose() { - Configuration.setActiveCreator(null); - disposeEditorContent(); - - myAlarm.cancelAllRequests(); - - super.dispose(); - StructuralSearchPlugin.getInstance(getProject()).setDialogVisible(false); - } - - protected void disposeEditorContent() { - mySavedEditorText = searchCriteriaEdit.getDocument().getText(); - - // this will remove from myExcludedSet - final PsiFile file = PsiDocumentManager.getInstance(searchContext.getProject()).getPsiFile(searchCriteriaEdit.getDocument()); - if (file != null) { - DaemonCodeAnalyzer.getInstance(searchContext.getProject()).setHighlightingEnabled(file, true); - } - - EditorFactory.getInstance().releaseEditor(searchCriteriaEdit); - } - - @Override - protected String getHelpId() { - return "find.structuredSearch"; - } - - public SearchContext getSearchContext() { - return searchContext; - } -} |