1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-10 09:45:39 +02:00

Removed the gdb-specific variable parsing.

This commit is contained in:
Mikhail Khodjaiants 2003-03-18 21:06:23 +00:00
parent d74d9d5a46
commit 21564c5259
13 changed files with 51 additions and 282 deletions

View file

@ -1,3 +1,15 @@
2003-03-18 Mikhail Khodjaiants
Removed the gdb-specific variable parsing.
* ICValue.java
* CArrayPartition.java
* CArrayPartitionValue.java
* CModificationVariable.java
* CStackFrame.java
* CValue.java
* CVariable.java
* CArrayEntryVariable.java: removed
* CLocalVariable.java: removed
2003-03-17 Mikhail Khodjaiants 2003-03-17 Mikhail Khodjaiants
Replace range by start index and length in 'Display As Array' action. Replace range by start index and length in 'Display As Array' action.
* ICDIVariableManager.java * ICDIVariableManager.java

View file

@ -18,24 +18,6 @@ import org.eclipse.debug.core.model.IValue;
*/ */
public interface ICValue extends IValue public interface ICValue extends IValue
{ {
static final public int TYPE_UNKNOWN = -1;
static final public int TYPE_SIMPLE = 0;
static final public int TYPE_ARRAY = 1;
static final public int TYPE_STRUCTURE = 2;
static final public int TYPE_STRING = 3;
static final public int TYPE_POINTER = 4;
static final public int TYPE_ARRAY_PARTITION = 5;
static final public int TYPE_ARRAY_ENTRY = 7;
static final public int TYPE_CHAR = 8;
static final public int TYPE_KEYWORD = 9;
/**
* Returns the type of this value.
*
* @return the type of this value
*/
int getType();
/** /**
* Returns the underlying CDI value for this value. * Returns the underlying CDI value for this value.
*/ */

View file

@ -1,63 +0,0 @@
/*
*(c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.internal.core.model;
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
import org.eclipse.debug.core.DebugException;
/**
*
* An entry in an array.
*
* @since Sep 9, 2002
*/
public class CArrayEntryVariable extends CModificationVariable
{
/**
* The index of the variable entry.
*/
private int fIndex;
/**
* Constructor for CArrayEntryVariable.
* @param target
*/
public CArrayEntryVariable( CDebugElement parent, ICDIVariable cdiVariable, int index )
{
super( parent, cdiVariable );
fIndex = index;
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IVariable#getName()
*/
public String getName() throws DebugException
{
return "[" + getIndex() + "]";
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IVariable#getReferenceTypeName()
*/
public String getReferenceTypeName() throws DebugException
{
return stripBrackets( super.getReferenceTypeName() );
}
protected int getIndex()
{
return fIndex;
}
protected String stripBrackets( String typeName )
{
int index = typeName.lastIndexOf( '[' );
if ( index < 0 )
return typeName;
return typeName.substring( 0, index );
}
}

View file

@ -96,7 +96,7 @@ public class CArrayPartition extends CVariable
return fArrayPartitionValue; return fArrayPartitionValue;
} }
static public List splitArray( CDebugTarget target, List cdiVars, int start, int end ) static public List splitArray( CDebugElement parent, List cdiVars, int start, int end )
{ {
ArrayList children = new ArrayList(); ArrayList children = new ArrayList();
int perSlot = 1; int perSlot = 1;
@ -115,11 +115,11 @@ public class CArrayPartition extends CVariable
CVariable var = null; CVariable var = null;
if ( perSlot == 1 ) if ( perSlot == 1 )
{ {
var = new CArrayEntryVariable( target, (ICDIVariable)cdiVars.get( start ), start ); var = new CModificationVariable( parent, (ICDIVariable)cdiVars.get( start ) );
} }
else else
{ {
var = new CArrayPartition( target, cdiVars.subList( start, start + perSlot ), start, start + perSlot - 1 ); var = new CArrayPartition( parent, cdiVars.subList( start, start + perSlot ), start, start + perSlot - 1 );
} }
children.add( var ); children.add( var );
start += perSlot; start += perSlot;

View file

@ -101,7 +101,7 @@ public class CArrayPartitionValue extends CDebugElement implements ICValue
fVariables = new ArrayList( getEnd() - getStart() + 1 ); fVariables = new ArrayList( getEnd() - getStart() + 1 );
for ( int i = getStart(); i <= getEnd(); ++i ) for ( int i = getStart(); i <= getEnd(); ++i )
{ {
fVariables.add( new CArrayEntryVariable( (CDebugTarget)getDebugTarget(), (ICDIVariable)fCDIVariables.get( i - getStart() ), i ) ); fVariables.add( new CModificationVariable( this, (ICDIVariable)fCDIVariables.get( i - getStart() ) ) );
} }
} }
return (IVariable[])fVariables.toArray( new IVariable[fVariables.size()] ); return (IVariable[])fVariables.toArray( new IVariable[fVariables.size()] );

View file

@ -1,26 +0,0 @@
/*
*(c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.internal.core.model;
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
/**
*
* Enter type comment.
*
* @since Aug 9, 2002
*/
public class CLocalVariable extends CModificationVariable
{
/**
* Constructor for CLocalVariable.
* @param target
*/
public CLocalVariable( CDebugElement parent, ICDIVariable cdiVariable )
{
super( parent, cdiVariable );
}
}

View file

@ -6,13 +6,9 @@
package org.eclipse.cdt.debug.internal.core.model; package org.eclipse.cdt.debug.internal.core.model;
import java.text.MessageFormat;
import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDIFormat;
import org.eclipse.cdt.debug.core.cdi.model.ICDIValue; import org.eclipse.cdt.debug.core.cdi.model.ICDIValue;
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable; import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
import org.eclipse.cdt.debug.core.model.ICValue;
import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IValue; import org.eclipse.debug.core.model.IValue;
@ -22,7 +18,7 @@ import org.eclipse.debug.core.model.IValue;
* *
* @since Aug 9, 2002 * @since Aug 9, 2002
*/ */
public abstract class CModificationVariable extends CVariable public class CModificationVariable extends CVariable
{ {
/** /**
* Constructor for CModificationVariable. * Constructor for CModificationVariable.
@ -109,6 +105,7 @@ public abstract class CModificationVariable extends CVariable
private String processExpression( String oldExpression ) throws DebugException private String processExpression( String oldExpression ) throws DebugException
{ {
/*
CValue value = (CValue)getValue(); CValue value = (CValue)getValue();
if ( value == null ) if ( value == null )
{ {
@ -126,6 +123,7 @@ public abstract class CModificationVariable extends CVariable
} }
return Short.toString( (short)chars[0] ); return Short.toString( (short)chars[0] );
} }
*/
return oldExpression; return oldExpression;
} }
} }

