From c0a5801a9bb51d1c16afed403f9b3337366a8a29 Mon Sep 17 00:00:00 2001 From: Gregory Shrago Date: Wed, 10 Nov 2010 20:11:15 +0300 Subject: [PATCH] cleanup --- .../inject/quickedit/QuickEditAction.java | 36 ++-- .../inject/quickedit/QuickEditEditor.java | 182 ------------------ 2 files changed, 13 insertions(+), 205 deletions(-) delete mode 100644 plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditEditor.java diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditAction.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditAction.java index 4bb9a1a5e4b5..0580a0487202 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditAction.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditAction.java @@ -20,6 +20,7 @@ import com.intellij.codeInsight.intention.LowPriorityAction; import com.intellij.injected.editor.DocumentWindow; import com.intellij.lang.Language; import com.intellij.lang.injection.InjectedLanguageManager; +import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonShortcuts; @@ -40,10 +41,7 @@ import com.intellij.openapi.fileEditor.impl.EditorWindow; import com.intellij.openapi.fileEditor.impl.EditorWithProviderComposite; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Condition; -import com.intellij.openapi.util.Key; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.*; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.impl.source.PostprocessReformattingAspect; @@ -65,18 +63,10 @@ import java.util.Map; import java.util.Set; /** - * "Quick Edit Language" intention action that provides a popup which shows an injected language + * "Quick Edit Language" intention action that provides an editor which shows an injected language * fragment's complete prefix and suffix in non-editable areas and allows to edit the fragment * without having to consider any additional escaping rules (e.g. when editing regexes in String * literals). - *

- * This is a bit experimental because it doesn't play very well with some quickfixes, such as the - * JavaScript's "Create Method/Function" one which opens another editor window. Though harmless, - * this is quite confusing. - *

- * I wonder if such QuickFixes should try to get an Editor from the DataContext - * (see {@link QuickEditEditor.MyPanel#getData(java.lang.String)}) instead of using the "tactical nuke" - * com.intellij.openapi.fileEditor.FileEditorManager#openTextEditor(com.intellij.openapi.fileEditor.OpenFileDescriptor, boolean). */ public class QuickEditAction implements IntentionAction, LowPriorityAction { @@ -139,7 +129,7 @@ public class QuickEditAction implements IntentionAction, LowPriorityAction { return handler; } - private static class MyHandler extends DocumentAdapter { + private static class MyHandler extends DocumentAdapter implements Disposable { private final Project myProject; private final PsiFile myInjectedFile; @@ -199,20 +189,19 @@ public class QuickEditAction implements IntentionAction, LowPriorityAction { closeEditor(); } }.registerCustomShortcutSet(CommonShortcuts.ESCAPE, event.getEditor().getContentComponent()); - } } @Override public void editorReleased(EditorFactoryEvent event) { if (event.getEditor().getDocument() == myNewDocument) { + Disposer.dispose(MyHandler.this); myReleased = true; - event.getFactory().removeEditorFactoryListener(this); myOrigDocument.removeDocumentListener(MyHandler.this); myInjectedFile.putUserData(QUICK_EDIT_HANDLER, null); } } - }, project); + }, this); initMarkers(shreds); } @@ -261,15 +250,11 @@ public class QuickEditAction implements IntentionAction, LowPriorityAction { myOrigDocument.createRangeMarker(rangeInsideHost.shiftRight(shred.host.getTextRange().getStartOffset())); myMarkers.put(smartPointerManager.createSmartPsiElementPointer(shred.host), Pair.create(origMarker, rangeMarker)); } - boolean first = true; for (Pair markers : myMarkers.values()) { - //if (first) { - markers.first.setGreedyToLeft(true); - markers.second.setGreedyToLeft(true); - //} + markers.first.setGreedyToLeft(true); + markers.second.setGreedyToLeft(true); markers.first.setGreedyToRight(true); markers.second.setGreedyToRight(true); - first = false; } int curOffset = 0; for (Pair markerPair : myMarkers.values()) { @@ -346,5 +331,10 @@ public class QuickEditAction implements IntentionAction, LowPriorityAction { ElementManipulators.getManipulator(host).handleContentChange(host, insideHost, sb.toString()); } } + + @Override + public void dispose() { + // noop + } } } diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditEditor.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditEditor.java deleted file mode 100644 index d028b9e401dc..000000000000 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditEditor.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright 2006 Sascha Weinreuter - * - * 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.intellij.plugins.intelliLang.inject.quickedit; - -import com.intellij.ide.highlighter.HighlighterFactory; -import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.application.Result; -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.EditorSettings; -import com.intellij.openapi.editor.ex.EditorEx; -import com.intellij.openapi.editor.impl.EditorImpl; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.popup.JBPopup; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.ui.plaf.beg.BegBorders; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.KeyEvent; - -// Adapted from QuickEditHotspot that came with the source of the first designer release ;) -public class QuickEditEditor { - - private final Project myProject; - private final JComponent myPanel; - private final QuickEditSaver mySaver; - - private EditorEx myEditor; - private JBPopup myPopup; - private Boolean myCancelFlag; - - public QuickEditEditor(Document document, Project project, FileType ft, @NotNull QuickEditSaver saver) { - myProject = project; - mySaver = saver; - myEditor = (EditorImpl)EditorFactory.getInstance().createEditor(document, project); - myEditor.setHighlighter(HighlighterFactory.createHighlighter(project, ft)); - myEditor.setEmbeddedIntoDialogWrapper(true); - - EditorSettings settings = myEditor.getSettings(); - settings.setFoldingOutlineShown(false); - settings.setLineMarkerAreaShown(false); - settings.setIndentGuidesShown(false); - settings.setLineNumbersShown(false); - settings.setVirtualSpace(false); - settings.setAdditionalLinesCount(2); - - myPanel = new MyPanel(); - } - - public JComponent getPreferredFocusedComponent() { - return myEditor.getContentComponent(); - } - - public Editor getEditor() { - return myEditor; - } - - private class MyPanel extends JPanel implements DataProvider { - - public MyPanel() { - super(new BorderLayout()); - - add(myEditor.getComponent(), BorderLayout.CENTER); - - setBorder(new BegBorders.FlatLineBorder()); - setPreferredSize(new Dimension(400, 100)); - } - - public Object getData(String s) { - if (LangDataKeys.EDITOR.is(s)) { - return myEditor; - } - return null; - } - } - - public void setCancel(boolean cancel) { - if (myCancelFlag == null) myCancelFlag = cancel; - } - - private String releaseEditor() { - if (myEditor != null) { - final Document document = myEditor.getDocument(); - final String text = document.getText(); - PsiDocumentManager.getInstance(myProject).commitDocument(document); - EditorFactory.getInstance().releaseEditor(myEditor); - myEditor = null; - return text; - } - return ""; - } - - public void install(JBPopup popup) { - myPopup = popup; - final JComponent component = myEditor.getContentComponent(); - component.requestFocus(); - - new EscAction(this).registerCustomShortcutSet(new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)), component); - new SaveAction(this) - .registerCustomShortcutSet(new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.CTRL_MASK)), component); - - setStatusBarText("Press Ctrl+Enter to save, Escape to cancel."); - } - - private void setStatusBarText(String text) { - StatusBar.Info.set(text, myProject); - } - - public void uninstall() { - setStatusBarText(""); - - final String text = releaseEditor(); - - assert myCancelFlag != null; - if (!myCancelFlag) { - new WriteCommandAction(myProject) { - protected void run(Result result) throws Throwable { - mySaver.save(text); - } - }.execute(); - } - myPopup = null; - } - - public JComponent getComponent() { - return myPanel; - } - - public interface QuickEditSaver { - void save(String text); - } - - private static class EscAction extends AnAction { - private final QuickEditEditor myEditor; - - public EscAction(QuickEditEditor editor) { - super("Esc"); - myEditor = editor; - } - - public void actionPerformed(AnActionEvent event) { - myEditor.setCancel(true); - myEditor.myPopup.cancel(); - } - } - - private static class SaveAction extends AnAction { - private final QuickEditEditor myEditor; - - public SaveAction(QuickEditEditor editor) { - super("Save"); - myEditor = editor; - } - - public void actionPerformed(AnActionEvent event) { - myEditor.setCancel(false); - myEditor.myPopup.cancel(); - } - } -} - -