mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-10 17:55:39 +02:00
Added the "AddWatchpoint" action to the breakpoints view.
This commit is contained in:
parent
15d465aae7
commit
103ba0e9c1
4 changed files with 44 additions and 223 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2006-04-17 Mikhail Khodjaiants
|
||||||
|
Added the "AddWatchpoint" action to the breakpoints view.
|
||||||
|
* AddWatchpointActionDelegate.java
|
||||||
|
* plugin.properties
|
||||||
|
* plugin.xml
|
||||||
|
|
||||||
2006-04-05 Mikhail Khodjaiants
|
2006-04-05 Mikhail Khodjaiants
|
||||||
Bug 135118: Modules view is not updated.
|
Bug 135118: Modules view is not updated.
|
||||||
* ModuleProxyFactory.java
|
* ModuleProxyFactory.java
|
||||||
|
|
|
@ -48,6 +48,8 @@ JumpToLineAction.label=Resume At Li&ne
|
||||||
GlobalJumpToLineAction.label=Resume At Li&ne (C/C++)
|
GlobalJumpToLineAction.label=Resume At Li&ne (C/C++)
|
||||||
ShowFullPathsAction.label=Show Full &Paths
|
ShowFullPathsAction.label=Show Full &Paths
|
||||||
ShowFullPathsAction.tooltip=Show Full Paths
|
ShowFullPathsAction.tooltip=Show Full Paths
|
||||||
|
AddWatchpoint.label=Add Watchpoint (C/C++)...
|
||||||
|
AddWatchpoint.tooltip=Add Watchpoint (C/C++)
|
||||||
|
|
||||||
AddGlobalsAction.label=Add Global Variables...
|
AddGlobalsAction.label=Add Global Variables...
|
||||||
AddGlobalsAction.tooltip=Add Global Variables
|
AddGlobalsAction.tooltip=Add Global Variables
|
||||||
|
|
|
@ -281,6 +281,14 @@
|
||||||
<viewerContribution
|
<viewerContribution
|
||||||
targetID="org.eclipse.debug.ui.BreakpointView"
|
targetID="org.eclipse.debug.ui.BreakpointView"
|
||||||
id="org.eclipse.cdt.debug.ui.breakpointview.popupMenu">
|
id="org.eclipse.cdt.debug.ui.breakpointview.popupMenu">
|
||||||
|
<action
|
||||||
|
class="org.eclipse.cdt.debug.internal.ui.actions.AddWatchpointActionDelegate"
|
||||||
|
helpContextId="add_watchpoint_action_context"
|
||||||
|
icon="icons/elcl16/watchpoint_co.gif"
|
||||||
|
id="org.eclipse.cdt.debug.ui.addWatchpoint"
|
||||||
|
label="%AddWatchpoint.label"
|
||||||
|
menubarPath="additions"
|
||||||
|
tooltip="%AddWatchpoint.tooltip"/>
|
||||||
</viewerContribution>
|
</viewerContribution>
|
||||||
<viewerContribution
|
<viewerContribution
|
||||||
targetID="#ASMEditorRulerContext"
|
targetID="#ASMEditorRulerContext"
|
||||||
|
|
|
@ -1,259 +1,64 @@
|
||||||
/*******************************************************************************
|
/**********************************************************************
|
||||||
* Copyright (c) 2004, 2005 QNX Software Systems and others.
|
* Copyright (c) 2004 QNX Software Systems and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Common Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
* http://www.eclipse.org/legal/cpl-v10.html
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX Software Systems - Initial API and implementation
|
* QNX Software Systems - Initial API and implementation
|
||||||
*******************************************************************************/
|
***********************************************************************/
|
||||||
package org.eclipse.cdt.debug.internal.ui.actions;
|
package org.eclipse.cdt.debug.internal.ui.actions;
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.core.CDIDebugModel;
|
import org.eclipse.cdt.debug.core.CDIDebugModel;
|
||||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
|
||||||
import org.eclipse.jface.action.IAction;
|
import org.eclipse.jface.action.IAction;
|
||||||
import org.eclipse.jface.text.IDocument;
|
|
||||||
import org.eclipse.jface.text.ITextSelection;
|
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
|
||||||
import org.eclipse.jface.viewers.ISelectionProvider;
|
|
||||||
import org.eclipse.jface.window.Window;
|
import org.eclipse.jface.window.Window;
|
||||||
import org.eclipse.ui.IEditorInput;
|
import org.eclipse.ui.IViewActionDelegate;
|
||||||
import org.eclipse.ui.IEditorPart;
|
import org.eclipse.ui.IViewPart;
|
||||||
import org.eclipse.ui.IFileEditorInput;
|
|
||||||
import org.eclipse.ui.IPartListener;
|
|
||||||
import org.eclipse.ui.IStorageEditorInput;
|
|
||||||
import org.eclipse.ui.IWorkbenchPage;
|
|
||||||
import org.eclipse.ui.IWorkbenchPart;
|
|
||||||
import org.eclipse.ui.IWorkbenchWindow;
|
|
||||||
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
|
|
||||||
import org.eclipse.ui.actions.ActionDelegate;
|
import org.eclipse.ui.actions.ActionDelegate;
|
||||||
import org.eclipse.ui.texteditor.ITextEditor;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action for adding a watchpoint at a selection in the active
|
* A delegate for the "Add Watchpoint" action.
|
||||||
* C/C++ or assembly editor.
|
|
||||||
*/
|
*/
|
||||||
public class AddWatchpointActionDelegate extends ActionDelegate implements IWorkbenchWindowActionDelegate, IPartListener {
|
public class AddWatchpointActionDelegate extends ActionDelegate implements IViewActionDelegate {
|
||||||
|
|
||||||
private boolean fInitialized = false;
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
|
||||||
private IAction fAction = null;
|
|
||||||
|
|
||||||
private ITextEditor fTextEditor = null;
|
|
||||||
|
|
||||||
private IWorkbenchWindow fWorkbenchWindow = null;
|
|
||||||
|
|
||||||
private IResource fResource = null;
|
|
||||||
|
|
||||||
private String fSourceHandle = ""; //$NON-NLS-1$
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor for AddWatchpointActionDelegate.
|
|
||||||
*/
|
*/
|
||||||
public AddWatchpointActionDelegate() {
|
public void init( IViewPart view ) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
|
* @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
|
||||||
*/
|
|
||||||
public void dispose() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(IWorkbenchWindow)
|
|
||||||
*/
|
|
||||||
public void init( IWorkbenchWindow window ) {
|
|
||||||
setWorkbenchWindow( window );
|
|
||||||
window.getPartService().addPartListener( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.IActionDelegate#run(IAction)
|
|
||||||
*/
|
*/
|
||||||
public void run( IAction action ) {
|
public void run( IAction action ) {
|
||||||
String expression = getSelectedExpression();
|
AddWatchpointDialog dlg = new AddWatchpointDialog( CDebugUIPlugin.getActiveWorkbenchShell(), true, false, "", true ); //$NON-NLS-1$
|
||||||
AddWatchpointDialog dlg = new AddWatchpointDialog( CDebugUIPlugin.getActiveWorkbenchShell(), true, false, expression, true );
|
if ( dlg.open() == Window.OK ) {
|
||||||
if ( dlg.open() != Window.OK )
|
addWatchpoint( dlg.getWriteAccess(), dlg.getReadAccess(), dlg.getExpression() );
|
||||||
return;
|
|
||||||
if ( getTextEditor() != null ) {
|
|
||||||
update();
|
|
||||||
addWatchpoint( getTextEditor().getEditorInput(), dlg.getWriteAccess(), dlg.getReadAccess(), dlg.getExpression() );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
private void addWatchpoint( boolean write, boolean read, String expression ) {
|
||||||
* @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
|
|
||||||
*/
|
|
||||||
public void selectionChanged( IAction action, ISelection selection ) {
|
|
||||||
if ( !fInitialized ) {
|
|
||||||
setAction( action );
|
|
||||||
if ( getWorkbenchWindow() != null ) {
|
|
||||||
IWorkbenchPage page = getWorkbenchWindow().getActivePage();
|
|
||||||
if ( page != null ) {
|
|
||||||
IEditorPart part = page.getActiveEditor();
|
|
||||||
if ( part instanceof ITextEditor ) {
|
|
||||||
setTextEditor( (ITextEditor)part );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fInitialized = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IAction getAction() {
|
|
||||||
return fAction;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setAction( IAction action ) {
|
|
||||||
fAction = action;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IWorkbenchWindow getWorkbenchWindow() {
|
|
||||||
return fWorkbenchWindow;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setWorkbenchWindow( IWorkbenchWindow workbenchWindow ) {
|
|
||||||
fWorkbenchWindow = workbenchWindow;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ITextEditor getTextEditor() {
|
|
||||||
return fTextEditor;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setTextEditor( ITextEditor editor ) {
|
|
||||||
fTextEditor = editor;
|
|
||||||
if ( fTextEditor != null ) {
|
|
||||||
IEditorInput input = fTextEditor.getEditorInput();
|
|
||||||
setSourceHandle( input );
|
|
||||||
setResource( input );
|
|
||||||
}
|
|
||||||
setEnabledState( editor );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String getSelectedExpression() {
|
|
||||||
if ( getTextEditor() != null ) {
|
|
||||||
ISelectionProvider sp = getTextEditor().getSelectionProvider();
|
|
||||||
if ( sp != null ) {
|
|
||||||
ISelection s = sp.getSelection();
|
|
||||||
if ( s instanceof ITextSelection ) {
|
|
||||||
return ((ITextSelection)s).getText().trim();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""; //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void update( ISelection selection ) {
|
|
||||||
setEnabledState( getTextEditor() );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void update() {
|
|
||||||
IAction action = getAction();
|
|
||||||
if ( action != null ) {
|
|
||||||
action.setEnabled( getTextEditor() != null );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setEnabledState( ITextEditor editor ) {
|
|
||||||
if ( getAction() != null ) {
|
|
||||||
getAction().setEnabled( editor != null );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IResource getResource() {
|
|
||||||
return fResource;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setResource( IEditorInput input ) {
|
|
||||||
if ( input instanceof IFileEditorInput ) {
|
|
||||||
fResource = ((IFileEditorInput)input).getFile().getProject();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fResource = ResourcesPlugin.getWorkspace().getRoot();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void addWatchpoint( IEditorInput editorInput, boolean write, boolean read, String expression ) {
|
|
||||||
if ( getResource() == null )
|
if ( getResource() == null )
|
||||||
return;
|
return;
|
||||||
IDocument document = getTextEditor().getDocumentProvider().getDocument( editorInput );
|
try {
|
||||||
WatchpointExpressionVerifier wev = new WatchpointExpressionVerifier();
|
CDIDebugModel.createWatchpoint( getSourceHandle(), getResource(), write, read, expression, true, 0, "", true ); //$NON-NLS-1$
|
||||||
if ( wev.isValidExpression( document, expression ) ) {
|
}
|
||||||
try {
|
catch( CoreException ce ) {
|
||||||
CDIDebugModel.createWatchpoint( getSourceHandle(), getResource(), write, read, expression, true, 0, "", true ); //$NON-NLS-1$
|
CDebugUIPlugin.errorDialog( ActionMessages.getString( "AddWatchpointActionDelegate1.0" ), ce ); //$NON-NLS-1$
|
||||||
}
|
|
||||||
catch( CoreException ce ) {
|
|
||||||
CDebugUIPlugin.errorDialog( ActionMessages.getString( "AddWatchpointActionDelegate.0" ), ce ); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
private IResource getResource() {
|
||||||
* @see org.eclipse.ui.IPartListener#partActivated(IWorkbenchPart)
|
return ResourcesPlugin.getWorkspace().getRoot();
|
||||||
*/
|
|
||||||
public void partActivated( IWorkbenchPart part ) {
|
|
||||||
if ( part instanceof ITextEditor ) {
|
|
||||||
setTextEditor( (ITextEditor)part );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.IPartListener#partBroughtToTop(IWorkbenchPart)
|
|
||||||
*/
|
|
||||||
public void partBroughtToTop( IWorkbenchPart part ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.IPartListener#partClosed(IWorkbenchPart)
|
|
||||||
*/
|
|
||||||
public void partClosed( IWorkbenchPart part ) {
|
|
||||||
if ( part == getTextEditor() ) {
|
|
||||||
setTextEditor( null );
|
|
||||||
if ( getAction() != null ) {
|
|
||||||
getAction().setEnabled( false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.IPartListener#partDeactivated(IWorkbenchPart)
|
|
||||||
*/
|
|
||||||
public void partDeactivated( IWorkbenchPart part ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.IPartListener#partOpened(IWorkbenchPart)
|
|
||||||
*/
|
|
||||||
public void partOpened( IWorkbenchPart part ) {
|
|
||||||
if ( part instanceof ITextEditor ) {
|
|
||||||
if ( getTextEditor() == null ) {
|
|
||||||
setTextEditor( (ITextEditor)part );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getSourceHandle() {
|
private String getSourceHandle() {
|
||||||
return fSourceHandle;
|
return ""; //$NON-NLS-1$
|
||||||
}
|
|
||||||
|
|
||||||
private void setSourceHandle( IEditorInput input ) {
|
|
||||||
fSourceHandle = ""; //$NON-NLS-1$
|
|
||||||
if ( input instanceof IFileEditorInput ) {
|
|
||||||
fSourceHandle = ((IFileEditorInput)input).getFile().getFullPath().toOSString();
|
|
||||||
}
|
|
||||||
else if ( input instanceof IStorageEditorInput ) {
|
|
||||||
try {
|
|
||||||
IPath path = ((IStorageEditorInput)input).getStorage().getFullPath();
|
|
||||||
if ( path != null )
|
|
||||||
fSourceHandle = path.toOSString();
|
|
||||||
}
|
|
||||||
catch( CoreException e ) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue