[
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;