View file

@ -107,7 +107,7 @@ public class CStackFrame extends CDebugElement
Iterator it = vars.iterator(); Iterator it = vars.iterator();
while( it.hasNext() ) while( it.hasNext() )
{ {
fVariables.add( new CLocalVariable( this, (ICDIVariable)it.next() ) ); fVariables.add( new CModificationVariable( this, (ICDIVariable)it.next() ) );
} }
} }
else if ( refreshVariables() ) else if ( refreshVariables() )
@ -128,7 +128,7 @@ public class CStackFrame extends CDebugElement
int index = 0; int index = 0;
while( index < fVariables.size() ) while( index < fVariables.size() )
{ {
CLocalVariable local = (CLocalVariable)fVariables.get( index ); CVariable local = (CVariable)fVariables.get( index );
ICDIVariable var = findVariable( locals, local.getOriginalCDIVariable() ); ICDIVariable var = findVariable( locals, local.getOriginalCDIVariable() );
if ( var != null ) if ( var != null )
{ {
@ -146,7 +146,7 @@ public class CStackFrame extends CDebugElement
Iterator newOnes = locals.iterator(); Iterator newOnes = locals.iterator();
while( newOnes.hasNext() ) while( newOnes.hasNext() )
{ {
fVariables.add( new CLocalVariable( this, (ICDIVariable)newOnes.next() ) ); fVariables.add( new CModificationVariable( this, (ICDIVariable)newOnes.next() ) );
} }
} }
@ -683,8 +683,8 @@ public class CStackFrame extends CDebugElement
} }
for ( int i = 0; i < vars.length; ++i ) for ( int i = 0; i < vars.length; ++i )
{ {
if ( vars[i] instanceof CLocalVariable && if ( vars[i] instanceof CVariable &&
((CLocalVariable)vars[i]).getOriginalCDIVariable() instanceof ICDIArgument ) ((CVariable)vars[i]).getOriginalCDIVariable() instanceof ICDIArgument )
{ {
list.add( vars[i] ); list.add( vars[i] );
} }

View file

@ -47,11 +47,6 @@ public class CValue extends CDebugElement implements ICValue
*/ */
private List fVariables = Collections.EMPTY_LIST; private List fVariables = Collections.EMPTY_LIST;
/**
* Type (simple, array, structure or string) of this value.
*/
private int fType = TYPE_UNKNOWN;
/** /**
* Constructor for CValue. * Constructor for CValue.
* @param target * @param target
@ -127,18 +122,16 @@ public class CValue extends CDebugElement implements ICValue
if ( fVariables.size() == 0 ) if ( fVariables.size() == 0 )
{ {
List vars = getCDIVariables(); List vars = getCDIVariables();
if ( getType() == ICValue.TYPE_ARRAY )
{ if ( vars.size() > 1 )
if ( vars.size() > 0 ) fVariables = CArrayPartition.splitArray( this, vars, 0, vars.size() - 1 );
fVariables = CArrayPartition.splitArray( (CDebugTarget)getDebugTarget(), vars, 0, vars.size() - 1 );
}
else else
{ {
fVariables = new ArrayList( vars.size() ); fVariables = new ArrayList( vars.size() );
Iterator it = vars.iterator(); Iterator it = vars.iterator();
while( it.hasNext() ) while( it.hasNext() )
{ {
fVariables.add( new CLocalVariable( this, (ICDIVariable)it.next() ) ); fVariables.add( new CModificationVariable( this, (ICDIVariable)it.next() ) );
} }
} }
} }
@ -196,46 +189,6 @@ public class CValue extends CDebugElement implements ICValue
return Arrays.asList( vars ); return Arrays.asList( vars );
} }
protected void calculateType( String stringValue )
{
if ( fType == TYPE_UNKNOWN && stringValue != null )
{
stringValue = stringValue.trim();
if ( stringValue.length() == 0 )
{
fType = TYPE_KEYWORD;
}
else if ( stringValue.charAt( stringValue.length() - 1 ) == '\'' )
{
fType = TYPE_CHAR;
}
else if ( stringValue.charAt( 0 ) == '[' )
{
fType = TYPE_ARRAY;
}
else if ( stringValue.charAt( 0 ) == '{' )
{
fType = TYPE_STRUCTURE;
}
else if ( stringValue.startsWith( "0x" ) )
{
fType = TYPE_POINTER;
}
else
{
fType = TYPE_SIMPLE;
}
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.core.ICValue#getType()
*/
public int getType()
{
return fType;
}
protected int getNumberOfChildren() throws DebugException protected int getNumberOfChildren() throws DebugException
{ {
int result = 0; int result = 0;
@ -256,11 +209,6 @@ public class CValue extends CDebugElement implements ICValue
if ( cdiValue != null ) if ( cdiValue != null )
{ {
result = cdiValue.trim(); result = cdiValue.trim();
calculateType( result );
if ( getType() == TYPE_CHAR )
{
result = getCharValue( result );
}
} }
return result; return result;
} }
@ -286,38 +234,7 @@ public class CValue extends CDebugElement implements ICValue
((CVariable)it.next()).dispose(); ((CVariable)it.next()).dispose();
} }
} }
private String getCharValue( String value )
{
String result = "";
int index = value.indexOf( ' ' );
if ( index > 0 )
{
char resultChar = '.';
try
{
short shortValue = Short.parseShort( value.substring( 0, index ), 10 );
if ( shortValue >= 0 )
{
resultChar = (char)shortValue;
if ( Character.isISOControl( resultChar ) )
{
resultChar = '.';
}
}
}
catch( NumberFormatException e )
{
}
result = String.valueOf( resultChar );
}
else
{
result = value;
}
return result;
}
protected CVariable getParentVariable() protected CVariable getParentVariable()
{ {
return fParent; return fParent;

View file

@ -126,11 +126,12 @@ public abstract class CVariable extends CDebugElement
*/ */
public boolean hasValueChanged() throws DebugException public boolean hasValueChanged() throws DebugException
{ {
// ??
if ( isPointer() )
return false;
IValue value = getValue(); IValue value = getValue();
if ( value != null ) if ( value != null )
{ {
if ( value instanceof CValue && ((CValue)getValue()).getType() == ICValue.TYPE_POINTER )
return false;
return ( value.hasVariables() ) ? false : fChanged; return ( value.hasVariables() ) ? false : fChanged;
} }
return false; return false;
@ -270,7 +271,7 @@ public abstract class CVariable extends CDebugElement
if ( getValue() != null && getValue() instanceof ICValue ) if ( getValue() != null && getValue() instanceof ICValue )
{ {
((ICValue)getValue()).setChanged( changed ); ((ICValue)getValue()).setChanged( changed );
if ( !getValue().hasVariables() || ((ICValue)getValue()).getType() == ICValue.TYPE_POINTER ) if ( !hasChildren() )
{ {
fChanged = changed; fChanged = changed;
} }
@ -303,12 +304,6 @@ public abstract class CVariable extends CDebugElement
try try
{ {
setChanged( true ); setChanged( true );
if ( getValue() != null &&
((CValue)getValue()).getType() == ICValue.TYPE_CHAR &&
getParent() instanceof CValue )
{
updateParentVariable( (CValue)getParent() );
}
getParent().fireChangeEvent( DebugEvent.CONTENT ); getParent().fireChangeEvent( DebugEvent.CONTENT );
} }
catch( DebugException e ) catch( DebugException e )
@ -611,7 +606,7 @@ public abstract class CVariable extends CDebugElement
*/ */
public boolean isEditable() public boolean isEditable()
{ {
if ( fEditable == null ) if ( fEditable == null && getCDIVariable() != null )
{ {
try try
{ {
@ -624,4 +619,9 @@ public abstract class CVariable extends CDebugElement
} }
return ( fEditable != null ) ? fEditable.booleanValue() : false; return ( fEditable != null ) ? fEditable.booleanValue() : false;
} }
protected boolean isPointer()
{
return isEditable() && hasChildren();
}
} }

View file

@ -1,3 +1,8 @@
2003-03-18 Mikhail Khodjaiants
Removed the gdb-specific variable parsing.
* VariableFormatActionDelegate.java
* CDTDebugModelPresentation.java
2003-03-17 Mikhail Khodjaiants 2003-03-17 Mikhail Khodjaiants
Replace range by start index and length in 'Display As Array' action. Replace range by start index and length in 'Display As Array' action.
* CastToArrayActionDelegate.java * CastToArrayActionDelegate.java

View file

@ -25,7 +25,7 @@ import org.eclipse.cdt.debug.core.model.ICDebugTargetType;
import org.eclipse.cdt.debug.core.model.ICFunctionBreakpoint; import org.eclipse.cdt.debug.core.model.ICFunctionBreakpoint;
import org.eclipse.cdt.debug.core.model.ICLineBreakpoint; import org.eclipse.cdt.debug.core.model.ICLineBreakpoint;
import org.eclipse.cdt.debug.core.model.ICSharedLibrary; import org.eclipse.cdt.debug.core.model.ICSharedLibrary;
import org.eclipse.cdt.debug.core.model.ICValue; import org.eclipse.cdt.debug.core.model.ICVariable;
import org.eclipse.cdt.debug.core.model.ICWatchpoint; import org.eclipse.cdt.debug.core.model.ICWatchpoint;
import org.eclipse.cdt.debug.core.model.IDummyStackFrame; import org.eclipse.cdt.debug.core.model.IDummyStackFrame;
import org.eclipse.cdt.debug.core.model.IExecFileInfo; import org.eclipse.cdt.debug.core.model.IExecFileInfo;
@ -489,29 +489,9 @@ public class CDTDebugModelPresentation extends LabelProvider
} }
label += var.getName(); label += var.getName();
IValue value = var.getValue(); IValue value = var.getValue();
if ( value != null && value.getValueString() != null ) if ( value != null && value.getValueString() != null && value.getValueString().trim().length() > 0 )
{ {
if ( value instanceof ICValue ) label += "= " + value.getValueString();
{
switch( ((ICValue)value).getType() )
{
case ICValue.TYPE_ARRAY:
label += value.getValueString();
break;
case ICValue.TYPE_STRUCTURE:
break;
case ICValue.TYPE_KEYWORD:
break;
default:
label += "= " + value.getValueString();
break;
}
}
else
{
label += "= " + value.getValueString();
}
} }
} }
return label; return label;
@ -787,24 +767,11 @@ public class CDTDebugModelPresentation extends LabelProvider
protected Image getVariableImage( IVariable element ) throws DebugException protected Image getVariableImage( IVariable element ) throws DebugException
{ {
if ( element != null ) if ( element instanceof ICVariable )
{ {
IValue value = element.getValue(); if ( !((ICVariable)element).isEditable() )
if ( value instanceof ICValue )
return getValueTypeImage( (ICValue)value );
}
return null;
}
protected Image getValueTypeImage( ICValue element )
{
if ( element != null )
{
if ( element.getType() == ICValue.TYPE_ARRAY ||
element.getType() == ICValue.TYPE_STRUCTURE ||
element.getType() == ICValue.TYPE_KEYWORD )
return fDebugImageRegistry.get( new CImageDescriptor( CDebugImages.DESC_OBJS_VARIABLE_AGGREGATE, 0 ) ); return fDebugImageRegistry.get( new CImageDescriptor( CDebugImages.DESC_OBJS_VARIABLE_AGGREGATE, 0 ) );
else if ( element.getType() == ICValue.TYPE_POINTER ) else if ( ((ICVariable)element).hasChildren() )
return fDebugImageRegistry.get( new CImageDescriptor( CDebugImages.DESC_OBJS_VARIABLE_POINTER, 0 ) ); return fDebugImageRegistry.get( new CImageDescriptor( CDebugImages.DESC_OBJS_VARIABLE_POINTER, 0 ) );
else else
return fDebugImageRegistry.get( new CImageDescriptor( CDebugImages.DESC_OBJS_VARIABLE_SIMPLE, 0 ) ); return fDebugImageRegistry.get( new CImageDescriptor( CDebugImages.DESC_OBJS_VARIABLE_SIMPLE, 0 ) );

View file

@ -6,12 +6,10 @@
package org.eclipse.cdt.debug.internal.ui.actions; package org.eclipse.cdt.debug.internal.ui.actions;
import org.eclipse.cdt.debug.core.cdi.ICDIFormat; import org.eclipse.cdt.debug.core.cdi.ICDIFormat;
import org.eclipse.cdt.debug.core.model.ICValue;
import org.eclipse.cdt.debug.core.model.ICVariable; import org.eclipse.cdt.debug.core.model.ICVariable;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
@ -114,28 +112,7 @@ public class VariableFormatActionDelegate implements IObjectActionDelegate
private boolean enablesFor( ICVariable var ) private boolean enablesFor( ICVariable var )
{ {
boolean enabled = false; return var.isEditable();
try
{
IValue value = var.getValue();
if ( value != null && value instanceof ICValue )
{
switch( ((ICValue)value).getType() )
{
// case ICValue.TYPE_ARRAY:
case ICValue.TYPE_SIMPLE:
case ICValue.TYPE_POINTER:
case ICValue.TYPE_CHAR:
enabled = true;
break;
}
}
}
catch( DebugException e )
{
}
return enabled;
} }
private void setVariable( ICVariable var ) private void setVariable( ICVariable var )