1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-01 06:05:24 +02:00

Implementation of expressions.

This commit is contained in:
Mikhail Khodjaiants 2002-09-18 19:02:52 +00:00
parent e8710267d3
commit 26fc07b6cf
4 changed files with 85 additions and 31 deletions

View file

@ -28,6 +28,7 @@ import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager;
import org.eclipse.cdt.debug.core.cdi.ICDICondition;
import org.eclipse.cdt.debug.core.cdi.ICDIConfiguration;
import org.eclipse.cdt.debug.core.cdi.ICDIEndSteppingRange;
import org.eclipse.cdt.debug.core.cdi.ICDIExpressionManager;
import org.eclipse.cdt.debug.core.cdi.ICDILocation;
import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject;
import org.eclipse.cdt.debug.core.cdi.ICDISessionObject;
@ -60,6 +61,7 @@ import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IBreakpointManager;
import org.eclipse.debug.core.IExpressionListener;
import org.eclipse.debug.core.IExpressionManager;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchListener;
import org.eclipse.debug.core.model.IBreakpoint;
@ -210,6 +212,7 @@ public class CDebugTarget extends CDebugElement
setThreadList( new ArrayList( 5 ) );
initialize();
DebugPlugin.getDefault().getLaunchManager().addLaunchListener( this );
DebugPlugin.getDefault().getExpressionManager().addExpressionListener( this );
getCDISession().getEventManager().addEventListener( this );
}
@ -996,7 +999,9 @@ public class CDebugTarget extends CDebugElement
removeAllRegisterGroups();
getCDISession().getEventManager().removeEventListener( this );
DebugPlugin.getDefault().getBreakpointManager().removeBreakpointListener( this );
DebugPlugin.getDefault().getExpressionManager().removeExpressionListener( this );
DebugPlugin.getDefault().getLaunchManager().removeLaunchListener( this );
removeAllExpressions();
try
{
removeAllBreakpoints();
@ -1023,6 +1028,23 @@ public class CDebugTarget extends CDebugElement
}
}
/**
* Removes all expressions from this target.
*
*/
protected void removeAllExpressions()
{
IExpressionManager em = DebugPlugin.getDefault().getExpressionManager();
IExpression[] expressions = em.getExpressions();
for ( int i = 0; i < expressions.length; ++i )
{
if ( expressions[i] instanceof CExpression && expressions[i].getDebugTarget().equals( this ) )
{
em.removeExpression( expressions[i] );
}
}
}
/**
* Removes all breakpoints from this target.
*
@ -1681,5 +1703,17 @@ public class CDebugTarget extends CDebugElement
*/
public void expressionRemoved( IExpression expression )
{
if ( expression != null && expression.getDebugTarget().equals( this ) && expression instanceof CExpression )
{
ICDIExpressionManager em = getCDISession().getExpressionManager();
try
{
em.removeExpression( ((CExpression)expression).getCDIExpression() );
}
catch( CDIException e )
{
// do nothing
}
}
}
}

View file

@ -66,4 +66,9 @@ public class CExpression extends CVariable
{
super.dispose();
}
protected ICDIExpression getCDIExpression()
{
return (ICDIExpression)getCDIVariable();
}
}

View file

@ -35,6 +35,7 @@ import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.IDisconnect;
import org.eclipse.debug.core.model.IExpression;
import org.eclipse.debug.core.model.IRegister;
import org.eclipse.debug.core.model.IRegisterGroup;
import org.eclipse.debug.core.model.IStackFrame;
@ -181,6 +182,10 @@ public class CDTDebugModelPresentation extends LabelProvider
{
return getRegisterGroupImage( (IRegisterGroup)element );
}
if ( element instanceof IExpression )
{
return getExpressionImage( (IExpression)element );
}
if ( element instanceof IRegister )
{
return getRegisterImage( (IRegister)element );
@ -671,4 +676,9 @@ public class CDTDebugModelPresentation extends LabelProvider
{
return fDebugImageRegistry.get( new CImageDescriptor( CDebugImages.DESC_OBJS_REGISTER, 0 ) );
}
protected Image getExpressionImage( IExpression element ) throws DebugException
{
return fDebugImageRegistry.get( new CImageDescriptor( DebugUITools.getImageDescriptor( IDebugUIConstants.IMG_OBJS_EXPRESSION ), 0 ) );
}
}

