Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Added the 'isEditable' and 'hasChildren' methods to the 'ICVariable' interface

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/ChangeLog,v
retrieving revision 1.145
diff -u -r1.145 ChangeLog
--- ChangeLog 14 Mar 2003 19:10:17 -0000 1.145
+++ ChangeLog 14 Mar 2003 23:11:40 -0000
@@ -1,4 +1,10 @@
 2003-03-14 Mikhail Khodjaiants
+ Added the 'isEditable' and 'hasChildren' methods to the 'ICVariable' interface.
+ * ICVariable.java
+ * CVariable.java
+ * CModificationVariable.java
+
+2003-03-14 Mikhail Khodjaiants
  Cross-referencing projects cause the debugger to go into a stack overflow exception.
  Make sure that there is only one source location for each referenced project.
  * CSourceLocator.java
Index: src/org/eclipse/cdt/debug/core/model/ICVariable.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICVariable.java,v
retrieving revision 1.1
diff -u -r1.1 ICVariable.java
--- src/org/eclipse/cdt/debug/core/model/ICVariable.java 17 Dec 2002 02:41:32 -0000 1.1
+++ src/org/eclipse/cdt/debug/core/model/ICVariable.java 14 Mar 2003 23:11:40 -0000
@@ -21,4 +21,8 @@
  void setFormat( int format ) throws DebugException;
  
  void refresh() throws DebugException;

+ boolean isEditable();

+ boolean hasChildren();
 }
Index: src/org/eclipse/cdt/debug/internal/core/model/CModificationVariable.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CModificationVariable.java,v
retrieving revision 1.10
diff -u -r1.10 CModificationVariable.java
--- src/org/eclipse/cdt/debug/internal/core/model/CModificationVariable.java 10 Mar 2003 21:27:13 -0000 1.10
+++ src/org/eclipse/cdt/debug/internal/core/model/CModificationVariable.java 14 Mar 2003 23:11:41 -0000
@@ -24,8 +24,6 @@
  */
 public abstract class CModificationVariable extends CVariable
 {
- private Boolean fEditable = null;
-
  /**
   * Constructor for CModificationVariable.
   * @param parent
@@ -41,26 +39,8 @@
   */
  public boolean supportsValueModification()
  {
-  if ( fEditable == null )
-  {
-   CDebugTarget target = (CDebugTarget)getDebugTarget().getAdapter( CDebugTarget.class );
-   if ( target != null && !target.isCoreDumpTarget() )
-   {
-    try
-    {
-     fEditable = new Boolean( getCDIVariable().isEditable() );
-    }
-    catch( CDIException e )
-    {
-     logError( e );
-    }
-   }
-   else
-   {
-    fEditable = new Boolean( false );
-   }
-  }
-  return ( fEditable != null ) ? fEditable.booleanValue() : false;
+  CDebugTarget target = (CDebugTarget)getDebugTarget().getAdapter( CDebugTarget.class );
+  return ( target != null && !target.isCoreDumpTarget() && isEditable() );
  }
 
  /**
Index: src/org/eclipse/cdt/debug/internal/core/model/CVariable.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CVariable.java,v
retrieving revision 1.19
diff -u -r1.19 CVariable.java
--- src/org/eclipse/cdt/debug/internal/core/model/CVariable.java 13 Mar 2003 21:13:53 -0000 1.19
+++ src/org/eclipse/cdt/debug/internal/core/model/CVariable.java 14 Mar 2003 23:11:41 -0000
@@ -57,6 +57,8 @@
   */
  protected ICValue fValue;
 
+ private Boolean fEditable = null;
+
  /**
   * Counter corresponding to this variable's debug target
   * suspend count indicating the last time this value
@@ -436,6 +438,7 @@
     ((CValue)fValue).dispose();
     fValue = null;
    }
+   fEditable = null;
    fTypeName = null;
    fireChangeEvent( DebugEvent.STATE );
   }
@@ -471,6 +474,7 @@
    ((CValue)fValue).dispose();
    fValue = null;
   }
+  fEditable = null;
   fTypeName = null;
   fireChangeEvent( DebugEvent.STATE );
  }
@@ -480,7 +484,8 @@
   */
  public boolean supportsCasting()
  {
-  return supportsValueModification();
+  CDebugTarget target = (CDebugTarget)getDebugTarget().getAdapter( CDebugTarget.class );
+  return ( target != null && isEditable() );
  }
  
  protected ICDIVariable getOriginalCDIVariable()
@@ -502,8 +507,7 @@
  {
   try
   {
-   ICDIVariableObject originalVarObject = getCDISession().getVariableManager().getVariableObject( cdiFrame, getOriginalCDIVariable().getName() );
-   ICDIVariableObject varObject = getCDISession().getVariableManager().getVariableObjectAsType( originalVarObject, type );
+   ICDIVariableObject varObject = getCDISession().getVariableManager().getVariableObjectAsType( getOriginalCDIVariable(), type );
    return getCDISession().getVariableManager().createVariable( varObject );
   }
   catch( CDIException e )
@@ -517,8 +521,7 @@
  {
   try
   {
-   ICDIVariableObject originalVarObject = getCDISession().getVariableManager().getVariableObject( cdiFrame, getOriginalCDIVariable().getName() );
-   ICDIVariableObject varObject = getCDISession().getVariableManager().getVariableObjectAsArray( originalVarObject, type, start, end );
+   ICDIVariableObject varObject = getCDISession().getVariableManager().getVariableObjectAsArray( getOriginalCDIVariable(), type, start, end );
    return getCDISession().getVariableManager().createVariable( varObject );
   }
   catch( CDIException e )
@@ -572,6 +575,7 @@
     ((CValue)fValue).dispose();
     fValue = null;
    }
+   fEditable = null;
    fTypeName = null;
    fireChangeEvent( DebugEvent.STATE );
   }
@@ -582,14 +586,42 @@
   */
  public boolean supportsCastToArray()
  {
+  CDebugTarget target = (CDebugTarget)getDebugTarget().getAdapter( CDebugTarget.class );
+  return ( target != null && isEditable() && hasChildren() );
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.model.ICVariable#hasChildren()
+  */
+ public boolean hasChildren()
+ {
   try
   {
-   return ( supportsValueModification() && getValue().hasVariables() );
+   return ( getValue() != null && getValue().hasVariables() );
   }
   catch( DebugException e )
   {
    logError( e );
   }
   return false;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.model.ICVariable#isEditable()
+  */
+ public boolean isEditable()
+ {
+  if ( fEditable == null )
+  {
+   try
+   {
+    fEditable = new Boolean( getCDIVariable().isEditable() );
+   }
+   catch( CDIException e )
+   {
+    logError( e );
+   }
+  }
+  return ( fEditable != null ) ? fEditable.booleanValue() : false;
  }
 }

Back to the top