diff options
47 files changed, 513 insertions, 2960 deletions
diff --git a/org.eclipse.debug.core/buildnotes_platform-debug.html b/org.eclipse.debug.core/buildnotes_platform-debug.html index f739bd205..c868da616 100644 --- a/org.eclipse.debug.core/buildnotes_platform-debug.html +++ b/org.eclipse.debug.core/buildnotes_platform-debug.html @@ -11,12 +11,33 @@ <h1> Eclipse Platform Build Notes <br> Platform Debug</h1> +September 7, 2004 +<h3> +Problem Reports Fixed</h3> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72986">72986</a>: ExpressionInformationControl leaks<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72000">72000</a>: Run as Application: duplicate menmonics<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72449">72449</a>: NPE in VariablesView.saveState<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73068">73068</a>: Support for ordering launch shortcuts<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73069">73069</a>: bogus extension point id in org.eclipse.debug.ui.launchShortcuts<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73110">73110</a>: IConsoleColorProvider is not disconnected<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72472">72472</a>: Remove unused dependancies<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72551">72551</a>: add System property to test suite to turn off workbench and console activation<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51562">51562</a>: console doesn't wrap input<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72317">72317</a>: IOConsole inserts extra line breaks when pasting<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72517">72517</a>: Replace "Run As >" with context launch<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73272">73272</a>: NPE in ProcessConsoleManager when no process type<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70664">70664</a>: TVT3.0: Improper characters combination "Run As"<br> + +<h1> +Eclipse Platform Build Notes <br> +Platform Debug</h1> August 31, 2004 <h3> Problem Reports Fixed</h3> <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72300">72300</a>: Confirmation on RemoveAll actions<br> <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72350">72350</a>: NPE in BreakpointsView.dispose<br> <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72881">72881</a>: LineTracker Test Failure<br> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72483">72483</a>: NPE attempt to Inspect if never shown Variable view<br> <h1> Eclipse Platform Build Notes <br> diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/Breakpoint.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/Breakpoint.java index dae4502f5..3384b5f99 100644 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/Breakpoint.java +++ b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/Breakpoint.java @@ -154,6 +154,9 @@ public abstract class Breakpoint extends PlatformObject implements IBreakpoint { * @see IBreakpoint#setGroup(String) */ public void setGroup(String group) throws CoreException { + if (group.length() == 0) { + group= null; + } setAttribute(GROUP, group); } diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java index 6213acb37..98643f063 100644 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java +++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java @@ -1632,11 +1632,11 @@ public class LaunchManager implements ILaunchManager, IResourceChangeListener { if (!file.delete()) { file.deleteOnExit(); // if delete() fails try again on VM close } - for (Enumeration enum = p.keys(); enum.hasMoreElements();) { + for (Enumeration enumeration = p.keys(); enumeration.hasMoreElements();) { // Win32's environment vars are case insensitive. Put everything // to uppercase so that (for example) the "PATH" variable will match // "pAtH" correctly on Windows. - String key= ((String) enum.nextElement()).toUpperCase(); + String key= ((String) enumeration.nextElement()).toUpperCase(); //no need to cast value fgNativeEnv.put(key, p.get(key)); } diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/memory/MemoryRenderingInfo.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/memory/MemoryRenderingInfo.java index 0c5f66f22..9c329e04d 100644 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/memory/MemoryRenderingInfo.java +++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/memory/MemoryRenderingInfo.java @@ -114,13 +114,13 @@ public class MemoryRenderingInfo implements IMemoryRenderingInfo */ public IConfigurationElement[] getAllProperties() { - Enumeration enum = fProperties.elements(); + Enumeration enumeration = fProperties.elements(); IConfigurationElement[] elements = new IConfigurationElement[fProperties.size()]; int i=0; - while (enum.hasMoreElements()) + while (enumeration.hasMoreElements()) { - elements[i] = (IConfigurationElement)enum.nextElement(); + elements[i] = (IConfigurationElement)enumeration.nextElement(); i++; } diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/memory/MemoryRenderingManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/memory/MemoryRenderingManager.java index faad321ae..5894abf2c 100644 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/memory/MemoryRenderingManager.java +++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/memory/MemoryRenderingManager.java @@ -807,11 +807,11 @@ public class MemoryRenderingManager implements IMemoryRenderingManager, IDebugEv addRenderingInfo(dynamicRenderingTypes); // now compare the returned list to what is orginally cached - Enumeration enum = fDynamicRenderingMap.keys(); + Enumeration enumeration = fDynamicRenderingMap.keys(); - while (enum.hasMoreElements()) + while (enumeration.hasMoreElements()) { - String dynamicRenderingId = (String)enum.nextElement(); + String dynamicRenderingId = (String)enumeration.nextElement(); String staticRenderingId = (String)fDynamicRenderingMap.get(dynamicRenderingId); if (staticRenderingId.equals(rendering.getRenderingId())) diff --git a/org.eclipse.debug.ui/plugin.properties b/org.eclipse.debug.ui/plugin.properties index e4edf28a1..410f613db 100644 --- a/org.eclipse.debug.ui/plugin.properties +++ b/org.eclipse.debug.ui/plugin.properties @@ -42,7 +42,7 @@ DebugPerspective.name=Debug DebugPreferencePage.name=Run/Debug DebugView.name=Debug DebugViewsCategory.name=Debug -DebugWithConfigurationAction.label=Debu&g +DebugWithConfigurationAction.label=De&bug DetailPaneFontDefinition.label=Detail Pane Text Font DetailPaneFontDefinition.description=The detail pane text font is used in the detail panes of debug views DisableBreakpointsAction.label=&Disable @@ -58,7 +58,7 @@ LaunchConfigurationTypePropertyPage.name=Launch Configuration Type LaunchConfigurationTypesPreferencePage.name=Launch Configuration Types LauncherPropertyPage.name=Launcher LaunchGroupsExtensionName=Launch Groups -OpenDebugConfigurations.label=De&bug... +OpenDebugConfigurations.label=Debu&g... OpenRunConfigurations.label=Ru&n... OpenProfileConfigurations.label=&Profile... processPropertyPageName=Process Information @@ -88,8 +88,8 @@ RunLastAction.label=&Run Last Launched RunLaunchGroup.label=Ru&n RunLaunchGroup.title=Select or configure an application to run RunConfigurations.label=R&un Configurations... -RunHistoryMenuAction.label=R&un History -RunWithConfigurationAction.label=Ru&n +RunHistoryMenuAction.label=Run His&tory +RunWithConfigurationAction.label=R&un RunToLine.label=Run to &Line SelectAll.label=Select &All StepWithFiltersAction.label=Use Step &Filters diff --git a/org.eclipse.debug.ui/plugin.xml b/org.eclipse.debug.ui/plugin.xml index a83f64cd3..207e2417d 100644 --- a/org.eclipse.debug.ui/plugin.xml +++ b/org.eclipse.debug.ui/plugin.xml @@ -291,6 +291,14 @@ </separator> </menu> <action + definitionId="org.eclipse.debug.ui.commands.OpenRunConfigurations" + label="%OpenRunConfigurations.label" + helpContextId="open_run_configurations_action_context" + class="org.eclipse.debug.internal.ui.actions.OpenRunConfigurations" + menubarPath="org.eclipse.ui.run/runGroup" + id="org.eclipse.debug.ui.actions.OpenRunConfigurations"> + </action> + <action label="%RunWithConfigurationAction.label" pulldown="true" helpContextId="run_with_configuration_action_context" @@ -340,6 +348,14 @@ pulldown="true"> </action> <action + definitionId="org.eclipse.debug.ui.commands.OpenDebugConfigurations" + label="%OpenDebugConfigurations.label" + helpContextId="open_debug_configurations_action_context" + class="org.eclipse.debug.internal.ui.actions.OpenDebugConfigurations" + menubarPath="org.eclipse.ui.run/debugGroup" + id="org.eclipse.debug.ui.actions.OpenDebugConfigurations"> + </action> + <action label="%DebugWithConfigurationAction.label" pulldown="true" helpContextId="debug_with_configuration_action_context" @@ -459,6 +475,14 @@ pulldown="true"> </action> <action + definitionId="org.eclipse.debug.ui.commands.OpenProfileConfigurations" + label="%OpenProfileConfigurations.label" + helpContextId="open_profile_configurations_action_context" + class="org.eclipse.debug.internal.ui.actions.OpenProfileConfigurations" + menubarPath="org.eclipse.ui.run/profileGroup" + id="org.eclipse.debug.ui.actions.OpenProfileConfigurations"> + </action> + <action label="%ProfileWithConfigurationAction.label" pulldown="true" helpContextId="profile_with_configuration_action_context" @@ -504,7 +528,7 @@ <viewContribution targetID="org.eclipse.debug.ui.DebugView" id="org.eclipse.debug.ui.debugview.toolbar"> -<!-- Thread Group --> + <!-- Thread Group --> <action id="org.eclipse.debug.ui.debugview.toolbar.removeAllTerminated" toolbarPath="threadGroup" @@ -574,7 +598,7 @@ class="org.eclipse.debug.core.model.ISuspendResume"> </selection> </action> -<!-- Step Group --> + <!-- Step Group --> <action id="org.eclipse.debug.ui.debugview.toolbar.stepReturn" toolbarPath="stepReturnGroup" @@ -620,7 +644,7 @@ class="org.eclipse.debug.core.model.IStep"> </selection> </action> -<!-- Render Group --> + <!-- Render Group --> <action id="org.eclipse.debug.ui.debugview.toolbar.toggleStepFilters" toolbarPath="renderGroup" @@ -856,7 +880,7 @@ <viewerContribution targetID="org.eclipse.debug.ui.DebugView" id="org.eclipse.debug.ui.debugview.popupMenu"> -<!-- Edit Group --> + <!-- Edit Group --> <action label="%CopyToClipboardAction.label" icon="icons/full/elcl16/copy_edit_co.gif" @@ -868,7 +892,7 @@ class="org.eclipse.debug.core.model.IDebugElement"> </selection> </action> -<!-- Launch Group --> + <!-- Launch Group --> <action label="%TerminateAllAction.label" icon="icons/full/elcl16/terminate_all_co.gif" @@ -896,7 +920,7 @@ class="org.eclipse.debug.core.model.ITerminate"> </selection> </action> -<!-- Thread Group --> + <!-- Thread Group --> <action label="%RemoveAllTerminatedAction.label" icon="icons/full/elcl16/rem_all_co.gif" @@ -954,7 +978,7 @@ class="org.eclipse.debug.core.model.ISuspendResume"> </selection> </action> -<!-- Step Group --> + <!-- Step Group --> <action label="%StepReturnAction.label" icon="icons/full/elcl16/stepreturn_co.gif" @@ -994,7 +1018,7 @@ class="org.eclipse.debug.core.model.IStep"> </selection> </action> -<!-- Render Group --> + <!-- Render Group --> <action label="%StepWithFiltersAction.label" icon="icons/full/elcl16/stepbystep_co.gif" @@ -1011,13 +1035,43 @@ <viewerContribution targetID="org.eclipse.debug.ui.BreakpointView" id="org.eclipse.debug.ui.breakpointview.popupMenu"> + <menu + label="Select" + path="additions" + id="selectMenu"> + <separator + name="additions"> + </separator> + </menu> <action label="%SelectAll.label" helpContextId="select_all_breakpoints_action_context" class="org.eclipse.debug.internal.ui.actions.SelectAllBreakpointsAction" - menubarPath="breakpointSelectGroup" + menubarPath="selectMenu/additions" id="org.eclipse.debug.ui.actions.SelectAllBreakpointsAction"> </action> + <menu + label="Group All By" + path="additions" + id="groupAllByMenu"> + <separator + name="additions"> + </separator> + </menu> + <action + label="File" + helpContextId="group_all_by_file_action_context" + class="org.eclipse.debug.internal.ui.actions.breakpointGroups.GroupAllByFileAction" + menubarPath="groupAllByMenu/additions" + id="org.eclipse.debug.ui.actions.GroupAllByFileAction"> + </action> + <action + label="Project" + helpContextId="group_all_by_project_action_context" + class="org.eclipse.debug.internal.ui.actions.breakpointGroups.GroupAllByProjectAction" + menubarPath="groupAllByMenu/additions" + id="org.eclipse.debug.ui.actions.GroupAllByProjectAction"> + </action> <action label="%RemoveAllAction.label" icon="icons/full/elcl16/rem_all_co.gif" @@ -1040,14 +1094,14 @@ label="Select By Type" helpContextId="select_breakpoints_by_type_action_context" class="org.eclipse.debug.internal.ui.actions.breakpointGroups.SelectBreakpointsByTypeAction" - menubarPath="breakpointSelectGroup" + menubarPath="selectMenu/additions" id="org.eclipse.debug.ui.actions.SelectBreakpointsByType"> </action> <action label="Select By File" helpContextId="select_breakpoints_by_file_action_context" class="org.eclipse.debug.internal.ui.actions.breakpointGroups.SelectBreakpointsByResourceAction" - menubarPath="breakpointSelectGroup" + menubarPath="selectMenu/additions" id="org.eclipse.debug.ui.actions.SelectBreakpointsByFile"> </action> <action @@ -1126,7 +1180,7 @@ <viewerContribution targetID="org.eclipse.debug.ui.VariableView" id="org.eclipse.debug.ui.variablesView.popupMenu"> -<!-- Variable Group --> + <!-- Variable Group --> <action label="%CopyVariablesToClipboardAction.label" icon="icons/full/elcl16/copy_edit_co.gif" @@ -1150,7 +1204,7 @@ <viewerContribution targetID="org.eclipse.debug.ui.ExpressionView" id="org.eclipse.debug.ui.expressionView.popupMenu"> -<!-- Expression Group --> + <!-- Expression Group --> <action label="%RemoveAllAction.label" icon="icons/full/elcl16/rem_all_co.gif" @@ -1195,7 +1249,7 @@ <viewerContribution targetID="org.eclipse.debug.ui.RegistersView" id="org.eclipse.debug.ui.registersView.popupMenu"> -<!-- Variable Group --> + <!-- Variable Group --> <action menubarPath="variableGroup" class="org.eclipse.debug.internal.ui.actions.CopyVariablesToClipboardActionDelegate" @@ -1968,6 +2022,12 @@ M4 = Platform-specific fourth key class="org.eclipse.debug.internal.ui.actions.LaunchablePropertyTester" id="org.eclipse.debug.ui.propertyTesters.launchable"> </propertyTester> + <propertyTester + namespace="org.eclipse.debug.ui" + type="org.eclipse.ui.console.IOConsole" + class="org.eclipse.debug.internal.ui.views.console.JavaConsoleTrackerPropertyTester" + properties="processTypeTest" + id="org.eclipse.jdt.debug.ui.JavaConsolePropertyTester"/> </extension> <!-- Context extensions --> <extension @@ -2042,5 +2102,26 @@ M4 = Platform-specific fourth key value="org.eclipse.debug.internal.ui.views.memory.HexRenderer"> </rendering_property> </rendering> + </extension> + <extension + point="org.eclipse.ui.console.consolePatternMatchListener"> + <consolePatternMatchListener + class="org.eclipse.debug.internal.ui.views.console.ConsoleLineNotifier" + id="org.eclipse.debug.ui.consoleLineNotifier" + regex=".*\r(\n?)|.*\n"> + <enablement> + <instanceof value="org.eclipse.debug.internal.ui.views.console.ProcessConsole"/> + </enablement> + </consolePatternMatchListener> + </extension> + <extension + point="org.eclipse.ui.console.consolePageParticipant"> + <consolePageParticipant + class="org.eclipse.debug.internal.ui.views.console.ProcessConsolePageParticipant" + id="org.eclipse.debug.ui.processConsolePageParticipant"> + <enablement> + <instanceof value="org.eclipse.debug.internal.ui.views.console.ProcessConsole"/> + </enablement> + </consolePageParticipant> </extension> </plugin>
\ No newline at end of file diff --git a/org.eclipse.debug.ui/schema/launchShortcuts.exsd b/org.eclipse.debug.ui/schema/launchShortcuts.exsd index f1a8d60f2..53c3b3a5f 100644 --- a/org.eclipse.debug.ui/schema/launchShortcuts.exsd +++ b/org.eclipse.debug.ui/schema/launchShortcuts.exsd @@ -3,7 +3,7 @@ <schema targetNamespace="org.eclipse.debug.ui"> <annotation> <appInfo> - <meta.schema plugin="org.eclipse.debug.ui" id="filaunchShortcuts" name="Launch Shortcuts"/> + <meta.schema plugin="org.eclipse.debug.ui" id="launchShortcuts" name="Launch Shortcuts"/> </appInfo> <documentation> This extension point provides support for selection sensitive launching. Extensions register a shortcut which @@ -110,10 +110,22 @@ appears in the run and/or debug cascade menus to launch the workbench selection </documentation> </annotation> </attribute> + <attribute name="path" type="string"> + <annotation> + <documentation> + an optional menu path used to group launch shortcuts in menus. Launch shortcuts are grouped alphabetically based on the <code>path</code> attribute, and then sorted alphabetically within groups based on the <code>label</code> attribute. When unspecified, a shortcut appears in the last group. This attribute was added in the 3.0.1 release. + </documentation> + </annotation> + </attribute> </complexType> </element> <element name="perspective"> + <annotation> + <documentation> + The <code>perspective</code> element has been <b>deprecated</b> in the 3.1 release. The top level Run/Debug/Profile cascade menus now support contextual (selection sensitive) launching, and clients should provide a <code>contextualLaunch</code> element instead. + </documentation> + </annotation> <complexType> <attribute name="id" type="string" use="required"> <annotation> @@ -128,7 +140,7 @@ appears in the run and/or debug cascade menus to launch the workbench selection <element name="contextualLaunch"> <annotation> <documentation> - Holds all descriptions for adding shortcuts to the Run context menu (pop-up). + Holds all descriptions for adding shortcuts to the selection sensitive Run/Debug/Profile cascade menus. </documentation> </annotation> <complexType> diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java index 6b228aa30..4cc29a9e7 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java @@ -418,7 +418,6 @@ public class DebugUIPlugin extends AbstractUIPlugin implements ILaunchListener { // work in progress TODO: remove prefs.setDefault(DebugWorkInProgressPreferencePage.WIP_PREF_USE_LAUNCH_WIZARD, false); - prefs.setDefault(DebugWorkInProgressPreferencePage.WIP_PREF_CONTEXT_LAUNCH, false); } protected IProcess getProcessFromInput(Object input) { diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/AbstractGroupBreakpointsAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/AbstractGroupBreakpointsAction.java new file mode 100644 index 000000000..d320e958e --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/AbstractGroupBreakpointsAction.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial implementation + *******************************************************************************/ +package org.eclipse.debug.internal.ui.actions.breakpointGroups; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.model.IBreakpoint; +import org.eclipse.jface.action.IAction; + +/** + * + */ +public abstract class AbstractGroupBreakpointsAction extends AbstractBreakpointsViewAction { + + /* (non-Javadoc) + * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) + */ + public void run(IAction action) { + IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(); + for (int i = 0; i < breakpoints.length; i++) { + IBreakpoint breakpoint = breakpoints[i]; + String group = getGroup(breakpoint); + try { + breakpoint.setGroup(group); + } catch (CoreException e) { + } + } + } + + protected abstract String getGroup(IBreakpoint breakpoint); + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/AbstractSelectBreakpointsAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/AbstractSelectBreakpointsAction.java index e96bab649..c4d4a0f1c 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/AbstractSelectBreakpointsAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/AbstractSelectBreakpointsAction.java @@ -52,11 +52,11 @@ public abstract class AbstractSelectBreakpointsAction extends AbstractBreakpoint public List chooseSimilarBreakpoints() { Set breakpointsToSelect= new HashSet(); IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(); - for (int i = 0; i < fBreakpoints.length; i++) { - IBreakpoint selected = fBreakpoints[i]; - for (int j = 0; j < breakpoints.length; j++) { - IBreakpoint breakpoint = breakpoints[j]; - if (breakpointsMatch(selected, breakpoint)) { + for (int i = 0; i < breakpoints.length; i++) { + IBreakpoint breakpoint = breakpoints[i]; + for (int j = 0; j < fBreakpoints.length; j++) { + IBreakpoint selected = fBreakpoints[j]; + if (breakpointsMatch(breakpoint, selected)) { breakpointsToSelect.add(breakpoint); } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupAllByFileAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupAllByFileAction.java new file mode 100644 index 000000000..9d9e1ba9d --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupAllByFileAction.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial implementation + *******************************************************************************/ +package org.eclipse.debug.internal.ui.actions.breakpointGroups; + +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IResource; +import org.eclipse.debug.core.model.IBreakpoint; + +/** + * An action which groups all breakpoints according to their resource + */ +public class GroupAllByFileAction extends AbstractGroupBreakpointsAction { + + /** + * @param breakpoint + * @return + */ + protected String getGroup(IBreakpoint breakpoint) { + String group= null; + IMarker marker = breakpoint.getMarker(); + if (marker != null) { + IResource resource = marker.getResource(); + group= resource.getName(); + } + return group; + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupAllByProjectAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupAllByProjectAction.java new file mode 100644 index 000000000..4bbd34e89 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupAllByProjectAction.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial implementation + *******************************************************************************/ +package org.eclipse.debug.internal.ui.actions.breakpointGroups; + +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IProject; +import org.eclipse.debug.core.model.IBreakpoint; + +/** + * An action which groups all breakpoints according to their project + */ +public class GroupAllByProjectAction extends AbstractGroupBreakpointsAction { + + /** + * @param breakpoint + * @return + */ + protected String getGroup(IBreakpoint breakpoint) { + String group= null; + IMarker marker = breakpoint.getMarker(); + if (marker != null) { + IProject project = marker.getResource().getProject(); + if (project != null) { + group = project.getName(); + } + } + return group; + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java index 8e359cd25..7ba3d74fb 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java @@ -737,21 +737,43 @@ class ShortcutComparator implements Comparator { * @see Comparator#compare(Object, Object) */ public int compare(Object a, Object b) { - String labelA = ((LaunchShortcutExtension)a).getLabel(); - String labelB = ((LaunchShortcutExtension)b).getLabel(); + LaunchShortcutExtension shorcutA = (LaunchShortcutExtension)a; + String labelA = shorcutA.getLabel(); + String pathA = shorcutA.getMenuPath(); + LaunchShortcutExtension shortcutB = (LaunchShortcutExtension)b; + String labelB = shortcutB.getLabel(); + String pathB = shortcutB.getMenuPath(); - // null labels sort last (i.e. highest) - if (labelA == labelB) { - return 0; + // group by path, then sort by label + // a null path sorts last (i.e. highest) + if (nullOrEqual(pathA, pathB)) { + // null labels sort last (i.e. highest) + if (labelA == labelB) { + return 0; + } + if (labelA == null) { + return 1; + } + if (labelB == null) { + return -1; + } + return labelA.compareToIgnoreCase(labelB); } - if (labelA == null) { + // compare paths + if (pathA == null) { return 1; } - if (labelB == null) { + if (pathB == null) { return -1; } - - return labelA.compareToIgnoreCase(labelB); + return pathA.compareToIgnoreCase(pathB); + } + + private boolean nullOrEqual(String a, String b) { + if (a == null) { + return b == null; + } + return a.equals(b); } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchShortcutExtension.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchShortcutExtension.java index 483bdedea..caa975fe1 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchShortcutExtension.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchShortcutExtension.java @@ -358,6 +358,16 @@ public class LaunchShortcutExtension implements ILaunchShortcut, IPluginContribu return fModes; } + /** + * Returns the menu path attribute this shortcut, or <code>null</code> if none + * + * @return the menu path attribute this shortcut, or <code>null</code> if none + * @since 3.0.1 + */ + public String getMenuPath() { + return getConfigurationElement().getAttribute("path"); //$NON-NLS-1$ + } + /* * Only for debugging * @see java.lang.Object#toString() diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java index 081b33dc2..1bfd5adce 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java @@ -17,10 +17,12 @@ import java.text.MessageFormat; import java.util.HashMap; import java.util.Iterator; import java.util.Map; + import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; + import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugPlugin; @@ -34,10 +36,15 @@ import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.views.launch.LaunchView; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialogWithToggle; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IPerspectiveDescriptor; @@ -268,6 +275,18 @@ public class PerspectiveManager implements ILaunchListener, IDebugEventSetListen if (page != null) { try { page.showView(IDebugUIConstants.ID_DEBUG_VIEW, null, IWorkbenchPage.VIEW_VISIBLE); + final LaunchView view = (LaunchView) page.findView(IDebugUIConstants.ID_DEBUG_VIEW); + view.selectionChanged(new SelectionChangedEvent(new ISelectionProvider() { + public void addSelectionChangedListener(ISelectionChangedListener listener) { + } + public ISelection getSelection() { + return view.getViewer().getSelection(); + } + public void removeSelectionChangedListener(ISelectionChangedListener listener) { + } + public void setSelection(ISelection selection) { + } + }, view.getViewer().getSelection())); } catch (PartInitException e) { DebugUIPlugin.log(e); } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugWorkInProgressPreferencePage.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugWorkInProgressPreferencePage.java index 09511ab5d..a87c4a522 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugWorkInProgressPreferencePage.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugWorkInProgressPreferencePage.java @@ -25,7 +25,6 @@ import org.eclipse.ui.IWorkbenchPreferencePage; public class DebugWorkInProgressPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage, IDebugPreferenceConstants { public static final String WIP_PREF_USE_LAUNCH_WIZARD = DebugUIPlugin.getUniqueIdentifier() + ".WIP_PREF_USE_LAUNCH_WIZARD"; //$NON-NLS-1$ - public static final String WIP_PREF_CONTEXT_LAUNCH = DebugUIPlugin.getUniqueIdentifier() + ".WIP_PREF_CONTEXT_LAUNCH"; //$NON-NLS-1$ public DebugWorkInProgressPreferencePage() { super(GRID); @@ -47,7 +46,6 @@ public class DebugWorkInProgressPreferencePage extends FieldEditorPreferencePage */ protected void createFieldEditors() { addField(new BooleanFieldEditor(WIP_PREF_USE_LAUNCH_WIZARD, "Use launch wizard instead of launch dialog", SWT.NONE, getFieldEditorParent())); //$NON-NLS-1$ - addField(new BooleanFieldEditor(WIP_PREF_CONTEXT_LAUNCH, "Use contextual launch in top-level run menus", SWT.NONE, getFieldEditorParent())); //$NON-NLS-1$ } /** diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/BreakPartition.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/BreakPartition.java deleted file mode 100644 index 30a078cc6..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/BreakPartition.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.views.console; - - -import org.eclipse.debug.internal.ui.DebugUIPlugin; - -/** - * A partition in a console document that represents a break after an input - * partition. This represents a hard break that the user cannot backspace/delete. - */ -public class BreakPartition extends StreamPartition { - - /** - * Partition type - */ - public static final String BREAK_PARTITION_TYPE = DebugUIPlugin.getUniqueIdentifier() + ".BREAK_PARTITION_TYPE"; //$NON-NLS-1$ - - - public BreakPartition(String streamIdentifier, int offset, int length) { - super(streamIdentifier, offset, length, BREAK_PARTITION_TYPE); - } - - /** - * @see org.eclipse.debug.internal.ui.views.console.StreamPartition#createNewPartition(String, int, int) - */ - public StreamPartition createNewPartition(String streamIdentifier, int offset, int length) { - return new BreakPartition(streamIdentifier, offset, length); - } - -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocument.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocument.java deleted file mode 100644 index 6b37c3ff0..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocument.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.views.console; - - -import org.eclipse.debug.ui.console.IConsoleColorProvider; -import org.eclipse.jface.text.AbstractDocument; -import org.eclipse.jface.text.DefaultLineTracker; -import org.eclipse.jface.text.ITextStore; - -public class ConsoleDocument extends AbstractDocument { - - private IConsoleColorProvider fColorProvider; - - public ConsoleDocument(IConsoleColorProvider colorProvider) { - fColorProvider = colorProvider; - setTextStore(newTextStore()); - setLineTracker(new DefaultLineTracker()); - completeInitialization(); - } - - /** - * Returns whether this document is read-only. - */ - public boolean isReadOnly() { - return fColorProvider.isReadOnly(); - } - - /** - * Creates a new text store for this document. - */ - protected ITextStore newTextStore() { - return new ConsoleOutputTextStore(2500); - } -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocumentManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocumentManager.java deleted file mode 100644 index 2fa82933c..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocumentManager.java +++ /dev/null @@ -1,370 +0,0 @@ -///******************************************************************************* -// * Copyright (c) 2000, 2004 IBM Corporation and others. -// * All rights reserved. This program and the accompanying materials -// * are made available under the terms of the Common Public License v1.0 -// * which accompanies this distribution, and is available at -// * http://www.eclipse.org/legal/cpl-v10.html -// * -// * Contributors: -// * IBM Corporation - initial API and implementation -// *******************************************************************************/ -//package org.eclipse.debug.internal.ui.views.console; -// -// -//import java.text.MessageFormat; -//import java.util.ArrayList; -//import java.util.HashMap; -//import java.util.Iterator; -//import java.util.List; -//import java.util.Map; -// -//import org.eclipse.core.runtime.CoreException; -//import org.eclipse.core.runtime.IConfigurationElement; -//import org.eclipse.core.runtime.IExtensionPoint; -//import org.eclipse.core.runtime.Platform; -//import org.eclipse.debug.core.DebugPlugin; -//import org.eclipse.debug.core.ILaunch; -//import org.eclipse.debug.core.ILaunchListener; -//import org.eclipse.debug.core.ILaunchManager; -//import org.eclipse.debug.core.model.IProcess; -//import org.eclipse.debug.internal.ui.DebugUIPlugin; -//import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants; -//import org.eclipse.debug.ui.IDebugUIConstants; -//import org.eclipse.debug.ui.console.IConsoleColorProvider; -//import org.eclipse.debug.ui.console.IConsoleLineTracker; -//import org.eclipse.jface.text.IDocument; -//import org.eclipse.ui.console.ConsolePlugin; -//import org.eclipse.ui.console.IConsole; -//import org.eclipse.ui.console.IConsoleManager; -//import org.eclipse.ui.texteditor.IDocumentProvider; -// -///** -// * Creates documents for processes as they are registered with a launch. -// * The singleton manager is accessible from the debug UI plugin. -// */ -//public class ConsoleDocumentManager implements ILaunchListener { -// -// /** -// * Console document content provider extensions, keyed by extension id -// */ -// private Map fColorProviders; -// -// /** -// * Console line trackers; keyed by process type to list of trackers (1:N) -// */ -// private Map fLineTrackers; -// -// /** -// * Default document provider. -// */ -// protected IDocumentProvider fDefaultDocumentProvider = null; -// -// /** -// * Map of processes for a launch to compute removed processes -// */ -// private Map fProcesses; -// -// /** -// * @see ILaunchListener#launchRemoved(ILaunch) -// */ -// public void launchRemoved(ILaunch launch) { -// removeLaunch(launch); -// } -// -// protected void removeLaunch(ILaunch launch) { -// IProcess[] processes= launch.getProcesses(); -// for (int i= 0; i < processes.length; i++) { -// IProcess iProcess = processes[i]; -// removeProcess(iProcess); -// } -// if (fProcesses != null) { -// fProcesses.remove(launch); -// } -// } -// -// /** -// * Removes the console and document associated with the given process. -// * -// * @param iProcess process to clean up -// */ -// private void removeProcess(IProcess iProcess) { -// IConsole console = getConsole(iProcess); -// if (console != null) { -// IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager(); -// manager.removeConsoles(new IConsole[]{console}); -// } -// IDocumentProvider provider = getDocumentProvider(); -// provider.disconnect(iProcess); -// } -// -// /** -// * Returns the console for the given process, or <code>null</code> if none. -// * -// * @param process -// * @return the console for the given process, or <code>null</code> if none -// */ -// public IConsole getConsole(IProcess process) { -// IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager(); -// IConsole[] consoles = manager.getConsoles(); -// for (int i = 0; i < consoles.length; i++) { -// IConsole console = consoles[i]; -// if (console instanceof ProcessConsole) { -// ProcessConsole pc = (ProcessConsole)console; -// if (pc.getProcess().equals(process)) { -// return pc; -// } -// } -// } -// return null; -// } -// -// /** -// * @see ILaunchListener#launchAdded(ILaunch) -// */ -// public void launchAdded(ILaunch launch) { -// launchChanged(launch); -// } -// -// /** -// * @see ILaunchListener#launchChanged(ILaunch) -// */ -// public void launchChanged(final ILaunch launch) { -// DebugUIPlugin.getStandardDisplay().syncExec(new Runnable () { -// public void run() { -// IProcess[] processes= launch.getProcesses(); -// for (int i= 0; i < processes.length; i++) { -// if (getConsoleDocument(processes[i]) == null) { -// // create new document -// IProcess process = processes[i]; -// IDocumentProvider provider = getDocumentProvider(); -// try { -// provider.connect(process); -// } catch (CoreException e) { -// } -// ProcessConsole pc = new ProcessConsole(process); -// ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{pc}); -// } -// } -// List removed = getRemovedProcesses(launch); -// if (removed != null) { -// Iterator iterator = removed.iterator(); -// while (iterator.hasNext()) { -// IProcess p = (IProcess) iterator.next(); -// removeProcess(p); -// } -// } -// } -// }); -// } -// -// /** -// * Returns the document for the process, or <code>null</code> -// * if none. -// */ -// public IDocument getConsoleDocument(IProcess process) { -// IDocumentProvider provider = getDocumentProvider(); -// return provider.getDocument(process); -// } -// -// /** -// * Returns the document provider. -// * -// * @return document provider -// */ -// private IDocumentProvider getDocumentProvider() { -// if (fDefaultDocumentProvider == null) { -// fDefaultDocumentProvider = new ConsoleDocumentProvider(); -// } -// return fDefaultDocumentProvider; -// } -// -// /** -// * Called by the debug ui plug-in on startup. -// * The console document manager starts listening for -// * launches to be registered and initializes if any launches -// * already exist. -// */ -// public void startup() { -// ILaunchManager launchManager= DebugPlugin.getDefault().getLaunchManager(); -// launchManager.addLaunchListener(this); -// -// //set up the docs for launches already registered -// ILaunch[] launches= launchManager.getLaunches(); -// for (int i = 0; i < launches.length; i++) { -// launchAdded(launches[i]); -// } -// } -// -// /** -// * Called by the debug ui plug-in on shutdown. -// * The console document manager de-registers as a -// * launch listener and kills all existing console documents. -// */ -// public void shutdown() { -// ILaunchManager launchManager= DebugPlugin.getDefault().getLaunchManager(); -// ILaunch[] launches = launchManager.getLaunches(); -// for (int i = 0; i < launches.length; i++) { -// ILaunch launch = launches[i]; -// removeLaunch(launch); -// } -// launchManager.removeLaunchListener(this); -// if (fProcesses != null) { -// fProcesses.clear(); -// } -// } -// -// /** -// * Notifies the console document manager that system err is about to be written -// * to the console. The manager will open the console if the preference is -// * set to show the console on system err. -// */ -// protected void aboutToWriteSystemErr(IProcess process) { -// if (DebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IDebugPreferenceConstants.CONSOLE_OPEN_ON_ERR)) { -// showConsole(process); -// } -// } -// -// /** -// * Notifies the console document manager that system out is about to be written -// * to the console. The manager will open the console if the preference is -// * set to show the console on system out and the console document being written -// * is associated with the current process. -// */ -// protected void aboutToWriteSystemOut(IProcess process) { -// if (DebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IDebugPreferenceConstants.CONSOLE_OPEN_ON_OUT)) { -// showConsole(process); -// } -// } -// -// /** -// * Opens the console view. If the view is already open, it is brought to the front. -// */ -// protected void showConsole(final IProcess process) { -// ConsolePlugin.getDefault().getConsoleManager().showConsoleView(getConsole(process)); -// } -// -// /** -// * Returns a new console document color provider extension for the given -// * process type, or <code>null</code> if none. -// * -// * @param type corresponds to <code>IProcess.ATTR_PROCESS_TYPE</code> -// * @return IConsoleColorProvider -// */ -// public IConsoleColorProvider getColorProvider(String type) { -// if (fColorProviders == null) { -// fColorProviders = new HashMap(); -// IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugUIPlugin.getUniqueIdentifier(), IDebugUIConstants.EXTENSION_POINT_CONSOLE_COLOR_PROVIDERS); -// IConfigurationElement[] elements = extensionPoint.getConfigurationElements(); -// for (int i = 0; i < elements.length; i++) { -// IConfigurationElement extension = elements[i]; -// fColorProviders.put(extension.getAttributeAsIs("processType"), extension); //$NON-NLS-1$ -// } -// } -// IConfigurationElement extension = (IConfigurationElement)fColorProviders.get(type); -// if (extension != null) { -// try { -// Object colorProvider = extension.createExecutableExtension("class"); //$NON-NLS-1$ -// if (colorProvider instanceof IConsoleColorProvider) { -// return (IConsoleColorProvider)colorProvider; -// } -// DebugUIPlugin.logErrorMessage(MessageFormat.format(ConsoleMessages.getString("ConsoleDocumentManager.1"),new String[]{extension.getDeclaringExtension().getUniqueIdentifier()} )); //$NON-NLS-1$ -// } catch (CoreException e) { -// DebugUIPlugin.log(e); -// } -// } -// return null; -// } -// -// /** -// * Creates and retuns a new line notifier for the given type of process, or -// * <code>null</code> if none. The notifier will be seeded with new console -// * line listeners registered for the given process type. -// * -// * @param type process type -// * @return line notifier or <code>null</code> -// */ -// public ConsoleLineNotifier newLineNotifier(String type) { -// if (fLineTrackers == null) { -// fLineTrackers = new HashMap(); -// IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugUIPlugin.getUniqueIdentifier(), IDebugUIConstants.EXTENSION_POINT_CONSOLE_LINE_TRACKERS); -// IConfigurationElement[] elements = extensionPoint.getConfigurationElements(); -// for (int i = 0; i < elements.length; i++) { -// IConfigurationElement extension = elements[i]; -// String processType = extension.getAttributeAsIs("processType"); //$NON-NLS-1$ -// List list = (List)fLineTrackers.get(processType); -// if (list == null) { -// list = new ArrayList(); -// fLineTrackers.put(processType, list); -// } -// list.add(extension); -// } -// } -// List extensions = (List)fLineTrackers.get(type); -// ConsoleLineNotifier lineNotifier = null; -// if (extensions != null) { -// lineNotifier = new ConsoleLineNotifier(); -// Iterator iter = extensions.iterator(); -// while (iter.hasNext()) { -// IConfigurationElement extension = (IConfigurationElement)iter.next(); -// try { -// Object tracker = extension.createExecutableExtension("class"); //$NON-NLS-1$ -// if (tracker instanceof IConsoleLineTracker) { -// lineNotifier.addConsoleListener((IConsoleLineTracker)tracker); -// } else { -// DebugUIPlugin.logErrorMessage(MessageFormat.format(ConsoleMessages.getString("ConsoleDocumentManager.2"),new String[]{extension.getDeclaringExtension().getUniqueIdentifier()})); //$NON-NLS-1$ -// } -// } catch (CoreException e) { -// DebugUIPlugin.log(e); -// } -// } -// } -// return lineNotifier; -// } -// -// /** -// * Returns the processes that have been removed from the given -// * launch, or <code>null</code> if none. -// * -// * @param launch launch that has changed -// * @return removed processes or <code>null</code> -// */ -// private List getRemovedProcesses(ILaunch launch) { -// List removed = null; -// if (fProcesses == null) { -// fProcesses = new HashMap(); -// } -// IProcess[] old = (IProcess[]) fProcesses.get(launch); -// IProcess[] curr = launch.getProcesses(); -// if (old != null) { -// for (int i = 0; i < old.length; i++) { -// IProcess process = old[i]; -// if (!contains(curr, process)) { -// if (removed == null) { -// removed = new ArrayList(); -// } -// removed.add(process); -// } -// } -// } -// // update cache with current processes -// fProcesses.put(launch, curr); -// return removed; -// } -// -// /** -// * Returns whether the given object is contained in the list. -// * -// * @param list list to search -// * @param object object to search for -// * @return whether the given object is contained in the list -// */ -// private boolean contains(Object[] list, Object object) { -// for (int i = 0; i < list.length; i++) { -// Object object2 = list[i]; -// if (object2.equals(object)) { -// return true; -// } -// } -// return false; -// } -//} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocumentPartitioner.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocumentPartitioner.java deleted file mode 100644 index ab6d5b934..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocumentPartitioner.java +++ /dev/null @@ -1,1003 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.debug.internal.ui.views.console; - - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; - -import org.eclipse.debug.core.DebugEvent; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IDebugEventSetListener; -import org.eclipse.debug.core.IStreamListener; -import org.eclipse.debug.core.model.IFlushableStreamMonitor; -import org.eclipse.debug.core.model.IProcess; -import org.eclipse.debug.core.model.IStreamMonitor; -import org.eclipse.debug.core.model.IStreamsProxy; -import org.eclipse.debug.internal.ui.DebugUIPlugin; -import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants; -import org.eclipse.debug.ui.DebugUITools; -import org.eclipse.debug.ui.IDebugUIConstants; -import org.eclipse.debug.ui.console.IConsole; -import org.eclipse.debug.ui.console.IConsoleColorProvider; -import org.eclipse.debug.ui.console.IConsoleHyperlink; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.BadPositionCategoryException; -import org.eclipse.jface.text.DocumentEvent; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IDocumentPartitioner; -import org.eclipse.jface.text.IDocumentPartitionerExtension; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITypedRegion; -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.Region; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.console.ConsolePlugin; -import org.eclipse.ui.console.IPatternMatchListener; - -/** - * Default console document partitioner. Partitions a document into - * color regions for standard in, out, err. - */ -public class ConsoleDocumentPartitioner implements IDocumentPartitioner, IDocumentPartitionerExtension, IPropertyChangeListener, IConsole, IDebugEventSetListener { - - protected IProcess fProcess; - protected IConsoleColorProvider fColorProvider; - private IStreamsProxy fProxy; - protected List fStreamListeners = new ArrayList(2); - - private String[] fSortedLineDelimiters; - - // high and low water marks for buffering output - private boolean fUpdatingBuffer = false; - private int fLowWaterMark; - private int fHighWaterMark; - - // max amount of output (characters) processed per poll - private int fMaxAppendSize; - - class StreamEntry { - /** - * Identifier of the stream written to. - */ - private String fStreamIdentifier; - /** - * The text written - */ - private String fText = null; - - StreamEntry(String text, String streamIdentifier) { - fText = text; - fStreamIdentifier = streamIdentifier; - } - - /** - * Returns the stream identifier - */ - public String getStreamIdentifier() { - return fStreamIdentifier; - } - - /** - * Returns the text written - */ - public String getText() { - return fText; - } - - public boolean isClosedEntry() { - return false; - } - } - - /** - * A stream entry representing stream closure - */ - class StreamsClosedEntry extends StreamEntry { - StreamsClosedEntry() { - super("", ""); //$NON-NLS-1$ //$NON-NLS-2$ - } - - public boolean isClosedEntry() { - return true; - } - } - - class StreamListener implements IStreamListener { - - private String fStreamIdentifier; - private IStreamMonitor fStreamMonitor; - private boolean fIsSystemOut = false; - private boolean fIsSystemErr = false; - - public StreamListener(String streamIdentifier, IStreamMonitor streamMonitor) { - fStreamIdentifier = streamIdentifier; - fStreamMonitor = streamMonitor; - fIsSystemOut = IDebugUIConstants.ID_STANDARD_OUTPUT_STREAM.equals(streamIdentifier); - fIsSystemErr = IDebugUIConstants.ID_STANDARD_ERROR_STREAM.equals(streamIdentifier); - } - - public void streamAppended(String newText, IStreamMonitor monitor) { - if (fIsSystemOut) { - DebugUIPlugin.getDefault().getProcessConsoleManager().aboutToWriteSystemOut(getProcess()); - } else if (fIsSystemErr) { - DebugUIPlugin.getDefault().getProcessConsoleManager().aboutToWriteSystemErr(getProcess()); - } - ConsoleDocumentPartitioner.this.streamAppended(newText, fStreamIdentifier); - } - - public void streamClosed(IStreamMonitor monitor) { - //ConsoleDocumentPartitioner.this.streamClosed(fStreamIdentifier); - } - - public void connect() { - fStreamMonitor.addListener(this); - String contents= fStreamMonitor.getContents(); - if (fStreamMonitor instanceof IFlushableStreamMonitor) { - // flush the underlying buffer and do not duplicate storage - IFlushableStreamMonitor flushableStreamMonitor = (IFlushableStreamMonitor)fStreamMonitor; - flushableStreamMonitor.flushContents(); - flushableStreamMonitor.setBuffered(false); - } - if (contents.length() > 0) { - streamAppended(contents, fStreamMonitor); - } - } - - public void disconnect() { - fStreamMonitor.removeListener(this); - } - } - - - /** - * A queue of stream entries written to standard out and standard err. - * Entries appended to the end of the queue and removed from the front. - * Intentionally a vector to obtain synchronization as entries are - * added and removed. - */ - private Vector fQueue = new Vector(10); - - /** - * Thread that polls the queue for new output - */ - private Thread fPollingThread = null; - - /** - * Whether an append is still in progress or to be run - */ - private boolean fAppending = false; - - /** - * Whether the console has been killed/disconnected - */ - private boolean fKilled = false; - - /** - * Whether to keep polling - */ - private boolean fPoll = false; - - /** - * Whether the streams coonnected to the associated process are closed - */ - private boolean fClosed= false; - - /** - * The associated document - */ - private IDocument fDocument = null; - - /** - * The length of the current line - */ - private int fLineLength = 0; - - /** - * Maximum line length before wrapping. - */ - private int fMaxLineLength = 80; - - /** - * Whether using auto-wrap mode - */ - private boolean fWrap = false; - - /** - * List of partitions - */ - private List fPartitions = new ArrayList(5); - - /** - * The base number of milliseconds to pause - * between polls. - */ - private static final long BASE_DELAY= 100L; - - /** - * The identifier of the stream that was last appended to - */ - private String fLastStreamIdentifier= null; - - /** - * Keyboard input buffer - */ - private StringBuffer fInputBuffer = new StringBuffer(); - - /** - * Queue of hyperlinks to be added to the console - */ - private Vector fPendingLinks = new Vector(); - - /** - * The line notifier associated with this partitioner or <code>null</code> if none - */ - private ConsoleLineNotifier fLineNotifier = null; - - /** - * @see org.eclipse.jface.text.IDocumentPartitioner#connect(org.eclipse.jface.text.IDocument) - */ - public void connect(IDocument document) { - fDocument = document; - fDocument.addPositionCategory(HyperlinkPosition.HYPER_LINK_CATEGORY); - document.setDocumentPartitioner(this); - IPreferenceStore store = DebugUIPlugin.getDefault().getPreferenceStore(); - fWrap = store.getBoolean(IDebugPreferenceConstants.CONSOLE_WRAP); - fMaxLineLength = store.getInt(IDebugPreferenceConstants.CONSOLE_WIDTH); - store.addPropertyChangeListener(this); - fColorProvider.connect(fProcess, this); - DebugPlugin.getDefault().addDebugEventListener(this); - if (fProcess.isTerminated()) { - // it is possible the terminate event will have been fired before the - // document is connected - in this case, ensure we have closed the streams - // and notified the line tracker - streamsClosed(); - } - } - - /** - * @see org.eclipse.jface.text.IDocumentPartitioner#disconnect() - */ - public void disconnect() { - kill(); - if (fLineNotifier != null) { - fLineNotifier.disconnect(); - } - fColorProvider.disconnect(); - fDocument.setDocumentPartitioner(null); - DebugPlugin.getDefault().removeDebugEventListener(this); - } - - /** - * @see org.eclipse.jface.text.IDocumentPartitioner#documentAboutToBeChanged(org.eclipse.jface.text.DocumentEvent) - */ - public void documentAboutToBeChanged(DocumentEvent event) { - } - - /** - * @see org.eclipse.jface.text.IDocumentPartitioner#documentChanged(org.eclipse.jface.text.DocumentEvent) - */ - public boolean documentChanged(DocumentEvent event) { - return documentChanged2(event) != null; - } - - /** - * @see org.eclipse.jface.text.IDocumentPartitioner#getLegalContentTypes() - */ - public String[] getLegalContentTypes() { - return new String[] {InputPartition.INPUT_PARTITION_TYPE, OutputPartition.OUTPUT_PARTITION_TYPE, BreakPartition.BREAK_PARTITION_TYPE}; - } - - /** - * @see org.eclipse.jface.text.IDocumentPartitioner#getContentType(int) - */ - public String getContentType(int offset) { - ITypedRegion partition = getPartition(offset); - if (partition != null) { - return partition.getType(); - } - return null; - } - - /** - * @see org.eclipse.jface.text.IDocumentPartitioner#computePartitioning(int, int) - */ - public ITypedRegion[] computePartitioning(int offset, int length) { - if (offset == 0 && length == fDocument.getLength()) { - return (ITypedRegion[])fPartitions.toArray(new ITypedRegion[fPartitions.size()]); - } - int end = offset + length; - List list = new ArrayList(); - for (int i = 0; i < fPartitions.size(); i++) { - ITypedRegion partition = (ITypedRegion)fPartitions.get(i); - int partitionStart = partition.getOffset(); - int partitionEnd = partitionStart + partition.getLength(); - if ((offset >= partitionStart && offset <= partitionEnd) || - (offset < partitionStart && end >= partitionStart)) { - list.add(partition); - } - } - return (ITypedRegion[])list.toArray(new ITypedRegion[list.size()]); - } - - /** - * @see org.eclipse.jface.text.IDocumentPartitioner#getPartition(int) - */ - public ITypedRegion getPartition(int offset) { - for (int i = 0; i < fPartitions.size(); i++) { - ITypedRegion partition = (ITypedRegion)fPartitions.get(i); - int start = partition.getOffset(); - int end = start + partition.getLength(); - if (offset >= start && offset < end) { - return partition; - } - } - return null; - } - - /** - * @see org.eclipse.jface.text.IDocumentPartitionerExtension#documentChanged2(org.eclipse.jface.text.DocumentEvent) - */ - public IRegion documentChanged2(DocumentEvent event) { - if (fUpdatingBuffer) { - return new Region(0, fDocument.getLength()); - } - addPendingLinks(); - String text = event.getText(); - if (isAppendInProgress()) { - // stream input - addPartition(new OutputPartition(fLastStreamIdentifier, event.getOffset(), text.length())); -// if (fLineNotifier != null) { -// fLineNotifier.consoleChanged(event); -// } - } else { - // console keyboard input - int amountDeleted = event.getLength() - text.length(); - int docLength = fDocument.getLength(); - int bufferStartOffset = docLength + amountDeleted - fInputBuffer.length(); - int bufferModifyOffset = event.getOffset() - bufferStartOffset; - int bufferModifyOffsetEnd = bufferModifyOffset + event.getLength(); - - if (docLength == 0) { - // cleared - fQueue.clear(); - fInputBuffer.setLength(0); - fPartitions.clear(); - // reset lines processed to 0 -// if (fLineNotifier != null) { -// fLineNotifier.setLinesProcessed(0); -// } - // remove existing positions - try { - Position[] positions = fDocument.getPositions(HyperlinkPosition.HYPER_LINK_CATEGORY); - for (int i = 0; i < positions.length; i++) { - Position position = positions[i]; - fDocument.removePosition(HyperlinkPosition.HYPER_LINK_CATEGORY, position); - } - } catch (BadPositionCategoryException e) { - } - return new Region(0,0); - } - - if (amountDeleted > 0) { - // deletion - fInputBuffer.replace(bufferModifyOffset, bufferModifyOffsetEnd, text); - // replace the last partition - InputPartition partition = new InputPartition(IDebugUIConstants.ID_STANDARD_INPUT_STREAM, bufferStartOffset, fInputBuffer.length()); - fPartitions.set(fPartitions.size() - 1, partition); - } else { - // insert/replace - must process entire buffer in case of - // line delimiter insertion in middle of buffer - - // parse for line delimiters (indicate chunks to write to standard in) - String[] lineDelimiters= getLegalLineDelimiters(); - StringBuffer temp =new StringBuffer(fInputBuffer.toString()); - temp.replace(bufferModifyOffset, bufferModifyOffsetEnd, text); - String remaining = temp.toString(); - int partitionOffset = bufferStartOffset; - fInputBuffer.setLength(0); - boolean includesLF = false; - // line delimiters are sorted by length (compare longest ones first) - for (int i= lineDelimiters.length - 1; i >= 0; i--) { - int lf = remaining.indexOf(lineDelimiters[i]); - while (lf >= 0) { - includesLF = true; - int split = lf + lineDelimiters[i].length(); - fInputBuffer.append(remaining.substring(0, split)); - remaining = remaining.substring(split); - String buffer = fInputBuffer.toString(); - fInputBuffer.setLength(0); - InputPartition written = (InputPartition)addPartition(new InputPartition(IDebugUIConstants.ID_STANDARD_INPUT_STREAM, partitionOffset, split)); - written.setReadOnly(true); - partitionOffset += split; - addPartition(new InputPartition(IDebugUIConstants.ID_STANDARD_INPUT_STREAM, partitionOffset, 0)); - if (fProxy != null) { - try { - fProxy.write(buffer); - } catch (IOException ioe) { - DebugUIPlugin.log(ioe); - } - } - lf = remaining.indexOf(lineDelimiters[i]); - } - if (includesLF) { - break; - } - } - if (remaining.length() > 0) { - fInputBuffer.append(remaining); - addPartition(new InputPartition(IDebugUIConstants.ID_STANDARD_INPUT_STREAM, partitionOffset, remaining.length())); - } - } - } - ITypedRegion[] affectedRegions = computePartitioning(event.getOffset(), text.length()); - if (affectedRegions.length == 0) { - return null; - } - if (affectedRegions.length == 1) { - return affectedRegions[0]; - } - int affectedLength = affectedRegions[0].getLength(); - for (int i = 1; i < affectedRegions.length; i++) { - ITypedRegion region = affectedRegions[i]; - affectedLength += region.getLength(); - } - return new Region(affectedRegions[0].getOffset(), affectedLength); - } - - /** - * Adds a new colored input partition, combining with the previous partition if - * possible. - */ - protected StreamPartition addPartition(StreamPartition partition) { - if (fPartitions.isEmpty()) { - fPartitions.add(partition); - } else { - int index = fPartitions.size() - 1; - StreamPartition last = (StreamPartition)fPartitions.get(index); - if (last.canBeCombinedWith(partition)) { - // replace with a single partition - partition = last.combineWith(partition); - fPartitions.set(index, partition); - } else { - // different kinds - add a new parition - fPartitions.add(partition); - } - } - return partition; - } - - /** - * Add any pending links to the document that are now within the document's - * bounds. - */ - protected void addPendingLinks() { - synchronized (fPendingLinks) { - if (fPendingLinks.isEmpty()) { - return; - } - Iterator links = fPendingLinks.iterator(); - while (links.hasNext()) { - HyperlinkPosition link = (HyperlinkPosition)links.next(); - if ((link.getOffset() + link.getLength()) <= fDocument.getLength()) { - links.remove(); - addLink(link.getHyperLink(), link.getOffset(), link.getLength()); - } - } - } - } - - public ConsoleDocumentPartitioner(IProcess process, IConsoleColorProvider colorProvider) { - fProcess= process; - fColorProvider = colorProvider; - IPreferenceStore store = DebugUIPlugin.getDefault().getPreferenceStore(); - boolean limit = store.getBoolean(IDebugPreferenceConstants.CONSOLE_LIMIT_CONSOLE_OUTPUT); - if (limit) { - fLowWaterMark = store.getInt(IDebugPreferenceConstants.CONSOLE_LOW_WATER_MARK); - fHighWaterMark = store.getInt(IDebugPreferenceConstants.CONSOLE_HIGH_WATER_MARK); - fMaxAppendSize = fLowWaterMark; - } else { - fLowWaterMark = -1; - fHighWaterMark = -1; - fMaxAppendSize = 80000; - } - } - - /** - * Stops reading/polling immediately - */ - public synchronized void kill() { - if (!fKilled) { - fKilled = true; - if (fPollingThread != null && fPollingThread.isAlive()) { - fPollingThread.interrupt(); - } - fPoll = false; - Iterator iter = fStreamListeners.iterator(); - while (iter.hasNext()) { - StreamListener listener = (StreamListener)iter.next(); - listener.disconnect(); - } - DebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this); - } - } - - public synchronized void startReading() { - if (fPollingThread != null) { - // already polling - return; - } - Runnable r = new Runnable() { - public void run() { - pollAndSleep(); - } - }; - fPoll = true; - fPollingThread = new Thread(r, "Console Polling Thread"); //$NON-NLS-1$ - fPollingThread.start(); - } - - /** - * Polls and sleeps until closed or the associated - * process terminates - */ - protected void pollAndSleep() { - while (!fKilled && fPoll && (!isClosed() || !fQueue.isEmpty())) { - poll(); - try { - Thread.sleep(BASE_DELAY); - } catch (InterruptedException e) { - } - } - } - - /** - * Polls the queue for new output and updates this document - */ - protected void poll() { - if (isAppendInProgress()) { - return; - } - synchronized(fQueue) { - StringBuffer buffer = null; - StreamEntry prev = null; - int processed = 0; - int amount = 0; - String[] lds = fDocument.getLegalLineDelimiters(); - boolean closed= false; - while (!fKilled && !closed && processed < fQueue.size() && amount < fMaxAppendSize) { - StreamEntry entry = (StreamEntry)fQueue.get(processed); - if (entry.isClosedEntry()) { - closed = true; - processed++; - } else if (prev == null || prev.getStreamIdentifier().equals(entry.getStreamIdentifier())) { - String text = entry.getText(); - if (buffer == null) { - buffer = new StringBuffer(text.length()); - } - if (isWrap()) { - for (int i = 0; i < text.length(); i++) { - if (fLineLength >= fMaxLineLength) { - String d = getLineDelimiter(text, i, lds); - if (d == null) { - buffer.append(lds[0]); - } else { - buffer.append(d); - i = i + d.length(); - } - fLineLength = 0; - } - if (i < text.length()) { - String lineDelimiter = getLineDelimiter(text, i, lds); - if (lineDelimiter == null) { - buffer.append(text.charAt(i)); - fLineLength++; - } else { - buffer.append(lineDelimiter); - fLineLength = 0; - i = i + lineDelimiter.length() - 1; - } - } - } - } else { - buffer.append(text); - } - prev = entry; - processed++; - amount+= entry.getText().length(); - } else { - // change streams - write the contents of the current stream - // and start processing the next stream - if (buffer != null) { - appendToDocument(buffer.toString(), prev.getStreamIdentifier()); - buffer.setLength(0); - prev = null; - } - } - } - if (buffer != null) { - appendToDocument(buffer.toString(), prev.getStreamIdentifier()); - } - if (closed) { - Display display= DebugUIPlugin.getStandardDisplay(); - if (display != null) { - display.asyncExec(new Runnable() { - public void run() { - if (fLineNotifier != null) { - fLineNotifier.streamsClosed(); - } - } - }); - } - } - for (int i = 0; i < processed; i++) { - fQueue.remove(0); - } - } - } - - /** - * Returns the longest line delimiter at the given position in the given text, - * or <code>null</code> if none. - * - * @param text the text in which to look for a line delimiter - * @param pos the position at which to look for a line delimiter - * @param lineDelimiters the line delimiters to look for - */ - protected String getLineDelimiter(String text, int pos, String[] lineDelimiters) { - String ld = null; - for (int i = 0; i < lineDelimiters.length; i++) { - if (text.regionMatches(pos, lineDelimiters[i], 0, lineDelimiters[i].length())) { - if (ld == null) { - ld = lineDelimiters[i]; - } else { - if (ld.length() < lineDelimiters[i].length()) { - ld = lineDelimiters[i]; - } - } - } - } - return ld; - } - - /** - * Returns whether this console document is performing auto-wrap - */ - protected boolean isWrap() { - return fWrap; - } - - /** - * The stream with the given identifier has had text appended to it. - * Adds the new text to the document. - * - * @see IStreamListener#streamAppended(String, IStreamMonitor) - */ - protected void appendToDocument(final String text, final String streamIdentifier) { - Runnable r = new Runnable() { - public void run() { - setAppendInProgress(true); - fLastStreamIdentifier = streamIdentifier; - try { - fDocument.replace(fDocument.getLength(), 0, text); - warnOfContentChange(); - } catch (BadLocationException e) { - } - setAppendInProgress(false); - checkOverflow(); - } - }; - Display display = DebugUIPlugin.getStandardDisplay(); - if (display != null) { - display.asyncExec(r); - } - } - - /** - * Checks to see if the console buffer has overflowed, and empties the - * overflow if needed, updating partitions and hyperlink positions. - */ - protected void checkOverflow() { - if (fHighWaterMark >= 0) { - if (fDocument.getLength() > fHighWaterMark) { -// int lineDifference = 0; - if (fLineNotifier != null) { -// int processed = fLineNotifier.getLinesProcessed(); -// int numLines = fDocument.getNumberOfLines(); -// lineDifference = numLines - processed; - } - int overflow = fDocument.getLength() - fLowWaterMark; - fUpdatingBuffer = true; - try { - // update partitions - List newParitions = new ArrayList(fPartitions.size()); - Iterator partitions = fPartitions.iterator(); - while (partitions.hasNext()) { - ITypedRegion region = (ITypedRegion)partitions.next(); - if (region instanceof StreamPartition) { - StreamPartition streamPartition = (StreamPartition)region; - ITypedRegion newPartition = null; - int offset = region.getOffset(); - if (offset < overflow) { - int endOffset = offset + region.getLength(); - if (endOffset < overflow) { - // remove partition - } else { - // split partition - int length = endOffset - overflow; - newPartition = streamPartition.createNewPartition(streamPartition.getStreamIdentifier(), 0, length); - } - } else { - // modify parition offset - newPartition = streamPartition.createNewPartition(streamPartition.getStreamIdentifier(), streamPartition.getOffset() - overflow, streamPartition.getLength()); - } - if (newPartition != null) { - newParitions.add(newPartition); - } - } - } - fPartitions = newParitions; - // update hyperlinks - try { - Position[] hyperlinks = fDocument.getPositions(HyperlinkPosition.HYPER_LINK_CATEGORY); - for (int i = 0; i < hyperlinks.length; i++) { - HyperlinkPosition position = (HyperlinkPosition)hyperlinks[i]; - // remove old the position - fDocument.removePosition(HyperlinkPosition.HYPER_LINK_CATEGORY, position); - if (position.getOffset() >= overflow) { - // add new poisition - try { - fDocument.addPosition(HyperlinkPosition.HYPER_LINK_CATEGORY, new HyperlinkPosition(position.getHyperLink(), position.getOffset() - overflow, position.getLength())); - } catch (BadLocationException e) { - } - } - } - } catch (BadPositionCategoryException e) { - } - synchronized (fPendingLinks) { - // update pending hyperlinks - Vector newPendingLinks = new Vector(fPendingLinks.size()); - Iterator pendingLinks = fPendingLinks.iterator(); - while (pendingLinks.hasNext()) { - HyperlinkPosition position = (HyperlinkPosition)pendingLinks.next(); - if (position.getOffset() >= overflow) { - newPendingLinks.add(new HyperlinkPosition(position.getHyperLink(), position.getOffset() - overflow, position.getLength())); - } - } - fPendingLinks = newPendingLinks; - } - - // remove overflow text - try { - fDocument.replace(0, overflow, ""); //$NON-NLS-1$ - } catch (BadLocationException e) { - DebugUIPlugin.log(e); - } - } finally { - // update number of lines processed - if (fLineNotifier != null) { -// fLineNotifier.setLinesProcessed(fDocument.getNumberOfLines() - lineDifference); - } - fUpdatingBuffer = false; - } - } - } - } - - /** - * The stream with the given identifier has had text appended to it. - * Adds a new entry to the queue. - */ - protected void streamAppended(String text, String streamIdentifier) { - synchronized (fQueue) { - if (fClosed) { - // ERROR - attempt to append after console is closed - DebugUIPlugin.logErrorMessage("An attempt was made to append text to the console, after it was closed."); //$NON-NLS-1$ - } else { - fQueue.add(new StreamEntry(text, streamIdentifier)); - } - } - } - - /** - * The streams associated with this process have been closed. - * Adds a new "stream closed" entry to the queue. - */ - protected void streamsClosed() { - synchronized (fQueue) { - if (!fClosed) { - fQueue.add(new StreamsClosedEntry()); - fClosed = true; - } - } - } - - /** - * Sets whether a runnable has been submitted to update the console - * document. - */ - protected void setAppendInProgress(boolean appending) { - fAppending = appending; - } - - /** - * Returns whether a runnable has been submitted to update the console - * document. - */ - protected boolean isAppendInProgress() { - return fAppending; - } - - /** - * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(PropertyChangeEvent) - */ - public void propertyChange(PropertyChangeEvent event) { - if (event.getProperty().equals(IDebugPreferenceConstants.CONSOLE_WRAP)) { - fWrap = DebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IDebugPreferenceConstants.CONSOLE_WRAP); - } else if (event.getProperty().equals(IDebugPreferenceConstants.CONSOLE_WIDTH)) { - fMaxLineLength = DebugUIPlugin.getDefault().getPreferenceStore().getInt(IDebugPreferenceConstants.CONSOLE_WIDTH); - } - } - - /** - * Returns a collection of legal line delimiters for this partitioner's - * associated document, sorted by length in descending order. - */ - protected String[] getLegalLineDelimiters() { - if (fSortedLineDelimiters == null) { - String[] lineDelimiters = fDocument.getLegalLineDelimiters(); - List list = new ArrayList(lineDelimiters.length); - for (int i = 0; i < lineDelimiters.length; i++) { - list.add(lineDelimiters[i]); - } - Comparator comparator = new Comparator() { - /** - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - public int compare(Object a, Object b) { - String s1 = (String)a; - String s2 = (String)b; - return s2.length() - s1.length(); - } - - }; - Collections.sort(list, comparator); - fSortedLineDelimiters = (String[])list.toArray(new String[lineDelimiters.length]); - } - return fSortedLineDelimiters; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.console.IConsole#connect(org.eclipse.debug.core.model.IStreamMonitor, java.lang.String) - */ - public void connect(IStreamMonitor streamMonitor, String streamIdentifer) { - if (streamMonitor != null) { - StreamListener listener = new StreamListener(streamIdentifer, streamMonitor); - fStreamListeners.add(listener); - listener.connect(); - // ensure we start polling for output - startReading(); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.console.IConsole#connect(org.eclipse.debug.core.model.IStreamsProxy) - */ - public void connect(IStreamsProxy streamsProxy) { - fProxy = streamsProxy; - connect(streamsProxy.getOutputStreamMonitor(), IDebugUIConstants.ID_STANDARD_OUTPUT_STREAM); - connect(streamsProxy.getErrorStreamMonitor(), IDebugUIConstants.ID_STANDARD_ERROR_STREAM); - } - - /** - * Returns whether the streams assocaited with this console's process - * have been closed. - */ - protected boolean isClosed() { - return fClosed; - } - - protected IConsoleColorProvider getColorProvider() { - return fColorProvider; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.console.IConsole#addLink(org.eclipse.debug.ui.console.IConsoleHyperlink, int, int) - */ - public void addLink(IConsoleHyperlink link, int offset, int length) { - HyperlinkPosition hyperlinkPosition = new HyperlinkPosition(link, offset, length); - try { - fDocument.addPosition(HyperlinkPosition.HYPER_LINK_CATEGORY, hyperlinkPosition); - } catch (BadPositionCategoryException e) { - // internal error - DebugUIPlugin.log(e); - } catch (BadLocationException e) { - // queue the link - fPendingLinks.add(hyperlinkPosition); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.console.IConsole#getDocument() - */ - public IDocument getDocument() { - return fDocument; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.console.IConsole#getProcess() - */ - public IProcess getProcess() { - return fProcess; - } - - /** - * Connects the given line notifier to this console document partitioner - * - * @param lineNotifier - */ - public void connectLineNotifier(ConsoleLineNotifier lineNotifier) { - fLineNotifier = lineNotifier; - lineNotifier.connect(this); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.console.IConsole#getRegion(org.eclipse.debug.ui.console.IConsoleHyperlink) - */ - public IRegion getRegion(IConsoleHyperlink link) { - try { - Position[] positions = getDocument().getPositions(HyperlinkPosition.HYPER_LINK_CATEGORY); - for (int i = 0; i < positions.length; i++) { - HyperlinkPosition position = (HyperlinkPosition)positions[i]; - if (position.getHyperLink().equals(link)) { - return new Region(position.getOffset(), position.getLength()); - } - } - } catch (BadPositionCategoryException e) { - } - return null; - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[]) - */ - public void handleDebugEvents(DebugEvent[] events) { - for (int i = 0; i < events.length; i++) { - DebugEvent event = events[i]; - if (event.getKind() == DebugEvent.TERMINATE && event.getSource().equals(getProcess())) { - DebugPlugin.getDefault().removeDebugEventListener(this); - streamsClosed(); - } - } - - } - - private void warnOfContentChange() { - ConsolePlugin.getDefault().getConsoleManager().warnOfContentChange(DebugUITools.getConsole(fProcess)); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.console.IConsole#addPatternMatchHandler(org.eclipse.ui.console.IPatternMatchListener) - */ - public void addPatternMatchListener(IPatternMatchListener matchHandler) { - // - } - public void removePatternMatchListener(IPatternMatchListener matchHandler) { - } -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocumentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocumentProvider.java deleted file mode 100644 index f102a0fee..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleDocumentProvider.java +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.views.console; - - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.debug.core.model.IProcess; -import org.eclipse.debug.internal.ui.DebugUIPlugin; -import org.eclipse.debug.ui.console.ConsoleColorProvider; -import org.eclipse.debug.ui.console.IConsoleColorProvider; - -import org.eclipse.jface.operation.IRunnableContext; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.source.IAnnotationModel; - -import org.eclipse.ui.texteditor.AbstractDocumentProvider; - -/** - * Default document provider for the processes. By default a document is created - * which is connected to the streams proxy of the associated process. - */ -public class ConsoleDocumentProvider extends AbstractDocumentProvider { - - /** - * The runnable context for that provider. - * @since 3.0 - */ - private WorkspaceOperationRunner fOperationRunner; - - /** - * @see org.eclipse.ui.texteditor.AbstractDocumentProvider#createDocument(java.lang.Object) - */ - protected IDocument createDocument(Object element) { - if (element instanceof IProcess) { - IProcess process = (IProcess)element; - IConsoleColorProvider colorProvider = getColorProvider(process); - ConsoleDocument doc= new ConsoleDocument(colorProvider); - ConsoleDocumentPartitioner partitioner = new ConsoleDocumentPartitioner(process, colorProvider); - ConsoleLineNotifier lineNotifier = getLineNotifier(process); - partitioner.connect(doc); - if (lineNotifier != null) { - partitioner.connectLineNotifier(lineNotifier); - } - return doc; - } - return null; - } - - /** - * @see org.eclipse.ui.texteditor.AbstractDocumentProvider#createAnnotationModel(java.lang.Object) - */ - protected IAnnotationModel createAnnotationModel(Object element) { - return null; - } - - /** - * @see org.eclipse.ui.texteditor.AbstractDocumentProvider#doSaveDocument(org.eclipse.core.runtime.IProgressMonitor, java.lang.Object, org.eclipse.jface.text.IDocument, boolean) - */ - protected void doSaveDocument(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite) { - } - - /** - * @see org.eclipse.ui.texteditor.AbstractDocumentProvider#disposeElementInfo(java.lang.Object, org.eclipse.ui.texteditor.AbstractDocumentProvider.ElementInfo) - */ - protected void disposeElementInfo(Object element, ElementInfo info) { - ConsoleDocument document = (ConsoleDocument)info.fDocument; - document.getDocumentPartitioner().disconnect(); - super.disposeElementInfo(element, info); - } - - /** - * Returns a color provider for the given process. - * - * @param process - * @return IConsoleColorProvider - */ - protected IConsoleColorProvider getColorProvider(IProcess process) { - String type = process.getAttribute(IProcess.ATTR_PROCESS_TYPE); - IConsoleColorProvider colorProvider = null; - if (type != null) { - colorProvider = getProcessConsoleManager().getColorProvider(type); - } - if (colorProvider == null) { - colorProvider = new ConsoleColorProvider(); - } - return colorProvider; - } - - /** - * Returns the line notifier for this console, or <code>null</code> if none. - * - * @param process - * @return line notifier, or <code>null</code> - */ - protected ConsoleLineNotifier getLineNotifier(IProcess process) { - String type = process.getAttribute(IProcess.ATTR_PROCESS_TYPE); - if (type != null) { - return getProcessConsoleManager().newLineNotifier(type); - } - return null; - } - - /** - * Convenience accessor - * - * @return ConsoleDocumentManager - */ - private ProcessConsoleManager getProcessConsoleManager() { - return DebugUIPlugin.getDefault().getProcessConsoleManager(); - } - - /* - * @see org.eclipse.ui.texteditor.AbstractDocumentProvider#getOperationRunner(org.eclipse.core.runtime.IProgressMonitor) - */ - protected IRunnableContext getOperationRunner(IProgressMonitor monitor) { - if (fOperationRunner == null) - fOperationRunner = new WorkspaceOperationRunner(); - fOperationRunner.setProgressMonitor(monitor); - return fOperationRunner; - } -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleLineNotifier.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleLineNotifier.java index 1622a7a53..cf82c6d6d 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleLineNotifier.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleLineNotifier.java @@ -11,22 +11,26 @@ package org.eclipse.debug.internal.ui.views.console; -import org.eclipse.debug.ui.console.IConsole; +import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.ui.console.IConsoleLineTracker; import org.eclipse.debug.ui.console.IConsoleLineTrackerExtension; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.Region; +import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.ListenerList; -import org.eclipse.ui.console.IPatternMatchListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.ui.console.IConsole; +import org.eclipse.ui.console.IOConsole; +import org.eclipse.ui.console.IPatternMatchListenerDelegate; import org.eclipse.ui.console.PatternMatchEvent; /** * Tracks text appended to the console and notifies listeners in terms of whole * lines. */ -public class ConsoleLineNotifier implements IPatternMatchListener { +public class ConsoleLineNotifier implements IPatternMatchListenerDelegate, IPropertyChangeListener { /** * Console listeners */ @@ -35,7 +39,7 @@ public class ConsoleLineNotifier implements IPatternMatchListener { /** * The console this notifier is tracking */ - private IConsole fConsole = null; + private ProcessConsole fConsole = null; /** * Connects this notifier to the given console. @@ -43,13 +47,17 @@ public class ConsoleLineNotifier implements IPatternMatchListener { * @param console */ public void connect(IConsole console) { - fConsole = console; - Object[] listeners = fListeners.getListeners(); - for (int i = 0; i < listeners.length; i++) { - IConsoleLineTracker listener = (IConsoleLineTracker)listeners[i]; - listener.init(console); - } - fConsole.addPatternMatchListener(this); + if (console instanceof ProcessConsole) { + fConsole = (ProcessConsole)console; + + IConsoleLineTracker[] lineTrackers = DebugUIPlugin.getDefault().getProcessConsoleManager().getLineTrackers(fConsole.getProcess()); + for (int i = 0; i < lineTrackers.length; i++) { + lineTrackers[i].init(fConsole); + addConsoleListener(lineTrackers[i]); + } + + fConsole.addPropertyChangeListener(this); + } } /** @@ -59,12 +67,15 @@ public class ConsoleLineNotifier implements IPatternMatchListener { if (fConsole == null) { return; //already disconnected } - fConsole.removePatternMatchListener(this); + Object[] listeners = fListeners.getListeners(); for (int i = 0; i < listeners.length; i++) { IConsoleLineTracker listener = (IConsoleLineTracker)listeners[i]; listener.dispose(); } + + fConsole.removePropertyChangeListener(this); + fListeners = null; fConsole = null; } @@ -106,20 +117,6 @@ public class ConsoleLineNotifier implements IPatternMatchListener { public void addConsoleListener(IConsoleLineTracker listener) { fListeners.add(listener); } - - /* (non-Javadoc) - * @see org.eclipse.ui.console.IPatternMatchListener#getPattern() - */ - public String getPattern() { - return ".*\r(\n?)|.*\n"; //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see org.eclipse.ui.console.IPatternMatchListener#getModifiers() - */ - public int getCompilerFlags() { - return 0; - } /* (non-Javadoc) * @see org.eclipse.ui.console.IPatternMatchListener#matchFound(org.eclipse.ui.console.PatternMatchEvent) @@ -152,5 +149,13 @@ public class ConsoleLineNotifier implements IPatternMatchListener { } } + /* (non-Javadoc) + * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) + */ + public void propertyChange(PropertyChangeEvent event) { + if(event.getProperty().equals(IOConsole.P_CONSOLE_OUTPUT_COMPLETE)) { + streamsClosed(); + } + } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleMessages.properties b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleMessages.properties index d6d5d3a32..726bfa133 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleMessages.properties +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleMessages.properties @@ -9,9 +9,6 @@ # IBM Corporation - initial API and implementation ############################################################################### -ConsoleDocumentManager.1=Invalid extension {0} - class must be an instance of IConsoleColorProvider. -ConsoleDocumentManager.2=Invalid extension {0} - class must be an instance of IConsoleLineTracker - ConsoleRemoveAllTerminatedAction.0=&Remove All Terminated ConsoleRemoveAllTerminatedAction.1=Remove All Terminated Launches diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleOutputTextStore.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleOutputTextStore.java deleted file mode 100644 index c98fb8995..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleOutputTextStore.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.views.console; - - -import org.eclipse.jface.text.ITextStore; - -public class ConsoleOutputTextStore implements ITextStore { - - private StringBuffer fBuffer; - - public ConsoleOutputTextStore(int bufferSize) { - fBuffer= new StringBuffer(bufferSize); - } - - /** - * @see ITextStore#get(int) - */ - public char get(int pos) { - return fBuffer.charAt(pos); - } - - /** - * @see ITextStore#get(int, int) - */ - public String get(int pos, int length) { - return fBuffer.substring(pos, pos + length); - } - - /** - * @see ITextStore#getLength() - */ - public int getLength() { - return fBuffer.length(); - } - - /** - * @see ITextStore#replace(int, int, String) - */ - public void replace(int pos, int length, String text) { - if (text == null) { - text= ""; //$NON-NLS-1$ - } - fBuffer.replace(pos, pos + length, text); - } - - /** - * @see ITextStore#set(String) - */ - public void set(String text) { - fBuffer= new StringBuffer(text); - } - - /** - * @see StringBuffer#ensureCapacity(int) - */ - public void setMinimalBufferSize(int bufferSize) { - fBuffer.ensureCapacity(bufferSize); - } -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleViewer.java deleted file mode 100644 index a6fc96850..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleViewer.java +++ /dev/null @@ -1,489 +0,0 @@ -///******************************************************************************* -// * Copyright (c) 2000, 2004 IBM Corporation and others. -// * All rights reserved. This program and the accompanying materials -// * are made available under the terms of the Common Public License v1.0 -// * which accompanies this distribution, and is available at -// * http://www.eclipse.org/legal/cpl-v10.html -// * -// * Contributors: -// * IBM Corporation - initial API and implementation -// *******************************************************************************/ -//package org.eclipse.debug.internal.ui.views.console; -// -// -//import org.eclipse.debug.internal.ui.DebugUIPlugin; -//import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; -//import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants; -//import org.eclipse.debug.ui.console.IConsoleColorProvider; -//import org.eclipse.debug.ui.console.IConsoleHyperlink; -//import org.eclipse.jface.resource.JFaceResources; -//import org.eclipse.jface.text.BadLocationException; -//import org.eclipse.jface.text.BadPositionCategoryException; -//import org.eclipse.jface.text.DocumentEvent; -//import org.eclipse.jface.text.IDocument; -//import org.eclipse.jface.text.IDocumentListener; -//import org.eclipse.jface.text.IDocumentPartitioner; -//import org.eclipse.jface.text.IRegion; -//import org.eclipse.jface.text.ITypedRegion; -//import org.eclipse.jface.text.Position; -//import org.eclipse.jface.text.TextViewer; -//import org.eclipse.jface.util.IPropertyChangeListener; -//import org.eclipse.jface.util.PropertyChangeEvent; -//import org.eclipse.swt.SWT; -//import org.eclipse.swt.custom.LineStyleEvent; -//import org.eclipse.swt.custom.LineStyleListener; -//import org.eclipse.swt.custom.StyleRange; -//import org.eclipse.swt.custom.StyledText; -//import org.eclipse.swt.events.MouseEvent; -//import org.eclipse.swt.events.MouseListener; -//import org.eclipse.swt.events.MouseMoveListener; -//import org.eclipse.swt.events.MouseTrackListener; -//import org.eclipse.swt.events.PaintEvent; -//import org.eclipse.swt.events.PaintListener; -//import org.eclipse.swt.events.VerifyEvent; -//import org.eclipse.swt.graphics.Color; -//import org.eclipse.swt.graphics.Cursor; -//import org.eclipse.swt.graphics.FontMetrics; -//import org.eclipse.swt.graphics.Point; -//import org.eclipse.swt.widgets.Composite; -//import org.eclipse.swt.widgets.Control; -//import org.eclipse.swt.widgets.Event; -//import org.eclipse.swt.widgets.Listener; -//import org.eclipse.ui.console.IConsoleConstants; -// -//public class ConsoleViewer extends TextViewer implements IPropertyChangeListener, MouseTrackListener, MouseMoveListener, MouseListener, PaintListener, LineStyleListener, Listener { -// -// /** -// * Hand cursor -// */ -// private Cursor fHandCursor; -// -// /** -// * Text cursor -// */ -// private Cursor fTextCursor; -// -// /** -// * The active hyperlink, or <code>null</code> -// */ -// private IConsoleHyperlink fHyperLink = null; -// -// protected InternalDocumentListener fInternalDocumentListener= new InternalDocumentListener(); -// -// /** -// * Whether the console scrolls as output is appended. -// */ -// private boolean fAutoScroll = true; -// -// /** -// * Internal document listener. -// */ -// class InternalDocumentListener implements IDocumentListener { -// /** -// * @see IDocumentListener#documentAboutToBeChanged(DocumentEvent) -// */ -// public void documentAboutToBeChanged(DocumentEvent e) { -// } -// -// /** -// * @see IDocumentListener#documentChanged(DocumentEvent) -// */ -// public void documentChanged(DocumentEvent e) { -// ConsoleDocument doc= (ConsoleDocument)getDocument(); -// if (doc == null) { -// getTextWidget().setEditable(false); -// return; -// } -// getTextWidget().setEditable(!doc.isReadOnly()); -// revealEndOfDocument(); -// } -// } -// -// /** -// * Creates a new console viewer and adds verification checking -// * to only allow text modification if the text is being modified -// * in the editable portion of the underlying document. -// * -// * @see org.eclipse.swt.events.VerifyListener -// */ -// public ConsoleViewer(Composite parent) { -// super(parent, getSWTStyles()); -// -// getTextWidget().setDoubleClickEnabled(true); -// -// DebugUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this); -// JFaceResources.getFontRegistry().addListener(this); -// -// getTextWidget().setFont(JFaceResources.getFont(IConsoleConstants.CONSOLE_FONT)); -// getTextWidget().addMouseTrackListener(this); -// getTextWidget().addPaintListener(this); -// getTextWidget().addLineStyleListener(this); -// getTextWidget().addListener(SWT.KeyUp, this); -// getTextWidget().setTabs(DebugUIPlugin.getDefault().getPluginPreferences().getInt(IDebugPreferenceConstants.CONSOLE_TAB_WIDTH)); -// } -// -// /** -// * Returns the SWT style flags used when instantiating this viewer -// */ -// private static int getSWTStyles() { -// int styles= SWT.H_SCROLL | SWT.V_SCROLL; -// return styles; -// } -// -// /** -// * Reveals (makes visible) the end of the current document -// */ -// protected void revealEndOfDocument() { -// if (isAutoScroll()) { -// IDocument doc = getDocument(); -// int lines = doc.getNumberOfLines(); -// try { -// // lines are 0-based -// int lineStartOffset = doc.getLineOffset(lines - 1); -// StyledText widget= getTextWidget(); -// if (lineStartOffset > 0) { -// widget.setCaretOffset(lineStartOffset); -// widget.showSelection(); -// } -// int lineEndOffset = lineStartOffset + doc.getLineLength(lines - 1); -// if (lineEndOffset > 0) { -// widget.setCaretOffset(lineEndOffset); -// } -// } catch (BadLocationException e) { -// } -// } -// } -// -// /** -// * @see ITextViewer#setDocument(IDocument) -// */ -// public void setDocument(IDocument doc) { -// IDocument oldDoc= getDocument(); -// IDocument document= doc; -// if (oldDoc == null && document == null) { -// return; -// } -// if (oldDoc != null) { -// oldDoc.removeDocumentListener(fInternalDocumentListener); -// if (oldDoc.equals(document)) { -// document.addDocumentListener(fInternalDocumentListener); -// return; -// } -// } -// -// super.setDocument(document); -// if (document != null) { -// revealEndOfDocument(); -// document.addDocumentListener(fInternalDocumentListener); -// } -// } -// -// /** -// * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent) -// */ -// public void propertyChange(PropertyChangeEvent event) { -// String propertyName= event.getProperty(); -// if (propertyName.equals(IDebugPreferenceConstants.CONSOLE_SYS_IN_COLOR) || -// propertyName.equals(IDebugPreferenceConstants.CONSOLE_SYS_OUT_COLOR) || -// propertyName.equals(IDebugPreferenceConstants.CONSOLE_SYS_ERR_COLOR)) { -// getTextWidget().redraw(); -// } else if (propertyName.equals(IConsoleConstants.CONSOLE_FONT)) { -// getTextWidget().setFont(JFaceResources.getFont(IConsoleConstants.CONSOLE_FONT)); -// } else if (propertyName.equals(IDebugPreferenceConstants.CONSOLE_TAB_WIDTH)) { -// getTextWidget().setTabs(DebugUIPlugin.getDefault().getPluginPreferences().getInt(IDebugPreferenceConstants.CONSOLE_TAB_WIDTH)); -// } else if (propertyName.equals(IInternalDebugUIConstants.PREF_CONSOLE_SCROLL_LOCK)) { -// setAutoScroll(!DebugUIPlugin.getDefault().getPluginPreferences().getBoolean(IInternalDebugUIConstants.PREF_CONSOLE_SCROLL_LOCK)); -// } -// } -// -// /** -// * Dispose this viewer and resources -// */ -// public void dispose() { -// Control control = getTextWidget(); -// if (control != null) { -// control.removeMouseTrackListener(this); -// control.removePaintListener(this); -// } -// if (fHandCursor != null) { -// fHandCursor.dispose(); -// } -// if (fTextCursor != null) { -// fTextCursor.dispose(); -// } -// DebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this); -// JFaceResources.getFontRegistry().removeListener(this); -// } -// -// /** -// * Only allow text to be typed at the end of the document. -// * -// * @see org.eclipse.swt.events.VerifyListener#verifyText(org.eclipse.swt.events.VerifyEvent) -// */ -// protected void handleVerifyEvent(VerifyEvent e) { -// ConsoleDocument doc= (ConsoleDocument)getDocument(); -// if (doc != null) { -// if (doc.isReadOnly()) { -// e.doit = false; -// return; -// } -// IDocumentPartitioner partitioner = doc.getDocumentPartitioner(); -// if (partitioner != null) { -// int length = doc.getLength(); -// ITypedRegion[] partitions = partitioner.computePartitioning(length, 0); -// if (partitions.length == 0) { -// } else { -// ITypedRegion partition = partitions[partitions.length - 1]; -// if (partition.getType().equals(InputPartition.INPUT_PARTITION_TYPE)) { -// // > 1 char in the input buffer -// e.doit = (e.start >= partition.getOffset()) && (e.end <= (partition.getLength() + partition.getOffset())); -// } else { -// // first character in the input buffer -// e.doit = length == e.start; -// } -// } -// } -// } -// } -// -// /** -// * @see org.eclipse.swt.events.MouseTrackListener#mouseEnter(org.eclipse.swt.events.MouseEvent) -// */ -// public void mouseEnter(MouseEvent e) { -// getTextWidget().addMouseMoveListener(this); -// } -// -// /** -// * @see org.eclipse.swt.events.MouseTrackListener#mouseExit(org.eclipse.swt.events.MouseEvent) -// */ -// public void mouseExit(MouseEvent e) { -// getTextWidget().removeMouseMoveListener(this); -// if (fHyperLink != null) { -// linkExited(fHyperLink); -// } -// } -// -// /** -// * @see org.eclipse.swt.events.MouseTrackListener#mouseHover(org.eclipse.swt.events.MouseEvent) -// */ -// public void mouseHover(MouseEvent e) { -// } -// -// /** -// * @see org.eclipse.swt.events.MouseMoveListener#mouseMove(org.eclipse.swt.events.MouseEvent) -// */ -// public void mouseMove(MouseEvent e) { -// int offset = -1; -// try { -// Point p = new Point(e.x, e.y); -// offset = getTextWidget().getOffsetAtLocation(p); -// } catch (IllegalArgumentException ex) { -// // out of the document range -// } -// updateLinks(offset); -// } -// -// public IConsoleHyperlink getHyperlink(int offset) { -// if (offset >= 0 && getDocument() != null) { -// Position[] positions = null; -// try { -// positions = getDocument().getPositions(HyperlinkPosition.HYPER_LINK_CATEGORY); -// } catch (BadPositionCategoryException ex) { -// // no links have been added -// return null; -// } -// for (int i = 0; i < positions.length; i++) { -// Position position = positions[i]; -// if (offset >= position.getOffset() && offset <= (position.getOffset() + position.getLength())) { -// return ((HyperlinkPosition)position).getHyperLink(); -// } -// } -// } -// return null; -// } -// -// protected void linkEntered(IConsoleHyperlink link) { -// Control control = getTextWidget(); -// control.setRedraw(false); -// if (fHyperLink != null) { -// linkExited(fHyperLink); -// } -// fHyperLink = link; -// fHyperLink.linkEntered(); -// control.setCursor(getHandCursor()); -// control.setRedraw(true); -// control.redraw(); -// control.addMouseListener(this); -// } -// -// protected void linkExited(IConsoleHyperlink link) { -// link.linkExited(); -// fHyperLink = null; -// Control control = getTextWidget(); -// control.setCursor(getTextCursor()); -// control.redraw(); -// control.removeMouseListener(this); -// } -// /** -// * @see org.eclipse.swt.events.PaintListener#paintControl(org.eclipse.swt.events.PaintEvent) -// */ -// public void paintControl(PaintEvent e) { -// if (fHyperLink != null) { -// IDocument doc = getDocument(); -// if (doc == null) { -// return; -// } -// ConsoleDocumentPartitioner partitioner = (ConsoleDocumentPartitioner)doc.getDocumentPartitioner(); -// if (partitioner == null) { -// return; -// } -// IRegion linkRegion = partitioner.getRegion(fHyperLink); -// if (linkRegion != null) { -// int start = linkRegion.getOffset(); -// int end = start + linkRegion.getLength(); -// IConsoleColorProvider colorProvider = partitioner.getColorProvider(); -// try { -// ITypedRegion partition = doc.getPartition(start); -// Color fontColor = e.gc.getForeground(); -// if (partition instanceof StreamPartition) { -// StreamPartition streamPartition = (StreamPartition)partition; -// fontColor = colorProvider.getColor(streamPartition.getStreamIdentifier()); -// } -// int startLine = doc.getLineOfOffset(start); -// int endLine = doc.getLineOfOffset(end); -// for (int i = startLine; i <= endLine; i++) { -// IRegion lineRegion = doc.getLineInformation(i); -// int lineStart = lineRegion.getOffset(); -// int lineEnd = lineStart + lineRegion.getLength(); -// Color color = e.gc.getForeground(); -// e.gc.setForeground(fontColor); -// if (lineStart < end) { -// lineStart = Math.max(start, lineStart); -// lineEnd = Math.min(end, lineEnd); -// Point p1 = getTextWidget().getLocationAtOffset(lineStart); -// Point p2 = getTextWidget().getLocationAtOffset(lineEnd); -// FontMetrics metrics = e.gc.getFontMetrics(); -// int height = metrics.getHeight(); -// e.gc.drawLine(p1.x, p1.y + height, p2.x, p2.y + height); -// } -// e.gc.setForeground(color); -// } -// } catch (BadLocationException ex) { -// } -// } -// } -// } -// -// protected Cursor getHandCursor() { -// if (fHandCursor == null) { -// fHandCursor = new Cursor(DebugUIPlugin.getStandardDisplay(), SWT.CURSOR_HAND); -// } -// return fHandCursor; -// } -// -// protected Cursor getTextCursor() { -// if (fTextCursor == null) { -// fTextCursor = new Cursor(DebugUIPlugin.getStandardDisplay(), SWT.CURSOR_IBEAM); -// } -// return fTextCursor; -// } -// -// /** -// * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick(org.eclipse.swt.events.MouseEvent) -// */ -// public void mouseDoubleClick(MouseEvent e) { -// } -// -// /** -// * @see org.eclipse.swt.events.MouseListener#mouseDown(org.eclipse.swt.events.MouseEvent) -// */ -// public void mouseDown(MouseEvent e) { -// } -// -// /** -// * @see org.eclipse.swt.events.MouseListener#mouseUp(org.eclipse.swt.events.MouseEvent) -// */ -// public void mouseUp(MouseEvent e) { -// if (fHyperLink != null) { -// String selection = getTextWidget().getSelectionText(); -// if (selection.length() <= 0) { -// if (e.button == 1) { -// fHyperLink.linkActivated(); -// } -// } -// } -// } -// -// /** -// * @see org.eclipse.swt.custom.LineStyleListener#lineGetStyle(org.eclipse.swt.custom.LineStyleEvent) -// */ -// public void lineGetStyle(LineStyleEvent event) { -// IDocument document = getDocument(); -// if (document != null) { -// ConsoleDocumentPartitioner partitioner = (ConsoleDocumentPartitioner)document.getDocumentPartitioner(); -// if (partitioner != null) { -// IConsoleColorProvider colorProvider = partitioner.getColorProvider(); -// ITypedRegion[] regions = partitioner.computePartitioning(event.lineOffset, event.lineOffset + event.lineText.length()); -// StyleRange[] styles = new StyleRange[regions.length]; -// for (int i = 0; i < regions.length; i++) { -// StreamPartition partition = (StreamPartition)regions[i]; -// Color color = colorProvider.getColor(partition.getStreamIdentifier()); -// styles[i] = new StyleRange(partition.getOffset(), partition.getLength(), color, null); -// } -// event.styles = styles; -// } -// } -// } -// -// /** -// * Sets whether this viewer should auto-scroll as output is appended to the -// * document. -// * -// * @param scroll -// */ -// public void setAutoScroll(boolean scroll) { -// fAutoScroll = scroll; -// } -// -// /** -// * Returns whether this viewer should auto-scroll as output is appended to -// * the document. -// */ -// public boolean isAutoScroll() { -// return fAutoScroll; -// } -// -// /** -// * On KeyUp events, see if we need to enter/exit a link. -// * -// * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) -// */ -// public void handleEvent(Event event) { -// int offset = getTextWidget().getCaretOffset(); -// updateLinks(offset); -// } -// -// /** -// * The cursor has just be moved to the given offset, the mouse has -// * hovered over the given offset. Update link rendering. -// * -// * @param offset -// */ -// protected void updateLinks(int offset) { -// if (offset >= 0) { -// IConsoleHyperlink link = getHyperlink(offset); -// if (link != null) { -// if (link.equals(fHyperLink)) { -// return; -// } -// linkEntered(link); -// return; -// } -// } -// if (fHyperLink != null) { -// linkExited(fHyperLink); -// } -// } -// -//} -// diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/HyperlinkPosition.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/HyperlinkPosition.java deleted file mode 100644 index 1d2dce43f..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/HyperlinkPosition.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.views.console; - - -import org.eclipse.debug.internal.ui.DebugUIPlugin; -import org.eclipse.debug.ui.console.IConsoleHyperlink; -import org.eclipse.jface.text.Position; - -/** - */ -public class HyperlinkPosition extends Position { - - public static final String HYPER_LINK_CATEGORY = DebugUIPlugin.getUniqueIdentifier() + ".HYPER_LINK"; //$NON-NLS-1$ - - private IConsoleHyperlink fLink = null; - - /** - * - */ - public HyperlinkPosition(IConsoleHyperlink link, int offset, int length) { - super(offset, length); - fLink = link; - } - - public IConsoleHyperlink getHyperLink() { - return fLink; - } - - /** - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object arg) { - return arg instanceof HyperlinkPosition && super.equals(arg) && getHyperLink().equals(((HyperlinkPosition)arg).getHyperLink()); - } - - /** - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return super.hashCode() + getHyperLink().hashCode(); - } - -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/InputPartition.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/InputPartition.java deleted file mode 100644 index 3d6f8f045..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/InputPartition.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.views.console; - - -import org.eclipse.debug.internal.ui.DebugUIPlugin; - -/** - * A partition in a console document that contains input from the keyboard. - */ -public class InputPartition extends StreamPartition { - - /** - * Once an input partition has been written to standard-in, it cannot - * be modified. - */ - private boolean fReadOnly = false; - - /** - * Partition type - */ - public static final String INPUT_PARTITION_TYPE = DebugUIPlugin.getUniqueIdentifier() + ".INPUT_PARTITION_TYPE"; //$NON-NLS-1$ - - - public InputPartition(String streamIdentifier, int offset, int length) { - super(streamIdentifier, offset, length, INPUT_PARTITION_TYPE); - } - - /** - * @see org.eclipse.debug.internal.ui.views.console.StreamPartition#createNewPartition(String, int, int) - */ - public StreamPartition createNewPartition(String streamIdentifier, int offset, int length) { - return new InputPartition(streamIdentifier, offset, length); - } - - /** - * Sets whether this partition is read-only. - * - * @param readOnly whether this partition is read-only - */ - public void setReadOnly(boolean readOnly) { - fReadOnly = readOnly; - } - - /** - * Returns whether this partition is read-only. - * - * @return whether this partition is read-only - */ - public boolean isReadOnly() { - return fReadOnly; - } - - /** - * Returns whether this partition is allowed to be combined with the - * given partition. Once read-only, this partition cannot be combined. - * - * @param partition - * @return boolean - */ - public boolean canBeCombinedWith(StreamPartition partition) { - return (!isReadOnly() && super.canBeCombinedWith(partition)); - } -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/OutputPartition.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/OutputPartition.java deleted file mode 100644 index ed8ad1f12..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/OutputPartition.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.views.console; - - -import org.eclipse.debug.internal.ui.DebugUIPlugin; - -/** - * A partition in a console document that contains output from a process. - */ -public class OutputPartition extends StreamPartition { - - /** - * Partition type - */ - public static final String OUTPUT_PARTITION_TYPE = DebugUIPlugin.getUniqueIdentifier() + ".OUTPUT_PARTITION_TYPE"; //$NON-NLS-1$ - - - public OutputPartition(String streamIdentifier, int offset, int length) { - super(streamIdentifier, offset, length, OUTPUT_PARTITION_TYPE); - } - - /** - * @see org.eclipse.debug.internal.ui.views.console.StreamPartition#createNewPartition(String, int, int) - */ - public StreamPartition createNewPartition(String streamIdetifier, int offset, int length) { - return new OutputPartition(streamIdetifier, offset, length); - } -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsole.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsole.java index d69b03d6f..2407b15dc 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsole.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsole.java @@ -47,11 +47,10 @@ import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.ui.console.ConsolePlugin; -import org.eclipse.ui.console.IConsoleView; +import org.eclipse.ui.console.IHyperlink; import org.eclipse.ui.console.IOConsole; import org.eclipse.ui.console.IOConsoleInputStream; import org.eclipse.ui.console.IOConsoleOutputStream; -import org.eclipse.ui.part.IPageBookViewPage; /** * A console for a system process @@ -62,18 +61,17 @@ import org.eclipse.ui.part.IPageBookViewPage; * @since 3.0 */ public class ProcessConsole extends IOConsole implements IConsole, IDebugEventSetListener, IPropertyChangeListener { - private IProcess fProcess = null; private List streamListeners = new ArrayList(); private IConsoleColorProvider fColorProvider; private IOConsoleInputStream in; - private ConsoleLineNotifier fLineNotifier; + /** * Proxy to a console document */ public ProcessConsole(IProcess process, IConsoleColorProvider colorProvider) { - super("", null); //$NON-NLS-1$ + super("", IDebugUIConstants.ID_PROCESS_CONSOLE_TYPE, null); //$NON-NLS-1$ fProcess = process; fColorProvider = colorProvider; @@ -87,14 +85,6 @@ public class ProcessConsole extends IOConsole implements IConsole, IDebugEventSe in.setColor(color); } - - - /* (non-Javadoc) - * @see org.eclipse.ui.console.IConsole#createPage(org.eclipse.ui.console.IConsoleView) - */ - public IPageBookViewPage createPage(IConsoleView view) { - return new ProcessConsolePage(view, this); - } /** * Computes and returns the image descriptor for this console. @@ -245,6 +235,8 @@ public class ProcessConsole extends IOConsole implements IConsole, IDebugEventSe protected void dispose() { super.dispose(); + fColorProvider.disconnect(); + synchronized(streamListeners) { for(Iterator i = streamListeners.iterator(); i.hasNext(); ) { StreamListener listener = (StreamListener) i.next(); @@ -281,36 +273,27 @@ public class ProcessConsole extends IOConsole implements IConsole, IDebugEventSe * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[]) */ public void handleDebugEvents(DebugEvent[] events) { - for (int i = 0; i < events.length; i++) { - DebugEvent event = events[i]; - if (event.getSource().equals(getProcess())) { - - if (event.getKind() == DebugEvent.TERMINATE) { - setFinished(); - DebugPlugin.getDefault().removeDebugEventListener(this); - } - - Runnable r = new Runnable() { - public void run() { - setName(computeName()); - warnOfContentChange(); - } - }; - DebugUIPlugin.getStandardDisplay().asyncExec(r); - } - } - } - - /* (non-Javadoc) - * @see org.eclipse.ui.console.IOConsole#partitionerFinished() - */ - public void partitionerFinished() { - super.partitionerFinished(); - if (fLineNotifier != null) { - fLineNotifier.streamsClosed(); + for (int i = 0; i < events.length; i++) { + DebugEvent event = events[i]; + if (event.getSource().equals(getProcess())) { + + if (event.getKind() == DebugEvent.TERMINATE) { + setFinished(); + DebugPlugin.getDefault().removeDebugEventListener(this); + } + + Runnable r = new Runnable() { + public void run() { + setName(computeName()); + warnOfContentChange(); + } + }; + DebugUIPlugin.getStandardDisplay().asyncExec(r); + } } } + private void warnOfContentChange() { ConsolePlugin.getDefault().getConsoleManager().warnOfContentChange(DebugUITools.getConsole(fProcess)); } @@ -360,6 +343,16 @@ public class ProcessConsole extends IOConsole implements IConsole, IDebugEventSe } } + /* (non-Javadoc) + * @see org.eclipse.debug.ui.console.IConsole#addLink(org.eclipse.ui.console.IHyperlink, int, int) + */ + public void addLink(IHyperlink link, int offset, int length) { + try { + addHyperlink(link, offset, length); + } catch (BadLocationException e) { + DebugUIPlugin.log(e); + } + } /* (non-Javadoc) * @see org.eclipse.debug.ui.console.IConsole#getRegion(org.eclipse.debug.ui.console.IConsoleHyperlink) @@ -435,17 +428,4 @@ public class ProcessConsole extends IOConsole implements IConsole, IDebugEventSe return Status.OK_STATUS; } } - - - /** - * @param lineNotifier - */ - public void setLineNotifier(ConsoleLineNotifier lineNotifier) { - fLineNotifier = lineNotifier; - fLineNotifier.connect(this); - if (fProcess.isTerminated()) { - setFinished(); - } - } - } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsoleManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsoleManager.java index 30884a499..094c6c8ec 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsoleManager.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsoleManager.java @@ -50,7 +50,8 @@ public class ProcessConsoleManager implements ILaunchListener { private Map fColorProviders; /** - * + * The default color provider. Used if no color provider is contributed + * for the given process type. */ private IConsoleColorProvider fDefaultColorProvider; @@ -92,11 +93,6 @@ public class ProcessConsoleManager implements ILaunchListener { private void removeProcess(IProcess iProcess) { IConsole console = getConsole(iProcess); - ConsoleLineNotifier lineNotifier = getLineNotifier(iProcess); - if (lineNotifier != null) { - lineNotifier.disconnect(); - } - if (console != null) { IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager(); manager.removeConsoles(new IConsole[]{console}); @@ -141,14 +137,13 @@ public class ProcessConsoleManager implements ILaunchListener { for (int i= 0; i < processes.length; i++) { if (getConsoleDocument(processes[i]) == null) { IProcess process = processes[i]; + if (process.getStreamsProxy() == null) { + continue; + } //create a new console. IConsoleColorProvider colorProvider = getColorProvider(process.getAttribute(IProcess.ATTR_PROCESS_TYPE)); ProcessConsole pc = new ProcessConsole(process, colorProvider); - //connect Line Notifier - ConsoleLineNotifier lineNotifier = getLineNotifier(process); - if(lineNotifier != null) { - pc.setLineNotifier(lineNotifier); - } + pc.setAttribute(IDebugUIConstants.ATTR_CONSOLE_PROCESS, process); //add new console to console manager. ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{pc}); } @@ -275,30 +270,14 @@ public class ProcessConsoleManager implements ILaunchListener { return fDefaultColorProvider; } - /** - * Returns the line notifier for this console, or <code>null</code> if none. - * - * @param process - * @return line notifier, or <code>null</code> + * Returns the Line Trackers for a given process type. + * @param process The process for which line trackers are required. + * @return An array of line trackers which match the given process type. */ - protected ConsoleLineNotifier getLineNotifier(IProcess process) { + public IConsoleLineTracker[] getLineTrackers(IProcess process) { String type = process.getAttribute(IProcess.ATTR_PROCESS_TYPE); - if (type != null) { - return newLineNotifier(type); - } - return null; - } - - /** - * Creates and retuns a new line notifier for the given type of process, or - * <code>null</code> if none. The notifier will be seeded with new console - * line listeners registered for the given process type. - * - * @param type process type - * @return line notifier or <code>null</code> - */ - public ConsoleLineNotifier newLineNotifier(String type) { + if (fLineTrackers == null) { fLineTrackers = new HashMap(); IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugUIPlugin.getUniqueIdentifier(), IDebugUIConstants.EXTENSION_POINT_CONSOLE_LINE_TRACKERS); @@ -314,26 +293,22 @@ public class ProcessConsoleManager implements ILaunchListener { list.add(extension); } } - List extensions = (List)fLineTrackers.get(type); - ConsoleLineNotifier lineNotifier = null; - if (extensions != null) { - lineNotifier = new ConsoleLineNotifier(); - Iterator iter = extensions.iterator(); - while (iter.hasNext()) { - IConfigurationElement extension = (IConfigurationElement)iter.next(); - try { - Object tracker = extension.createExecutableExtension("class"); //$NON-NLS-1$ - if (tracker instanceof IConsoleLineTracker) { - lineNotifier.addConsoleListener((IConsoleLineTracker)tracker); - } else { - DebugUIPlugin.logErrorMessage(MessageFormat.format(ConsoleMessages.getString("ConsoleDocumentManager.2"),new String[]{extension.getDeclaringExtension().getUniqueIdentifier()})); //$NON-NLS-1$ - } - } catch (CoreException e) { - DebugUIPlugin.log(e); - } - } + + ArrayList trackers = new ArrayList(); + if (type != null) { + List lineTrackerExtensions = (List) fLineTrackers.get(type); + if(lineTrackerExtensions != null) { + for(Iterator i = lineTrackerExtensions.iterator(); i.hasNext(); ) { + IConfigurationElement element = (IConfigurationElement) i.next(); + try { + trackers.add(element.createExecutableExtension("class")); //$NON-NLS-1$ + } catch (CoreException e) { + DebugUIPlugin.log(e); + } + } + } } - return lineNotifier; + return (IConsoleLineTracker[]) trackers.toArray(new IConsoleLineTracker[0]); } /** diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsolePage.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsolePage.java deleted file mode 100644 index 7c7c6f3a0..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsolePage.java +++ /dev/null @@ -1,199 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.views.console; - -import org.eclipse.debug.core.DebugEvent; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IDebugEventSetListener; -import org.eclipse.debug.core.model.IDebugTarget; -import org.eclipse.debug.core.model.IProcess; -import org.eclipse.debug.internal.ui.DebugUIPlugin; -import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; -import org.eclipse.debug.ui.DebugUITools; -import org.eclipse.debug.ui.IDebugUIConstants; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.ISelectionListener; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.console.IConsoleConstants; -import org.eclipse.ui.console.IConsoleView; -import org.eclipse.ui.internal.console.IOConsolePage; -import org.eclipse.ui.part.IShowInSource; -import org.eclipse.ui.part.IShowInTargetList; -import org.eclipse.ui.part.ShowInContext; - -/** - * A page for a console connected to I/O streams of a process - * - * @since 3.0 - */ -public class ProcessConsolePage extends IOConsolePage implements IShowInSource, IShowInTargetList, IDebugEventSetListener, ISelectionListener { - - // scroll lock - private boolean fIsLocked = DebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IInternalDebugUIConstants.PREF_CONSOLE_SCROLL_LOCK); - - // actions - private ConsoleTerminateAction fTerminate; - private ConsoleRemoveAllTerminatedAction fRemoveTerminated; - - - - /** - * Constructs a new process page - */ - public ProcessConsolePage(IConsoleView view, ProcessConsole console) { - super(console, view); - setAutoScroll(!fIsLocked); - } - - - /* (non-Javadoc) - * @see org.eclipse.ui.part.IPage#createControl(org.eclipse.swt.widgets.Composite) - */ - public void createControl(Composite parent) { - super.createControl(parent); - getSite().getPage().addSelectionListener(IDebugUIConstants.ID_DEBUG_VIEW, this); - } - - /** - * Fill the context menu - * - * @param menu menu - */ - protected void contextMenuAboutToShow(IMenuManager menu) { - super.contextMenuAboutToShow(menu); - menu.add(fTerminate); - - } - - /* (non-Javadoc) - * @see org.eclipse.ui.part.IPage#dispose() - */ - public void dispose() { - super.dispose(); - DebugPlugin.getDefault().removeDebugEventListener(this); - getSite().getPage().removeSelectionListener(IDebugUIConstants.ID_DEBUG_VIEW, this); - - if (fRemoveTerminated != null) { - fRemoveTerminated.dispose(); - } - } - - protected void createActions() { - super.createActions(); - fRemoveTerminated = new ConsoleRemoveAllTerminatedAction(); - ProcessConsole console = (ProcessConsole) getConsole(); - fTerminate = new ConsoleTerminateAction(console); - DebugPlugin.getDefault().addDebugEventListener(this); - } - - - protected void configureToolBar(IToolBarManager mgr) { - super.configureToolBar(mgr); - mgr.appendToGroup(IConsoleConstants.LAUNCH_GROUP, fTerminate); - mgr.appendToGroup(IConsoleConstants.LAUNCH_GROUP, fRemoveTerminated); - } - - /** - * Returns the process associated with this page - * - * @return the process associated with this page - */ - protected IProcess getProcess() { - return ((ProcessConsole)getConsole()).getProcess(); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) - */ - public void selectionChanged(IWorkbenchPart part, ISelection selection) { - if (getProcess().equals(DebugUITools.getCurrentProcess())) { - getConsoleView().display(getConsole()); - } - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - public Object getAdapter(Class required) { - Object adapter = super.getAdapter(required); - if (adapter == null) { - if (IShowInSource.class.equals(required)) { - return this; - } - if (IShowInTargetList.class.equals(required)) { - return this; - } - } - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.part.IShowInSource#getShowInContext() - */ - public ShowInContext getShowInContext() { - IProcess process = getProcess(); - if (process == null) { - return null; - } - IDebugTarget target = (IDebugTarget)process.getAdapter(IDebugTarget.class); - ISelection selection = null; - if (target == null) { - selection = new StructuredSelection(process); - } else { - selection = new StructuredSelection(target); - } - return new ShowInContext(null, selection); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.part.IShowInTargetList#getShowInTargetIds() - */ - public String[] getShowInTargetIds() { - return new String[] {IDebugUIConstants.ID_DEBUG_VIEW}; - } - - /** - * Update terminate action. - * - * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[]) - */ - public void handleDebugEvents(DebugEvent[] events) { - for (int i = 0; i < events.length; i++) { - DebugEvent event = events[i]; - if (event.getSource().equals(getProcess())) { - Runnable r = new Runnable() { - public void run() { - if (isAvailable()) { - fTerminate.update(); - } - } - }; - if (isAvailable()) { - getControl().getDisplay().asyncExec(r); - } - } - } - } - - /** - * Returns whether this page's controls are available. - * - * @return whether this page's controls are available - */ - protected boolean isAvailable() { - return getControl() != null; - } - -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ScrollLockAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ScrollLockAction.java deleted file mode 100644 index c42f199ef..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ScrollLockAction.java +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.views.console; - - -import org.eclipse.debug.internal.ui.DebugPluginImages; -import org.eclipse.debug.internal.ui.DebugUIPlugin; -import org.eclipse.debug.internal.ui.IDebugHelpContextIds; -import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; -import org.eclipse.debug.internal.ui.actions.ActionMessages; -import org.eclipse.debug.ui.IDebugUIConstants; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.ui.help.WorkbenchHelp; - -/** - * Toggles console auto-scroll - */ -public class ScrollLockAction extends Action implements IPropertyChangeListener { - - private IPreferenceStore fStore = DebugUIPlugin.getDefault().getPreferenceStore(); - - public ScrollLockAction() { - super(ActionMessages.getString("ScrollLockAction.Scroll_Lock_1")); //$NON-NLS-1$ - setToolTipText(ActionMessages.getString("ScrollLockAction.Scroll_Lock_1")); //$NON-NLS-1$ - setHoverImageDescriptor(DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_LCL_LOCK)); - setDisabledImageDescriptor(DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_LOCK)); - setImageDescriptor(DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_LOCK)); - WorkbenchHelp.setHelp( - this, - IDebugHelpContextIds.CONSOLE_SCROLL_LOCK_ACTION); - setChecked(DebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IInternalDebugUIConstants.PREF_CONSOLE_SCROLL_LOCK)); - fStore.addPropertyChangeListener(this); - } - - /** - * @see org.eclipse.jface.action.IAction#run() - */ - public void run() { - fStore.setValue(IInternalDebugUIConstants.PREF_CONSOLE_SCROLL_LOCK, isChecked()); - } - - public void dispose() { - fStore.removePropertyChangeListener(this); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) - */ - public void propertyChange(PropertyChangeEvent event) { - if (event.getProperty().equals(IInternalDebugUIConstants.PREF_CONSOLE_SCROLL_LOCK)) { - setChecked(fStore.getBoolean(IInternalDebugUIConstants.PREF_CONSOLE_SCROLL_LOCK)); - } - - } -} - diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/StreamPartition.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/StreamPartition.java deleted file mode 100644 index b1212445e..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/StreamPartition.java +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.views.console; - - -import org.eclipse.jface.text.TypedRegion; - -/** - * A partition from an input/output stream connected to the console. - */ -public abstract class StreamPartition extends TypedRegion { - - /** - * Stream identifier - */ - private String fStreamIdentifier; - - public StreamPartition(String streamIdentifier, int offset, int length, String type) { - super(offset, length, type); - fStreamIdentifier = streamIdentifier; - } - - - /** - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object partition) { - if (super.equals(partition)) { - fStreamIdentifier.equals(((StreamPartition)partition).getStreamIdentifier()); - } - return false; - } - - /** - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return super.hashCode() + fStreamIdentifier.hashCode(); - } - - /** - * Returns this partition's stream identifier - * - * @return this partition's stream identifier - */ - public String getStreamIdentifier() { - return fStreamIdentifier; - } - - /** - * Returns whether this partition is allowed to be combined with the - * given partition. - * - * @param partition - * @return boolean - */ - public boolean canBeCombinedWith(StreamPartition partition) { - int start = getOffset(); - int end = start + getLength(); - int otherStart = partition.getOffset(); - int otherEnd = otherStart + partition.getLength(); - boolean overlap = (otherStart >= start && otherStart <= end) || (start >= otherStart && start <= otherEnd); - return overlap && getType().equals(partition.getType()) && getStreamIdentifier().equals(partition.getStreamIdentifier()); - } - - /** - * Returns a new partition representing this and the given parition - * combined. - * - * @param partition - * @return partition - */ - public StreamPartition combineWith(StreamPartition partition) { - int start = getOffset(); - int end = start + getLength(); - int otherStart = partition.getOffset(); - int otherEnd = otherStart + partition.getLength(); - int theStart = Math.min(start, otherStart); - int theEnd = Math.max(end, otherEnd); - return createNewPartition(getStreamIdentifier(), theStart, theEnd - theStart); - } - - /** - * Creates a new patition of this type with the given color, offset, - * and length. - * - * @param streamIdentifer - * @param offset - * @param length - * @return ColorPartition - */ - public abstract StreamPartition createNewPartition(String streamIdentifier, int offset, int length); -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/WorkspaceOperationRunner.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/WorkspaceOperationRunner.java deleted file mode 100644 index e8a97abf9..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/WorkspaceOperationRunner.java +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.debug.internal.ui.views.console; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.jobs.ISchedulingRule; - -import org.eclipse.jface.operation.IRunnableContext; -import org.eclipse.jface.operation.IRunnableWithProgress; - -import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation; -import org.eclipse.ui.texteditor.ISchedulingRuleProvider; - -/** - * @since 3.0 - */ -class WorkspaceOperationRunner implements IRunnableContext { - - private IProgressMonitor fProgressMonitor; - - public WorkspaceOperationRunner() { - } - - /** - * Sets the progress monitor. - * - * @param progressMonitor the progress monitor to set - */ - public void setProgressMonitor(IProgressMonitor progressMonitor) { - fProgressMonitor= progressMonitor; - } - - /** - * Returns the progress monitor. It there is no progress monitor the monitor\ - * is set to the <code>NullProgressMonitor</code>. - * - * @return the progress monitor - */ - public IProgressMonitor getProgressMonitor() { - if (fProgressMonitor == null) - fProgressMonitor= new NullProgressMonitor(); - return fProgressMonitor; - } - - /* - * @see org.eclipse.jface.operation.IRunnableContext#run(boolean, boolean, org.eclipse.jface.operation.IRunnableWithProgress) - */ - public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException { - if (runnable instanceof ISchedulingRuleProvider) - run(fork, cancelable, runnable, ((ISchedulingRuleProvider)runnable).getSchedulingRule()); - else - run(fork, cancelable, runnable, ResourcesPlugin.getWorkspace().getRoot()); - } - - /* - * @see org.eclipse.jface.operation.IRunnableContext#run(boolean, boolean, org.eclipse.jface.operation.IRunnableWithProgress) - */ - public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable, ISchedulingRule schedulingRule) throws InvocationTargetException, InterruptedException { - WorkspaceModifyDelegatingOperation operation= new WorkspaceModifyDelegatingOperation(runnable, schedulingRule); - operation.run(getProgressMonitor()); - } -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/PopupInformationControl.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/PopupInformationControl.java index d3b6be930..b0580bf86 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/PopupInformationControl.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/PopupInformationControl.java @@ -21,7 +21,6 @@ import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.text.IInformationControl; import org.eclipse.jface.text.IInformationControlExtension; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.graphics.Color; @@ -121,12 +120,6 @@ public abstract class PopupInformationControl implements IInformationControl, II shell.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND)); shell.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); - addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - dispose(); - } - }); - GridLayout layout= new GridLayout(1, false); layout.marginHeight= 0; layout.marginWidth= 0; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryBlockViewSynchronizer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryBlockViewSynchronizer.java index c9b51ef12..ce83f5b5d 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryBlockViewSynchronizer.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryBlockViewSynchronizer.java @@ -167,11 +167,11 @@ public class MemoryBlockViewSynchronizer implements IMemoryBlockViewSynchronizer { if (fSynchronizeInfo != null) { - Enumeration enum = fSynchronizeInfo.elements(); + Enumeration enumeration = fSynchronizeInfo.elements(); // clean up all synchronize info objects - while (enum.hasMoreElements()){ - SynchronizeInfo info = (SynchronizeInfo)enum.nextElement(); + while (enumeration.hasMoreElements()){ + SynchronizeInfo info = (SynchronizeInfo)enumeration.nextElement(); info.delete(); } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryView.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryView.java index fd19f7526..b8aa799a9 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryView.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryView.java @@ -561,10 +561,10 @@ public class MemoryView extends PageBookView implements IDebugView, IMemoryBlock // find memory from other folder and dispose the view tab if (!foundTab) { - Enumeration enum = tabFolderHashtable.elements(); - while (enum.hasMoreElements()) + Enumeration enumeration = tabFolderHashtable.elements(); + while (enumeration.hasMoreElements()) { - tabFolder = (TabFolder) enum.nextElement(); + tabFolder = (TabFolder) enumeration.nextElement(); tabs = tabFolder.getItems(); IMemoryViewTab viewTab = null; for (int i = 0; i < tabs.length; i++) @@ -629,11 +629,11 @@ public class MemoryView extends PageBookView implements IDebugView, IMemoryBlock try { if (tabFolderHashtable != null) { - Enumeration enum = tabFolderHashtable.elements(); + Enumeration enumeration = tabFolderHashtable.elements(); - while (enum.hasMoreElements()) + while (enumeration.hasMoreElements()) { - TabFolder tabFolder = (TabFolder)enum.nextElement(); + TabFolder tabFolder = (TabFolder)enumeration.nextElement(); if (tabFolder.isDisposed()) continue; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewContentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewContentProvider.java index db8d595b5..6dbf9cb5a 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewContentProvider.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewContentProvider.java @@ -767,11 +767,11 @@ public class MemoryViewContentProvider extends BasicDebugViewContentProvider { */ public void resetDeltas() { - Enumeration enum = contentCache.elements(); + Enumeration enumeration = contentCache.elements(); - while (enum.hasMoreElements()) + while (enumeration.hasMoreElements()) { - MemoryViewLine line = (MemoryViewLine)enum.nextElement(); + MemoryViewLine line = (MemoryViewLine)enumeration.nextElement(); line.unmarkDeltas(); } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/SynchronizeInfo.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/SynchronizeInfo.java index f78e8953e..269e1b430 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/SynchronizeInfo.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/SynchronizeInfo.java @@ -216,11 +216,11 @@ public class SynchronizeInfo Object value = fProperties.get(propertyId); if (value != null) { - Enumeration enum = fPropertyListeners.elements(); + Enumeration enumeration = fPropertyListeners.elements(); - while(enum.hasMoreElements()) + while(enumeration.hasMoreElements()) { - PropertyListener listener = (PropertyListener)enum.nextElement(); + PropertyListener listener = (PropertyListener)enumeration.nextElement(); ISynchronizedMemoryBlockView view = listener.getView(); diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java index 6f28597fd..1db945a07 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java @@ -112,7 +112,12 @@ public interface IDebugUIConstants { * Debug perspective identifier (value <code>"org.eclipse.debug.ui.DebugPerspective"</code>). */ public static final String ID_DEBUG_PERSPECTIVE = PLUGIN_ID + ".DebugPerspective"; //$NON-NLS-1$ - + + /** + * Console type identifier (value <code>"org.eclipse.debug.ui.ProcessConsoleType"</code>). + */ + public static final String ID_PROCESS_CONSOLE_TYPE = PLUGIN_ID + ".ProcessConsoleType"; //$NON-NLS-1$ + /** * Constant for referring to no perspective. */ @@ -792,6 +797,13 @@ public interface IDebugUIConstants { */ public static final String ATTR_LAUNCH_IN_BACKGROUND = PLUGIN_ID + ".ATTR_LAUNCH_IN_BACKGROUND"; //$NON-NLS-1$ + /** + * ProcessConsole attribute - references the process that was launched. + * + * @since 3.1 + */ + public static final String ATTR_CONSOLE_PROCESS = PLUGIN_ID + ".ATTR_CONSOLE_PROCESS"; //$NON-NLS-1$ + // Extension points /** diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchToolbarAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchToolbarAction.java index e5668c420..b4c310c3c 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchToolbarAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchToolbarAction.java @@ -14,7 +14,6 @@ package org.eclipse.debug.ui.actions; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.launchConfigurations.OrganizeFavoritesAction; -import org.eclipse.debug.internal.ui.preferences.DebugWorkInProgressPreferencePage; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.StructuredSelection; @@ -54,16 +53,15 @@ public class AbstractLaunchToolbarAction extends AbstractLaunchHistoryAction { addSeparator(menu); } - // TODO: work in progress cleanup - if (DebugUIPlugin.getDefault().getPluginPreferences().getBoolean(DebugWorkInProgressPreferencePage.WIP_PREF_CONTEXT_LAUNCH)) { - addToMenu(menu, new LaunchShortcutsAction(getLaunchGroupIdentifier()), -1); - } else { - addToMenu(menu, new LaunchAsAction(getLaunchGroupIdentifier()), -1); - addToMenu(menu, new OpenLaunchDialogAction(getLaunchGroupIdentifier()), -1); - } + addToMenu(menu, new LaunchShortcutsAction(getLaunchGroupIdentifier()), -1); + addToMenu(menu, getOpenDialogAction(), -1); addToMenu(menu, new OrganizeFavoritesAction(getLaunchGroupIdentifier()), -1); } + protected IAction getOpenDialogAction() { + return new OpenLaunchDialogAction(getLaunchGroupIdentifier()); + } + /** * Launch the last launch, or open the launch config dialog if none. * diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchAsAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchAsAction.java index ec4562a25..2627d3651 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchAsAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchAsAction.java @@ -44,6 +44,9 @@ import org.eclipse.ui.help.WorkbenchHelp; * launch group. * * @since 2.1 + * @deprecated The use of perspective based launch shorcuts has been deprecated + * in the 3.1 release. Instead, selection sensitive launch is supported in the top level + * menus. Use <code>LaunchShorcutsAction</code> instead. */ public class LaunchAsAction extends Action implements IMenuCreator, IWorkbenchWindowPulldownDelegate2 { diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchShortcutsAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchShortcutsAction.java index bcac9af53..c84852364 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchShortcutsAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchShortcutsAction.java @@ -22,6 +22,7 @@ import org.eclipse.core.expressions.Expression; import org.eclipse.core.expressions.IEvaluationContext; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.actions.LaunchShortcutAction; import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager; @@ -66,6 +67,11 @@ public class LaunchShortcutsAction extends Action implements IMenuCreator, IWork * Launch group */ private ILaunchGroup fGroup; + + /** + * Whether this actions enablement has been initialized + */ + private boolean fInitialized = false; /** * Creates a cascading menu action to populate with shortcuts in the given @@ -78,6 +84,7 @@ public class LaunchShortcutsAction extends Action implements IMenuCreator, IWork fGroup = DebugUIPlugin.getDefault().getLaunchConfigurationManager().getLaunchGroup(launchGroupIdentifier); setText(DebugPlugin.getDefault().getLaunchManager().getLaunchMode(fGroup.getMode()).getLabel()); setMenuCreator(this); + setEnabled(existsConfigTypesForMode()); } /** @@ -279,9 +286,6 @@ public class LaunchShortcutsAction extends Action implements IMenuCreator, IWork * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.IWorkbenchWindow) */ public void init(IWorkbenchWindow window) { -// if (window instanceof WorkbenchWindow) { -// fKeyBindingService= ((WorkbenchWindow)window).getKeyBindingService(); -// } } /** @@ -295,8 +299,28 @@ public class LaunchShortcutsAction extends Action implements IMenuCreator, IWork * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection) */ public void selectionChanged(IAction action, ISelection selection) { - // nothing to do + if (!fInitialized) { + action.setEnabled(existsConfigTypesForMode()); + fInitialized = true; + } } + /** + * Return whether there are any registered launch configuration types for + * the mode of this action. + * + * @return whether there are any registered launch configuration types for + * the mode of this action + */ + private boolean existsConfigTypesForMode() { + ILaunchConfigurationType[] configTypes = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationTypes(); + for (int i = 0; i < configTypes.length; i++) { + ILaunchConfigurationType configType = configTypes[i]; + if (configType.supportsMode(getMode())) { + return true; + } + } + return false; + } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/FileLink.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/FileLink.java index 4b259d525..d648b0efe 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/FileLink.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/FileLink.java @@ -24,6 +24,7 @@ import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; +import org.eclipse.ui.console.IHyperlink; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.ITextEditor; @@ -36,7 +37,7 @@ import org.eclipse.ui.texteditor.ITextEditor; * </p> * @since 2.1 */ -public class FileLink implements IConsoleHyperlink { +public class FileLink implements IHyperlink { private IFile fFile; private int fFileOffset; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/IConsole.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/IConsole.java index aac360a0e..b4e11dd25 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/IConsole.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/IConsole.java @@ -16,6 +16,7 @@ import org.eclipse.debug.core.model.IStreamMonitor; import org.eclipse.debug.core.model.IStreamsProxy; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; +import org.eclipse.ui.console.IHyperlink; import org.eclipse.ui.console.IPatternMatchListener; /** @@ -61,8 +62,25 @@ public interface IConsole { * @param offset the character offset within the console document where the * text assoicated with the hyperlink begins * @param length the length of the associated hyperlink text + * @deprecated replaced with addLink(IHyperlink link, int offset, int length) */ public void addLink(IConsoleHyperlink link, int offset, int length); + + /** + * Adds the given hyperlink to this console. The link will be notified when + * entered, exited, and activated. + * <p> + * If the link's region (offset/length) is within the console's document + * current bounds, it is added immediately. Otherwise, the link is added + * when the console's document grows to contain the link's region. + * </p> + * @param link the hyperlink to add + * @param offset the character offset within the console document where the + * text assoicated with the hyperlink begins + * @param length the length of the associated hyperlink text + * @ since 3.1 + */ + public void addLink(IHyperlink link, int offset, int length); /** * Returns the region of text associated with the given hyperlink, or @@ -71,10 +89,22 @@ public interface IConsole { * * @param link a console hyperlink * @return region of text associated with the hyperlink, or <code>null</code> + * @deprecated replaced with getRegion(IHyperlink link) instead */ public IRegion getRegion(IConsoleHyperlink link); /** + * Returns the region of text associated with the given hyperlink, or + * <code>null</code> if the given hyperlink is not contained in this + * console. + * + * @param link a console hyperlink + * @return region of text associated with the hyperlink, or <code>null</code> + * @since 3.1 + */ + public IRegion getRegion(IHyperlink link); + + /** * Returns the document associated with this console. * * @return document diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/IConsoleHyperlink.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/IConsoleHyperlink.java index b85284b87..672ffa5d7 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/IConsoleHyperlink.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/IConsoleHyperlink.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. + * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at @@ -19,7 +19,7 @@ import org.eclipse.ui.console.IHyperlink; * Clients may implement this interface. * </p> * @since 2.1 - * @deprecated replaced by org.eclipse.ui.console.IConsoleHyperlink + * @deprecated replaced by org.eclipse.ui.console.IHyperlink */ public interface IConsoleHyperlink extends IHyperlink { } |