View file

@ -5,29 +5,31 @@
*/
package org.eclipse.cdt.debug.internal.ui.actions;
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.cdt.debug.core.CDebugModel;
import org.eclipse.cdt.debug.core.ICExpressionEvaluator;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.debug.core.model.IDebugElement;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.IExpression;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorActionDelegate;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.INullSelectionListener;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
@ -43,19 +45,20 @@ import org.eclipse.ui.texteditor.ITextEditor;
public class AddExpressionActionDelegate implements IWorkbenchWindowActionDelegate,
IEditorActionDelegate,
IPartListener,
IDebugEventSetListener
ISelectionListener,
INullSelectionListener
{
private IAction fAction;
private IWorkbenchWindow fWorkbenchWindow;
private IWorkbenchPart fTargetPart;
private IEditorPart fTargetEditor;
private IDebugTarget fDebugTarget = null;
/**
* Constructor for AddExpressionActionDelegate.
*/
public AddExpressionActionDelegate()
{
DebugPlugin.getDefault().addDebugEventListener( this );
}
/* (non-Javadoc)
@ -63,11 +66,11 @@ public class AddExpressionActionDelegate implements IWorkbenchWindowActionDelega
*/
public void dispose()
{
DebugPlugin.getDefault().removeDebugEventListener( this );
IWorkbenchWindow win = getWorkbenchWindow();
if ( win != null )
{
win.getPartService().removePartListener( this );
win.getSelectionService().removeSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this );
}
}
@ -83,6 +86,7 @@ public class AddExpressionActionDelegate implements IWorkbenchWindowActionDelega
setTargetPart( page.getActivePart() );
}
window.getPartService().addPartListener( this );
window.getSelectionService().addSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this );
update();
}
@ -239,24 +243,6 @@ public class AddExpressionActionDelegate implements IWorkbenchWindowActionDelega
}
return null;
}
protected IDebugTarget getDebugTarget()
{
IAdaptable context = DebugUITools.getDebugContext();
if ( context != null )
{
IDebugTarget target = ((IDebugTarget)context.getAdapter( IDebugTarget.class )).getDebugTarget();
if ( target != null )
{
ICExpressionEvaluator ee = (ICExpressionEvaluator)target.getAdapter( ICExpressionEvaluator.class );
if ( ee != null && ee.canEvaluate() )
{
return target;
}
}
}
return null;
}
private void createExpression( final String text )
{
@ -281,19 +267,38 @@ public class AddExpressionActionDelegate implements IWorkbenchWindowActionDelega
}
} );
}
/**
* @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(DebugEvent[])
* @see org.eclipse.ui.ISelectionListener#selectionChanged(IWorkbenchPart, ISelection)
*/
public void handleDebugEvents( DebugEvent[] events )
public void selectionChanged( IWorkbenchPart part, ISelection selection )
{
for ( int i = 0; i < events.length; ++i )
IDebugTarget target = null;
if ( part.getSite().getId().equals( IDebugUIConstants.ID_DEBUG_VIEW ) )
{
if ( ( events[i].getKind() == DebugEvent.CREATE || events[i].getKind() == DebugEvent.TERMINATE ) &&
events[i].getSource() instanceof ICExpressionEvaluator )
if ( selection != null && selection instanceof IStructuredSelection )
{
update();
Object element = ((IStructuredSelection)selection).getFirstElement();
if ( element != null && element instanceof IDebugElement )
{
IDebugTarget target1 = ((IDebugElement)element).getDebugTarget();
if ( target1 != null && target1 instanceof ICExpressionEvaluator )
{
target = target1;
}
}
}
setDebugTarget( target );
update();
}
}
protected void setDebugTarget( IDebugTarget target )
{
fDebugTarget = target;
}
protected IDebugTarget getDebugTarget()
{
return fDebugTarget;
}
}