Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Fix for PR 39737: Tooltip in debug mode over long strings is not handled properly

Index: DebugTextHover.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/DebugTextHover.java,v
retrieving revision 1.8
diff -u -r1.8 DebugTextHover.java
--- DebugTextHover.java 23 Jan 2003 18:54:33 -0000 1.8
+++ DebugTextHover.java 30 Sep 2003 16:05:59 -0000
@@ -31,6 +31,8 @@
  */
 public class DebugTextHover implements ITextHover
 {
+ static final private int MAX_HOVER_INFO_SIZE = 100;
+
  /**
   * Constructor for DebugTextHover.
   */
@@ -82,36 +84,17 @@
     StringBuffer buffer = new StringBuffer();
     boolean showDebugTarget = targetList.size() > 1;
     Iterator iterator = targetList.iterator();
-    boolean first = true;
     while ( iterator.hasNext() )
     {
      IDebugTarget target = (IDebugTarget)iterator.next();
      ICExpressionEvaluator ee = (ICExpressionEvaluator)target.getAdapter( ICExpressionEvaluator.class );
      if ( ee.canEvaluate() )
      {
-      String result = evaluateExpression( ee, _expression_ );
+      String result = evaluateExpression( ee, _expression_ ).trim();
       try
       {
        if ( result != null )
-       {
-        if ( first )
-        {
-         first = false;
-        }
-        else
-        {
-         buffer.append( '\n' );
-        }
-        if ( showDebugTarget )
-        {
-         buffer.append( '[' );
-         buffer.append( target.getName() );
-         buffer.append( "]: " );
-        }
-        buffer.append( _expression_ );
-        buffer.append( '=' );
-        buffer.append( result );
-       }
+        appendVariable( buffer, _expression_, result, showDebugTarget ? target.getName() : null );
       }
       catch( DebugException x )
       {
@@ -162,5 +145,62 @@
    // ignore
   }
   return result;
+ }
+
+ /**
+  * A variable gets one line for each debug target it appears in.
+  */
+ private static void appendVariable( StringBuffer buffer,
+          String _expression_,
+          String value,
+          String debugTargetName ) throws DebugException
+ {
+  if ( value.length() > MAX_HOVER_INFO_SIZE )
+   value = value.substring( 0, MAX_HOVER_INFO_SIZE ) + " ...";
+  buffer.append( "<p>" ); //$NON-NLS-1$
+  if ( debugTargetName != null )
+  {
+   buffer.append( '[' + debugTargetName + "]&nbsp;" ); //$NON-NLS-1$
+  }
+  buffer.append( makeHTMLSafe( _expression_ ) );
+  buffer.append( " = " ); //$NON-NLS-1$
+  
+  String safeValue = "<b>" + makeHTMLSafe( value ) + "</b>"; //$NON-NLS-1$ //$NON-NLS-2$
+  buffer.append( safeValue );   
+  buffer.append( "</p>" ); //$NON-NLS-1$
+ }
+
+ /**
+  * Replace any characters in the given String that would confuse an HTML
+  * parser with their escape sequences.
+  */
+ private static String makeHTMLSafe( String string )
+ {
+  StringBuffer buffer = new StringBuffer( string.length() );

+  for ( int i = 0; i != string.length(); i++ )
+  {
+   char ch = string.charAt( i );
+   
+   switch( ch )
+   {
+    case '&':
+     buffer.append( "&amp;" ); //$NON-NLS-1$
+     break;
+     
+    case '<':
+     buffer.append( "&lt;" ); //$NON-NLS-1$
+     break;
+
+    case '>':
+     buffer.append( "&gt;" ); //$NON-NLS-1$
+     break;
+
+    default:
+     buffer.append( ch );
+     break;
+   }
+  }
+  return buffer.toString();  
  }
 }
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/ChangeLog,v
retrieving revision 1.186
diff -u -r1.186 ChangeLog
--- ChangeLog 25 Sep 2003 02:12:59 -0000 1.186
+++ ChangeLog 30 Sep 2003 16:06:17 -0000
@@ -1,19 +1,25 @@
-2003-10-24 Mikhail Khodjaiants
+2003-09-30 Mikhail Khodjaiants
+ Fix for PR 39737: Tooltip in debug mode over long strings is not handled properly.
+ Added an internal constant to limit the hover text size.
+ Present the hover text in HTML format.
+ * DebugTextHover.java
+
+2003-09-24 Mikhail Khodjaiants
  Fix for PR 43624: The "Show Types Name" action of the Registers view doesn't work.
  * ShowRegisterTypesAction.java
  * RegistersView.java
 
-2003-10-22 Mikhail Khodjaiants
+2003-09-22 Mikhail Khodjaiants
  Moved the 'AddAddressBreakpointActionDelegate' action
  to the 'org.eclipse.cdt.debug.internal.ui.actions' package.
  * AddAddressBreakpointActionDelegate.java
  * plugin.xml
 
-2003-10-16 Mikhail Khodjaiants
+2003-09-16 Mikhail Khodjaiants
  Cleanup.
  * CUISourceLocator.java
 
-2003-10-11 Mikhail Khodjaiants
+2003-09-11 Mikhail Khodjaiants
  Reset the selection of variable after casting.
  * CastToArrayActionDelegate.java
  * CastToTypeActionDelegate.java

Back to the top