diff --git a/platform/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java b/platform/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java index 1e8c2e7e7478..2ac1c1412cf9 100644 --- a/platform/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java +++ b/platform/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java @@ -66,6 +66,9 @@ public class RunContentDescriptor implements Disposable { myIcon = icon; myHelpId = myExecutionConsole instanceof HelpIdProvider ? ((HelpIdProvider)myExecutionConsole).getHelpId() : null; myActivationCallback = activationCallback; + if (myExecutionConsole != null) { + Disposer.register(this, myExecutionConsole); + } } public RunContentDescriptor(@Nullable ExecutionConsole executionConsole, @@ -110,10 +113,7 @@ public class RunContentDescriptor implements Disposable { @Override public void dispose() { - if (myExecutionConsole != null) { - Disposer.dispose(myExecutionConsole); - myExecutionConsole = null; - } + myExecutionConsole = null; myComponent = null; myRestarter = null; myProcessHandler = null; diff --git a/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java b/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java index 96e420c98cd2..a7a73a5bc7db 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java +++ b/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java @@ -39,39 +39,39 @@ public class ConsoleExecuteAction extends DumbAwareAction { private final LanguageConsoleView myConsoleView; final ConsoleExecuteActionHandler myExecuteActionHandler; - private final Condition myEnabledCondition; + private final Condition myEnabledCondition; @SuppressWarnings("UnusedDeclaration") public ConsoleExecuteAction(@NotNull LanguageConsoleView console, @NotNull BaseConsoleExecuteActionHandler executeActionHandler) { - this(console, executeActionHandler, CONSOLE_EXECUTE_ACTION_ID, Conditions.alwaysTrue()); + this(console, executeActionHandler, CONSOLE_EXECUTE_ACTION_ID, Conditions.alwaysTrue()); } - ConsoleExecuteAction(@NotNull LanguageConsoleView console, final @NotNull ConsoleExecuteActionHandler executeActionHandler, @Nullable Condition enabledCondition) { + ConsoleExecuteAction(@NotNull LanguageConsoleView console, final @NotNull ConsoleExecuteActionHandler executeActionHandler, @Nullable Condition enabledCondition) { this(console, executeActionHandler, CONSOLE_EXECUTE_ACTION_ID, enabledCondition); } public ConsoleExecuteAction(@NotNull LanguageConsoleView console, @NotNull BaseConsoleExecuteActionHandler executeActionHandler, - @Nullable Condition enabledCondition) { + @Nullable Condition enabledCondition) { this(console, executeActionHandler, CONSOLE_EXECUTE_ACTION_ID, enabledCondition); } public ConsoleExecuteAction(@NotNull LanguageConsoleView consoleView, @NotNull ConsoleExecuteActionHandler executeActionHandler, @NotNull String emptyExecuteActionId, - @Nullable Condition enabledCondition) { + @Nullable Condition enabledCondition) { super(null, null, AllIcons.Actions.Execute); myConsoleView = consoleView; myExecuteActionHandler = executeActionHandler; - myEnabledCondition = enabledCondition == null ? Conditions.alwaysTrue() : enabledCondition; + myEnabledCondition = enabledCondition == null ? Conditions.alwaysTrue() : enabledCondition; EmptyAction.setupAction(this, emptyExecuteActionId, null); } @Override public final void update(@NotNull AnActionEvent e) { - EditorEx editor = myConsoleView.getConsole().getConsoleEditor(); + EditorEx editor = myConsoleView.getConsoleEditor(); boolean enabled = !editor.isRendererMode() && isEnabled() && (myExecuteActionHandler.isEmptyCommandExecutionAllowed() || !StringUtil.isEmptyOrSpaces(editor.getDocument().getCharsSequence())); if (enabled) { @@ -89,12 +89,12 @@ public class ConsoleExecuteAction extends DumbAwareAction { } public boolean isEnabled() { - return myEnabledCondition.value(myConsoleView.getConsole()); + return myEnabledCondition.value(myConsoleView); } public void execute(@Nullable TextRange range, @NotNull String text, @Nullable EditorEx editor) { if (range == null) { - ((LanguageConsoleImpl)myConsoleView.getConsole()).doAddPromptToHistory(); + ((LanguageConsoleImpl)myConsoleView).doAddPromptToHistory(); myConsoleView.print(text, ConsoleViewContentType.USER_INPUT); if (!text.endsWith("\n")) { myConsoleView.print("\n", ConsoleViewContentType.USER_INPUT); @@ -102,7 +102,7 @@ public class ConsoleExecuteAction extends DumbAwareAction { } else { assert editor != null; - ((LanguageConsoleImpl)myConsoleView.getConsole()).addTextRangeToHistory(range, editor, myExecuteActionHandler.myPreserveMarkup); + ((LanguageConsoleImpl)myConsoleView).addTextRangeToHistory(range, editor, myExecuteActionHandler.myPreserveMarkup); } myExecuteActionHandler.addToCommandHistoryAndExecute(myConsoleView, text); } @@ -140,10 +140,10 @@ public class ConsoleExecuteAction extends DumbAwareAction { beforeExecution(consoleView); } - String text = ((LanguageConsoleImpl)consoleView.getConsole()).prepareExecuteAction(myAddToHistory && !myUseProcessStdIn, + String text = ((LanguageConsoleImpl)consoleView).prepareExecuteAction(myAddToHistory && !myUseProcessStdIn, myPreserveMarkup, true); ((UndoManagerImpl)UndoManager.getInstance(consoleView.getProject())).invalidateActionsFor(DocumentReferenceManager.getInstance().create( - consoleView.getConsole().getCurrentEditor().getDocument())); + consoleView.getCurrentEditor().getDocument())); if (myUseProcessStdIn) { consoleView.print(text, ConsoleViewContentType.USER_INPUT); diff --git a/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java b/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java index 28cf7759c135..e4bdbdca11a2 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java +++ b/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java @@ -90,7 +90,7 @@ public class ConsoleHistoryController { } }; - private final LanguageConsole myConsole; + private final LanguageConsoleView myConsole; private final AnAction myHistoryNext = new MyAction(true, getKeystrokesUpDown(true)); private final AnAction myHistoryPrev = new MyAction(false, getKeystrokesUpDown(false)); private final AnAction myBrowseHistory = new MyBrowseAction(); @@ -100,21 +100,21 @@ public class ConsoleHistoryController { @Deprecated public ConsoleHistoryController(@NotNull String type, @Nullable String persistenceId, - @NotNull LanguageConsole console, @NotNull ConsoleHistoryModel model) { + @NotNull LanguageConsoleView console, @NotNull ConsoleHistoryModel model) { this(new ConsoleRootType(type, null) { }, persistenceId, console, model); } - public ConsoleHistoryController(@NotNull ConsoleRootType rootType, @Nullable String persistenceId, @NotNull LanguageConsole console) { + public ConsoleHistoryController(@NotNull ConsoleRootType rootType, @Nullable String persistenceId, @NotNull LanguageConsoleView console) { this(rootType, persistenceId, console, ourModels.get(getHistoryName(rootType, fixNullPersistenceId(persistenceId, console)))); } private ConsoleHistoryController(@NotNull ConsoleRootType rootType, @Nullable String persistenceId, - @NotNull LanguageConsole console, @NotNull ConsoleHistoryModel model) { + @NotNull LanguageConsoleView console, @NotNull ConsoleHistoryModel model) { myHelper = new ModelHelper(rootType, fixNullPersistenceId(persistenceId, console), model); myConsole = console; } - private static String fixNullPersistenceId(@Nullable String persistenceId, @NotNull LanguageConsole console) { + private static String fixNullPersistenceId(@Nullable String persistenceId, @NotNull LanguageConsoleView console) { return StringUtil.isEmpty(persistenceId) ? console.getProject().getPresentableUrl() : persistenceId; } diff --git a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsole.java b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsole.java deleted file mode 100644 index 222c270a9da4..000000000000 --- a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsole.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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.execution.console; - -import com.intellij.execution.ui.ConsoleViewContentType; -import com.intellij.lang.Language; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.ex.EditorEx; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiFile; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; - -/** - * @author gregsh - */ -public interface LanguageConsole extends Disposable { - @NotNull - Project getProject(); - - @NotNull - JComponent getComponent(); - - @NotNull - String getTitle(); - - void setTitle(String title); - - @NotNull - PsiFile getFile(); - - @NotNull - VirtualFile getVirtualFile(); - - @NotNull - Editor getCurrentEditor(); - - @NotNull - EditorEx getConsoleEditor(); - - @NotNull - Document getEditorDocument(); - - @NotNull - EditorEx getHistoryViewer(); - - @NotNull - Language getLanguage(); - - void setLanguage(@NotNull Language language); - - @Nullable - String getPrompt(); - - void setPrompt(@Nullable String prompt); - - void setPromptAttributes(@NotNull ConsoleViewContentType textAttributes); - - void setInputText(@NotNull String inputText); - - boolean isEditable(); - - void setEditable(boolean editable); - - boolean isConsoleEditorEnabled(); - - void setConsoleEditorEnabled(boolean enabled); -} diff --git a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleBuilder.java b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleBuilder.java index bf0057a5c62b..902538966289 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleBuilder.java +++ b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleBuilder.java @@ -47,7 +47,7 @@ public final class LanguageConsoleBuilder { @Nullable private LanguageConsoleView consoleView; @Nullable - private Condition executionEnabled = Conditions.alwaysTrue(); + private Condition executionEnabled = Conditions.alwaysTrue(); @Nullable private PairFunction psiFileFactory; @@ -72,17 +72,17 @@ public final class LanguageConsoleBuilder { } public LanguageConsoleBuilder processHandler(@NotNull final ProcessHandler processHandler) { - executionEnabled = new Condition() { + executionEnabled = new Condition() { @Override - public boolean value(LanguageConsole console) { + public boolean value(LanguageConsoleView console) { return !processHandler.isProcessTerminated(); } }; return this; } - public LanguageConsoleBuilder executionEnabled(@NotNull Condition condition) { + public LanguageConsoleBuilder executionEnabled(@NotNull Condition condition) { executionEnabled = condition; return this; } @@ -109,9 +109,9 @@ public final class LanguageConsoleBuilder { private void doInitAction(@NotNull LanguageConsoleView consoleView, @NotNull BaseConsoleExecuteActionHandler executeActionHandler, @NotNull String historyType) { ConsoleExecuteAction action = new ConsoleExecuteAction(consoleView, executeActionHandler, executionEnabled); - action.registerCustomShortcutSet(action.getShortcutSet(), consoleView.getConsole().getConsoleEditor().getComponent()); + action.registerCustomShortcutSet(action.getShortcutSet(), consoleView.getConsoleEditor().getComponent()); - new ConsoleHistoryController(historyType, null, consoleView.getConsole(), executeActionHandler.getConsoleHistoryModel()).install(); + new ConsoleHistoryController(historyType, null, consoleView, executeActionHandler.getConsoleHistoryModel()).install(); } /** @@ -121,7 +121,7 @@ public final class LanguageConsoleBuilder { @NotNull final Consumer executeActionHandler, @NotNull String historyType, @Nullable String historyPersistenceId, - @Nullable Condition enabledCondition) { + @Nullable Condition enabledCondition) { ConsoleExecuteAction.ConsoleExecuteActionHandler handler = new ConsoleExecuteAction.ConsoleExecuteActionHandler(true) { @Override void doExecute(@NotNull String text, @NotNull LanguageConsoleView consoleView) { @@ -130,9 +130,9 @@ public final class LanguageConsoleBuilder { }; ConsoleExecuteAction action = new ConsoleExecuteAction(console, handler, enabledCondition); - action.registerCustomShortcutSet(action.getShortcutSet(), console.getConsole().getConsoleEditor().getComponent()); + action.registerCustomShortcutSet(action.getShortcutSet(), console.getConsoleEditor().getComponent()); - ConsoleHistoryController historyController = new ConsoleHistoryController(historyType, historyPersistenceId, console.getConsole(), handler.getConsoleHistoryModel()); + ConsoleHistoryController historyController = new ConsoleHistoryController(historyType, historyPersistenceId, console, handler.getConsoleHistoryModel()); historyController.install(); return new Pair(action, historyController); } @@ -181,7 +181,7 @@ public final class LanguageConsoleBuilder { if (PropertiesComponent.getInstance().getBoolean(processInputStateKey, false)) { executeActionHandler.myUseProcessStdIn = true; DaemonCodeAnalyzer daemonCodeAnalyzer = DaemonCodeAnalyzer.getInstance(consoleView.getProject()); - daemonCodeAnalyzer.setHighlightingEnabled(consoleView.getConsole().getFile(), false); + daemonCodeAnalyzer.setHighlightingEnabled(consoleView.getFile(), false); } consoleView.addCustomConsoleAction(new UseConsoleInputAction(processInputStateKey)); } diff --git a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java index 6972d4d08712..52765bb5a990 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java @@ -19,6 +19,7 @@ import com.intellij.execution.impl.ConsoleViewImpl; import com.intellij.execution.impl.ConsoleViewUtil; import com.intellij.execution.ui.ConsoleViewContentType; import com.intellij.ide.DataManager; +import com.intellij.ide.GeneralSettings; import com.intellij.ide.highlighter.HighlighterFactory; import com.intellij.injected.editor.EditorWindow; import com.intellij.lang.Language; @@ -75,7 +76,7 @@ import java.util.concurrent.atomic.AtomicBoolean; * @author Gregory.Shrago * In case of REPL consider to use {@link LanguageConsoleBuilder} */ -public class LanguageConsoleImpl extends ConsoleViewImpl implements LanguageConsole, LanguageConsoleView, DataProvider { +public class LanguageConsoleImpl extends ConsoleViewImpl implements LanguageConsoleView, DataProvider { private final Project myProject; private final EditorEx myConsoleEditor; @@ -99,6 +100,9 @@ public class LanguageConsoleImpl extends ConsoleViewImpl implements LanguageCons @Override public void focusGained(Editor editor) { myCurrentEditor = editor; + if (GeneralSettings.getInstance().isSaveOnFrameDeactivation()) { + FileDocumentManager.getInstance().saveAllDocuments(); // PY-12487 + } } @Override @@ -330,12 +334,6 @@ public class LanguageConsoleImpl extends ConsoleViewImpl implements LanguageCons return myProject; } - @NotNull - @Override - public LanguageConsole getConsole() { - return this; - } - @NotNull public String getTitle() { return myTitle; @@ -469,9 +467,12 @@ public class LanguageConsoleImpl extends ConsoleViewImpl implements LanguageCons @Override public void dispose() { super.dispose(); + // double dispose via RunContentDescriptor and ContentImpl + if (myHistoryViewer.isDisposed()) return; + EditorFactory editorFactory = EditorFactory.getInstance(); editorFactory.releaseEditor(myConsoleEditor); - //editorFactory.releaseEditor(myHistoryViewer); + editorFactory.releaseEditor(myHistoryViewer); if (getProject().isOpen()) { FileEditorManager editorManager = FileEditorManager.getInstance(getProject()); diff --git a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleView.java b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleView.java index 008acab59486..4db30563d31b 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleView.java +++ b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleView.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * 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. @@ -16,16 +16,67 @@ package com.intellij.execution.console; import com.intellij.execution.ui.ConsoleView; +import com.intellij.execution.ui.ConsoleViewContentType; +import com.intellij.lang.Language; +import com.intellij.openapi.Disposable; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** - * @author traff + * @author gregsh */ -public interface LanguageConsoleView extends ConsoleView { +public interface LanguageConsoleView extends ConsoleView, Disposable { @NotNull Project getProject(); @NotNull - LanguageConsole getConsole(); + String getTitle(); + + void setTitle(String title); + + @NotNull + PsiFile getFile(); + + @NotNull + VirtualFile getVirtualFile(); + + @NotNull + Editor getCurrentEditor(); + + @NotNull + EditorEx getConsoleEditor(); + + @NotNull + Document getEditorDocument(); + + @NotNull + EditorEx getHistoryViewer(); + + @NotNull + Language getLanguage(); + + void setLanguage(@NotNull Language language); + + @Nullable + String getPrompt(); + + void setPrompt(@Nullable String prompt); + + void setPromptAttributes(@NotNull ConsoleViewContentType textAttributes); + + void setInputText(@NotNull String inputText); + + boolean isEditable(); + + void setEditable(boolean editable); + + boolean isConsoleEditorEnabled(); + + void setConsoleEditorEnabled(boolean enabled); } diff --git a/platform/lang-impl/src/com/intellij/execution/console/ProcessBackedConsoleExecuteActionHandler.java b/platform/lang-impl/src/com/intellij/execution/console/ProcessBackedConsoleExecuteActionHandler.java index 8a7ac55e05f9..5209703a5e4c 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/ProcessBackedConsoleExecuteActionHandler.java +++ b/platform/lang-impl/src/com/intellij/execution/console/ProcessBackedConsoleExecuteActionHandler.java @@ -27,7 +27,7 @@ import java.nio.charset.Charset; /** * @author traff */ -public class ProcessBackedConsoleExecuteActionHandler extends BaseConsoleExecuteActionHandler implements Condition { +public class ProcessBackedConsoleExecuteActionHandler extends BaseConsoleExecuteActionHandler implements Condition { private volatile ProcessHandler myProcessHandler; public ProcessBackedConsoleExecuteActionHandler(ProcessHandler processHandler, boolean preserveMarkup) { @@ -69,7 +69,7 @@ public class ProcessBackedConsoleExecuteActionHandler extends BaseConsoleExecute } @Override - public boolean value(LanguageConsole console) { + public boolean value(LanguageConsoleView console) { return !isProcessTerminated(); } } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/execution/console/UseConsoleInputAction.java b/platform/lang-impl/src/com/intellij/execution/console/UseConsoleInputAction.java index 5dc58ac1875c..f34fadb13ab9 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/UseConsoleInputAction.java +++ b/platform/lang-impl/src/com/intellij/execution/console/UseConsoleInputAction.java @@ -39,7 +39,7 @@ final class UseConsoleInputAction extends ToggleAction implements DumbAware { LanguageConsoleView consoleView = (LanguageConsoleView)event.getData(LangDataKeys.CONSOLE_VIEW); assert consoleView != null; DaemonCodeAnalyzer daemonCodeAnalyzer = DaemonCodeAnalyzer.getInstance(consoleView.getProject()); - PsiFile file = consoleView.getConsole().getFile(); + PsiFile file = consoleView.getFile(); daemonCodeAnalyzer.setHighlightingEnabled(file, state); daemonCodeAnalyzer.restart(file); if (state) { @@ -49,7 +49,7 @@ final class UseConsoleInputAction extends ToggleAction implements DumbAware { PropertiesComponent.getInstance().setValue(processInputStateKey, "true"); } - List actions = ActionUtil.getActions(consoleView.getConsole().getConsoleEditor().getComponent()); + List actions = ActionUtil.getActions(consoleView.getConsoleEditor().getComponent()); ConsoleExecuteAction action = ContainerUtil.findInstance(actions, ConsoleExecuteAction.class); action.myExecuteActionHandler.myUseProcessStdIn = !state; } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java index abaaadc0e4fb..f86499dfc43f 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java @@ -518,7 +518,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo myEditor = null; myHyperlinks = null; } - } + } private void cancelAllFlushRequests() { synchronized (myCurrentRequests) { diff --git a/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java b/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java index 973529c47d0d..8bbbe7cfbe95 100644 --- a/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java +++ b/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java @@ -23,7 +23,6 @@ import com.intellij.execution.ExecutionHelper; import com.intellij.execution.ExecutionManager; import com.intellij.execution.Executor; import com.intellij.execution.console.ConsoleExecuteAction; -import com.intellij.execution.console.LanguageConsole; import com.intellij.execution.console.LanguageConsoleView; import com.intellij.execution.console.ProcessBackedConsoleExecuteActionHandler; import com.intellij.execution.executors.DefaultRunExecutor; @@ -142,7 +141,6 @@ public abstract class AbstractConsoleRunnerWithHistory actions = fillToolBarActions(toolbarActions, defaultExecutor, contentDescriptor); registerActionShortcuts(actions, getLanguageConsole().getConsoleEditor().getComponent()); registerActionShortcuts(actions, panel); - panel.updateUI(); showConsole(defaultExecutor, contentDescriptor); } @@ -187,7 +185,7 @@ public abstract class AbstractConsoleRunnerWithHistory actions = ActionUtil.getActions(((LanguageConsoleView)consoleView).getConsole().getConsoleEditor().getComponent()); + List actions = ActionUtil.getActions(((LanguageConsoleView)consoleView).getConsoleEditor().getComponent()); ConsoleExecuteAction action = ContainerUtil.findInstance(actions, ConsoleExecuteAction.class); return action == null || !action.isEnabled() ? null : action; } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java index 9629381ae31d..83809327be4b 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java @@ -17,7 +17,6 @@ package com.intellij.xdebugger.impl.evaluate.quick; import com.intellij.codeInsight.hint.HintManager; import com.intellij.codeInsight.hint.HintUtil; -import com.intellij.execution.console.LanguageConsole; import com.intellij.execution.console.LanguageConsoleView; import com.intellij.execution.impl.ConsoleViewImpl; import com.intellij.execution.ui.ConsoleView; @@ -96,7 +95,7 @@ public class XValueHint extends AbstractValueHint { VirtualFile file; ConsoleView consoleView = ConsoleViewImpl.CONSOLE_VIEW_IN_EDITOR_VIEW.get(editor); if (consoleView instanceof LanguageConsoleView) { - LanguageConsole console = ((LanguageConsoleView)consoleView).getConsole(); + LanguageConsoleView console = ((LanguageConsoleView)consoleView); file = console.getHistoryViewer() == editor ? console.getVirtualFile() : null; } else { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellActionBase.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellActionBase.java index f337fda64322..f7d3cbcc8f78 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellActionBase.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellActionBase.java @@ -213,7 +213,7 @@ public abstract class GroovyShellActionBase extends AnAction { @Override protected LanguageConsoleView createConsoleView() { LanguageConsoleView res = createConsole(getProject(), getConsoleTitle()); - GroovyFileImpl file = (GroovyFileImpl)res.getConsole().getFile(); + GroovyFileImpl file = (GroovyFileImpl)res.getFile(); assert file.getContext() == null; file.putUserData(GROOVY_SHELL_FILE, Boolean.TRUE); diff --git a/python/src/com/jetbrains/python/actions/PyExecuteSelectionAction.java b/python/src/com/jetbrains/python/actions/PyExecuteSelectionAction.java index f23943f3f113..a1c412604e36 100644 --- a/python/src/com/jetbrains/python/actions/PyExecuteSelectionAction.java +++ b/python/src/com/jetbrains/python/actions/PyExecuteSelectionAction.java @@ -29,7 +29,6 @@ import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; -import com.intellij.util.ArrayUtil; import com.intellij.util.Consumer; import com.intellij.util.NotNullFunction; import com.jetbrains.python.console.PyCodeExecutor; diff --git a/python/src/com/jetbrains/python/console/PyConsoleProcessHandler.java b/python/src/com/jetbrains/python/console/PyConsoleProcessHandler.java index fc8e5b0e4bc3..b5e2747c91f6 100644 --- a/python/src/com/jetbrains/python/console/PyConsoleProcessHandler.java +++ b/python/src/com/jetbrains/python/console/PyConsoleProcessHandler.java @@ -15,7 +15,6 @@ */ package com.jetbrains.python.console; -import com.intellij.execution.console.LanguageConsole; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.ui.UIUtil; @@ -41,7 +40,7 @@ public class PyConsoleProcessHandler extends PythonProcessHandler { @Override public void coloredTextAvailable(final String text, final Key attributes) { - final String string = PyConsoleUtil.processPrompts(getConsole(), StringUtil.convertLineSeparators(text)); + String string = PyConsoleUtil.processPrompts(myConsoleView, StringUtil.convertLineSeparators(text)); myConsoleView.print(string, attributes); @@ -83,9 +82,5 @@ public class PyConsoleProcessHandler extends PythonProcessHandler { // waiting for REPL communication before destroying process handler } } - - private LanguageConsole getConsole() { - return myConsoleView.getConsole(); - } } diff --git a/python/src/com/jetbrains/python/console/PyConsoleSourceHighlighter.java b/python/src/com/jetbrains/python/console/PyConsoleSourceHighlighter.java index 7964f7f916b0..c6b849f1f84c 100644 --- a/python/src/com/jetbrains/python/console/PyConsoleSourceHighlighter.java +++ b/python/src/com/jetbrains/python/console/PyConsoleSourceHighlighter.java @@ -49,7 +49,7 @@ class PyConsoleSourceHighlighter { myLexer.start(text, 0, text.length(), getLexerState()); while (hasNext()) { Pair pair = next(); - myPythonConsoleView.printText(pair.first, pair.second); + myPythonConsoleView.print(pair.first, pair.second); } } diff --git a/python/src/com/jetbrains/python/console/PyConsoleUtil.java b/python/src/com/jetbrains/python/console/PyConsoleUtil.java index 4fa29d4d482c..18129128dce4 100644 --- a/python/src/com/jetbrains/python/console/PyConsoleUtil.java +++ b/python/src/com/jetbrains/python/console/PyConsoleUtil.java @@ -15,7 +15,7 @@ */ package com.jetbrains.python.console; -import com.intellij.execution.console.LanguageConsole; +import com.intellij.execution.console.LanguageConsoleView; import com.intellij.execution.ui.ConsoleViewContentType; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; @@ -56,7 +56,7 @@ public class PyConsoleUtil { return prompt != null && IPYTHON_PAGING_PROMPT.equals(prompt.trim()); } - static String processPrompts(final LanguageConsole languageConsole, String string) { + static String processPrompts(final LanguageConsoleView languageConsole, String string) { // Change prompt for (String prompt : PROMPTS) { if (string.startsWith(prompt)) { diff --git a/python/src/com/jetbrains/python/console/PydevConsoleExecuteActionHandler.java b/python/src/com/jetbrains/python/console/PydevConsoleExecuteActionHandler.java index 43948609dff7..2eaa25b67ee9 100644 --- a/python/src/com/jetbrains/python/console/PydevConsoleExecuteActionHandler.java +++ b/python/src/com/jetbrains/python/console/PydevConsoleExecuteActionHandler.java @@ -16,7 +16,6 @@ package com.jetbrains.python.console; import com.intellij.codeInsight.hint.HintManager; -import com.intellij.execution.console.LanguageConsole; import com.intellij.execution.console.LanguageConsoleView; import com.intellij.execution.console.ProcessBackedConsoleExecuteActionHandler; import com.intellij.execution.process.ProcessHandler; @@ -25,6 +24,7 @@ import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorModificationUtil; +import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.fileTypes.PlainTextLanguage; import com.intellij.openapi.project.Project; @@ -95,13 +95,9 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut if (myInputBuffer == null) { myInputBuffer = new StringBuilder(); } - myInputBuffer.append(text); - final LanguageConsole console = myConsoleView.getConsole(); - final Editor currentEditor = console.getConsoleEditor(); - - sendLineToConsole(new ConsoleCommunication.ConsoleCodeFragment(myInputBuffer.toString(), false), console, currentEditor); + sendLineToConsole(new ConsoleCommunication.ConsoleCodeFragment(myInputBuffer.toString(), false)); } private void processOneLine(String line) { @@ -123,9 +119,6 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut } public void doProcessLine(final String line) { - final LanguageConsole console = myConsoleView.getConsole(); - final Editor currentEditor = console.getConsoleEditor(); - if (myInputBuffer == null) { myInputBuffer = new StringBuilder(); } @@ -146,10 +139,11 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut if (PyConsoleUtil.isDoubleQuoteMultilineStarts(line) || PyConsoleUtil.isSingleQuoteMultilineStarts(line)) { myInMultilineStringState = null; // restore language - console.setLanguage(PythonLanguage.getInstance()); - console.setPrompt(PyConsoleUtil.ORDINARY_PROMPT); - } else { - if(line.equals("\n")) { + myConsoleView.setLanguage(PythonLanguage.getInstance()); + myConsoleView.setPrompt(PyConsoleUtil.ORDINARY_PROMPT); + } + else { + if (line.equals("\n")) { myInputBuffer.append("\n"); } return; @@ -164,15 +158,15 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut } if (myInMultilineStringState != null) { // change language - console.setLanguage(PlainTextLanguage.INSTANCE); - console.setPrompt(PyConsoleUtil.INDENT_PROMPT); + myConsoleView.setLanguage(PlainTextLanguage.INSTANCE); + myConsoleView.setPrompt(PyConsoleUtil.INDENT_PROMPT); return; } } // Process line continuation if (line.endsWith("\\")) { - console.setPrompt(PyConsoleUtil.INDENT_PROMPT); + myConsoleView.setPrompt(PyConsoleUtil.INDENT_PROMPT); return; } @@ -185,8 +179,8 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut } if ((myCurrentIndentSize > 0 && indent > 0) || flag) { setCurrentIndentSize(indent); - indentEditor(currentEditor, indent); - more(console, currentEditor); + indentEditor(myConsoleView.getConsoleEditor(), indent); + more(); myConsoleCommunication.notifyCommandExecuted(true); return; @@ -194,14 +188,12 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut } - sendLineToConsole(new ConsoleCommunication.ConsoleCodeFragment(myInputBuffer.toString(), true), console, currentEditor); + sendLineToConsole(new ConsoleCommunication.ConsoleCodeFragment(myInputBuffer.toString(), true)); } - private void sendLineToConsole(@NotNull final ConsoleCommunication.ConsoleCodeFragment code, - @NotNull final LanguageConsole console, - @NotNull final Editor currentEditor) { - if(!StringUtil.isEmptyOrSpaces(code.getText())) { - myIpythonInputPromptCount+=1; + private void sendLineToConsole(@NotNull final ConsoleCommunication.ConsoleCodeFragment code) { + if (!StringUtil.isEmptyOrSpaces(code.getText())) { + myIpythonInputPromptCount += 1; } if (myConsoleCommunication != null) { final boolean waitedForInputBefore = myConsoleCommunication.isWaitingForInput(); @@ -209,7 +201,7 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut myInputBuffer.setLength(0); } else { - executingPrompt(console); + executingPrompt(); } myConsoleCommunication.execInterpreter(code, new Function() { @Override @@ -222,23 +214,24 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut // Handle prompt if (interpreterResponse.more) { - more(console, currentEditor); + more(); if (myCurrentIndentSize == 0) { // compute current indentation setCurrentIndentSize( IndentHelperImpl.getIndent(getProject(), PythonFileType.INSTANCE, lastLine(code.getText()), false) + getPythonIndent()); // In this case we can insert indent automatically + final EditorEx editor = myConsoleView.getConsoleEditor(); UIUtil.invokeLaterIfNeeded(new Runnable() { @Override public void run() { - indentEditor(currentEditor, myCurrentIndentSize); + indentEditor(editor, myCurrentIndentSize); } }); } } else { if (!myConsoleCommunication.isWaitingForInput()) { - inPrompt(console, currentEditor); + inPrompt(); } setCurrentIndentSize(0); } @@ -248,8 +241,8 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut }); // After requesting input we got no call back to change prompt, change it manually if (waitedForInputBefore && !myConsoleCommunication.isWaitingForInput()) { - myIpythonInputPromptCount-=1; - inPrompt(console, currentEditor); + myIpythonInputPromptCount -= 1; + inPrompt(); setCurrentIndentSize(0); } } @@ -260,33 +253,33 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut return lines[lines.length - 1]; } - private void inPrompt(LanguageConsole console, Editor currentEditor){ - if(ipythonEnabled(console)){ - ipythonInPrompt(console, currentEditor); - } else { - ordinaryPrompt(console, currentEditor); + private void inPrompt() { + if (ipythonEnabled()) { + ipythonInPrompt(); + } + else { + ordinaryPrompt(); } } - private void ordinaryPrompt(LanguageConsole console, Editor currentEditor) { + private void ordinaryPrompt() { if (!myConsoleCommunication.isExecuting()) { - if (!PyConsoleUtil.ORDINARY_PROMPT.equals(console.getPrompt())) { - console.setPrompt(PyConsoleUtil.ORDINARY_PROMPT); - PyConsoleUtil.scrollDown(currentEditor); + if (!PyConsoleUtil.ORDINARY_PROMPT.equals(myConsoleView.getPrompt())) { + myConsoleView.setPrompt(PyConsoleUtil.ORDINARY_PROMPT); + PyConsoleUtil.scrollDown(myConsoleView.getCurrentEditor()); } } else { - executingPrompt(console); + executingPrompt(); } } - private boolean ipythonEnabled(LanguageConsole console){ - return console.getFile().getVirtualFile() != null ? - PyConsoleUtil.getOrCreateIPythonData(console.getFile().getVirtualFile()).isIPythonEnabled() : false; + private boolean ipythonEnabled() { + return PyConsoleUtil.getOrCreateIPythonData(myConsoleView.getVirtualFile()).isIPythonEnabled(); } - private void ipythonInPrompt(LanguageConsole console, Editor currentEditor){ - console.setPromptAttributes(new ConsoleViewContentType("", ConsoleViewContentType.USER_INPUT_KEY) { + private void ipythonInPrompt() { + myConsoleView.setPromptAttributes(new ConsoleViewContentType("", ConsoleViewContentType.USER_INPUT_KEY) { @Override public TextAttributes getAttributes() { TextAttributes attrs = super.getAttributes(); @@ -294,18 +287,18 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut return attrs; } }); - console.setPrompt("In[" + myIpythonInputPromptCount + "]:"); - PyConsoleUtil.scrollDown(currentEditor); + myConsoleView.setPrompt("In[" + myIpythonInputPromptCount + "]:"); + PyConsoleUtil.scrollDown(myConsoleView.getCurrentEditor()); } - private static void executingPrompt(LanguageConsole console) { - console.setPrompt(PyConsoleUtil.EXECUTING_PROMPT); + private void executingPrompt() { + myConsoleView.setPrompt(PyConsoleUtil.EXECUTING_PROMPT); } - private static void more(LanguageConsole console, Editor currentEditor) { - if (!PyConsoleUtil.INDENT_PROMPT.equals(console.getPrompt())) { - console.setPrompt(PyConsoleUtil.INDENT_PROMPT); - PyConsoleUtil.scrollDown(currentEditor); + private void more() { + if (!PyConsoleUtil.INDENT_PROMPT.equals(myConsoleView.getPrompt())) { + myConsoleView.setPrompt(PyConsoleUtil.INDENT_PROMPT); + PyConsoleUtil.scrollDown(myConsoleView.getCurrentEditor()); } } @@ -315,19 +308,14 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut @Override public void commandExecuted(boolean more) { - if (!more) { - final LanguageConsole console = myConsoleView.getConsole(); - final Editor currentEditor = console.getConsoleEditor(); - - if(!ipythonEnabled(console)){ - ordinaryPrompt(console, currentEditor); - } + if (!more && !ipythonEnabled()) { + ordinaryPrompt(); } } @Override public void inputRequested() { - final LanguageConsole console = myConsoleView.getConsole(); + final LanguageConsoleView console = myConsoleView; final Editor currentEditor = console.getConsoleEditor(); if (!PyConsoleUtil.INPUT_PROMPT.equals(console.getPrompt()) && !PyConsoleUtil.HELP_PROMPT.equals(console.getPrompt())) { @@ -338,7 +326,7 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut } public void finishExecution() { - final LanguageConsole console = myConsoleView.getConsole(); + final LanguageConsoleView console = myConsoleView; final Editor currentEditor = console.getConsoleEditor(); if (myInputBuffer != null) { @@ -364,7 +352,7 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut @Nullable private VirtualFile getConsoleFile() { if (myConsoleView != null) { - return myConsoleView.getConsole().getFile().getVirtualFile(); + return myConsoleView.getFile().getVirtualFile(); } else { return null; @@ -394,7 +382,7 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut } private Project getProject() { - return myConsoleView.getConsole().getProject(); + return myConsoleView.getProject(); } public String getCantExecuteMessage() { @@ -413,27 +401,27 @@ public class PydevConsoleExecuteActionHandler extends ProcessBackedConsoleExecut public void runExecuteAction(@NotNull LanguageConsoleView console) { if (isEnabled()) { if (!canExecuteNow()) { - HintManager.getInstance().showErrorHint(console.getConsole().getConsoleEditor(), getPrevCommandRunningMessage()); + HintManager.getInstance().showErrorHint(console.getConsoleEditor(), getPrevCommandRunningMessage()); } else { doRunExecuteAction(console); } } else { - HintManager.getInstance().showErrorHint(console.getConsole().getConsoleEditor(), getConsoleIsNotEnabledMessage()); + HintManager.getInstance().showErrorHint(console.getConsoleEditor(), getConsoleIsNotEnabledMessage()); } } private void doRunExecuteAction(LanguageConsoleView console) { - if (shouldCopyToHistory(console.getConsole())) { + if (shouldCopyToHistory(console)) { copyToHistoryAndExecute(console); } else { - processLine(console.getConsole().getConsoleEditor().getDocument().getText()); + processLine(console.getConsoleEditor().getDocument().getText()); } } - private static boolean shouldCopyToHistory(@NotNull LanguageConsole console) { + private static boolean shouldCopyToHistory(@NotNull LanguageConsoleView console) { return !PyConsoleUtil.isPagingPrompt(console.getPrompt()); } diff --git a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java index 4a8e1e60b7c6..246e97d30ae7 100644 --- a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java +++ b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java @@ -126,7 +126,7 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory addDefaultEnvironments(Sdk sdk, Map envs, @NotNull Project project) { Charset defaultCharset = EncodingProjectManager.getInstance(project).getDefaultCharset(); @@ -415,7 +411,7 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory