Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Patch for bug 40101


Hi,

Proposed patch for bug no 40101 is attached.



Thanks,
Ravi
Extn: 2751
Mobile:9886432301
### Eclipse Workspace Patch 1.0
#P org.eclipse.cdt.ui
Index: src/org/eclipse/cdt/internal/ui/text/c/hover/AbstractCEditorTextHover.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/c/hover/AbstractCEditorTextHover.java,v
retrieving revision 1.2
diff -u -r1.2 AbstractCEditorTextHover.java
--- src/org/eclipse/cdt/internal/ui/text/c/hover/AbstractCEditorTextHover.java	23 Jun 2005 16:01:24 -0000	1.2
+++ src/org/eclipse/cdt/internal/ui/text/c/hover/AbstractCEditorTextHover.java	22 Jun 2006 13:40:23 -0000
@@ -23,7 +23,9 @@
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextHoverExtension;
 import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.commands.ICommand;
@@ -61,7 +63,21 @@
 	 * @see ITextHover#getHoverRegion(ITextViewer, int)
 	 */
 	public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
-		return CWordFinder.findWord(textViewer.getDocument(), offset);
+		if( textViewer != null )
+		{
+			/* If the hover offset falls within the selection range
+			 * return the region for the whole selection. */
+			Point selectedRange = textViewer.getSelectedRange(); 
+			if ( selectedRange.x >= 0 && selectedRange.y > 0 && 
+		       offset >= selectedRange.x && offset <= selectedRange.x 
+		       + selectedRange.y ) 
+				return new Region( selectedRange.x, selectedRange.y );
+			else
+			{
+				return CWordFinder.findWord(textViewer.getDocument(), offset);
+			}
+		}
+		return null;
 	}
 
 //	protected ICodeAssist getCodeAssist() {
#P org.eclipse.cdt.debug.ui
Index: src/org/eclipse/cdt/debug/internal/ui/editors/DebugTextHover.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/DebugTextHover.java,v
retrieving revision 1.17
diff -u -r1.17 DebugTextHover.java
--- src/org/eclipse/cdt/debug/internal/ui/editors/DebugTextHover.java	23 Jun 2005 16:00:55 -0000	1.17
+++ src/org/eclipse/cdt/debug/internal/ui/editors/DebugTextHover.java	22 Jun 2006 13:40:27 -0000
@@ -23,17 +23,63 @@
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextHoverExtension;
 import org.eclipse.jface.text.ITextViewer;
+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 java.util.regex.*;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IPartListener;
 import org.eclipse.ui.ISelectionListener;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
 
+/* The class LanguageOperators protects some language specific
+ * operator information used by the DebugTextHover class.
+ */
+
+class LanguageOperators
+{
+	public String getAssignmentOperator()
+	{
+		return "=";
+	}
+	public String getGreaterThanEqualToOperator()
+	{
+		return ">=";
+	}
+	public String getEqualToOperator()
+	{	
+		return "==";
+	}
+	public String getNotEqualToOperator()
+	{
+		return "!=";
+	}
+	public String getLessThenEqualToOperator()
+	{
+		return "<=";
+	}
+	public String getValueChangeOperatorsRegex()
+	{
+		return "(\\+\\+)|(\\-\\-)|(\\+\\=)|" +
+        	   "(\\-\\=)|(\\*\\=)|(/\\=)|(\\&\\=)" +
+        	   "(\\%\\=)|(\\^\\=)|(\\|\\=)|(\\<\\<\\=)|(\\>\\>\\=)";
+	}
+	public String getEqualToOperatorsRegex()
+	{
+		return "\\=\\=|\\<\\=|\\>\\=|!\\=";
+	}
+	public String getIdentifierRegex()
+	{
+		return "[_A-Za-z][_A-Za-z0-9]*";
+	}
+}
+
 /**
  * The text hovering support for C/C++ debugger.
  */
+
 public class DebugTextHover implements ICEditorTextHover, ITextHoverExtension, ISelectionListener, IPartListener {
 
 	static final private int MAX_HOVER_INFO_SIZE = 100;
@@ -52,7 +98,14 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.jface.text.ITextHover#getHoverInfo(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
+	 * @see org.eclipse.jface.text.ITextHover#getHoverInfo(org.eclipse.jf
+	 * 
+	 * 
+	 * 
+	 * 
+	 * 
+	 * 
+	 * ace.text.ITextViewer, org.eclipse.jface.text.IRegion)
 	 */
 	public String getHoverInfo( ITextViewer textViewer, IRegion hoverRegion ) {
 		ICStackFrame frame = getFrame();
@@ -67,6 +120,43 @@
 				expression = expression.trim();
 				if ( expression.length() == 0 )
 					return null;
+				LanguageOperators operatorsObj = new LanguageOperators();
+				
+				Pattern pattern = Pattern.compile(operatorsObj.getValueChangeOperatorsRegex());
+				Matcher matcher = pattern.matcher(expression);
+		
+				boolean match_found = matcher.find();
+	            // Get matching string
+				// If the expression has some operators which can change the
+				// value of a variable, that expresssion should not be
+				// evaluated.
+				if( match_found )
+				{
+					return null;
+				}
+				else
+				{
+					pattern = Pattern.compile(operatorsObj.getEqualToOperatorsRegex());
+					String[] tokens = pattern.split(expression);
+					for( int i = 0;i < tokens.length;i ++ )
+					{
+						//If the expression contains assignment operator that
+						// can change the value of a variable, the expression
+						// should not be evaluated.
+						if( tokens[i].indexOf(operatorsObj.getAssignmentOperator()) != -1 )
+							return null;
+					}
+					//Supressing function calls from evaluation.
+					String functionCallRegex = operatorsObj.getIdentifierRegex() +
+												"\\s*\\(";
+					pattern = Pattern.compile(functionCallRegex);
+					matcher = pattern.matcher(expression);
+					match_found = matcher.find();
+					if( match_found )
+					{
+						return null;
+					}
+				}
 				StringBuffer buffer = new StringBuffer();
 				String result = evaluateExpression( frame, expression );
 				if ( result == null )
@@ -96,13 +186,13 @@
 	 */
 	public IRegion getHoverRegion( ITextViewer viewer, int offset ) {
 		/*
-		 * Point selectedRange = viewer.getSelectedRange(); if ( selectedRange.x >= 0 && selectedRange.y > 0 && offset >= selectedRange.x && offset <=
-		 * selectedRange.x + selectedRange.y ) return new Region( selectedRange.x, selectedRange.y );
-		 */
-		if ( viewer != null )
-			return CDebugUIUtils.findWord( viewer.getDocument(), offset );
-		return null;
-	}
+			* Point selectedRange = viewer.getSelectedRange(); if ( selectedRange.x >= 0 && selectedRange.y > 0 && offset >= selectedRange.x && offset <=
+			* selectedRange.x + selectedRange.y ) return new Region( selectedRange.x, selectedRange.y );
+			*/
+				if ( viewer != null )
+		 			return CDebugUIUtils.findWord( viewer.getDocument(), offset );
+				return null;
+		}
 
 	private String evaluateExpression( ICStackFrame frame, String expression ) {
 		String result = null;

Back to the top