Skip to main content
summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorSergey Prigogin2009-07-25 18:16:41 -0400
committerSergey Prigogin2009-07-25 18:16:41 -0400
commitaf187fe16bdf292272edebb94acb23115f5c0ed9 (patch)
treeff7117e00ce2f9083ae2bb994b51776c4678f764 /core
parentd81f6be21be9f020dd2a4385cca1a9a3670da602 (diff)
downloadorg.eclipse.cdt-af187fe16bdf292272edebb94acb23115f5c0ed9.tar.gz
org.eclipse.cdt-af187fe16bdf292272edebb94acb23115f5c0ed9.tar.xz
org.eclipse.cdt-af187fe16bdf292272edebb94acb23115f5c0ed9.zip
Bug 284664.
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CWordFinderTest.java27
-rw-r--r--core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/HyperlinkTest.java20
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CWordFinder.java61
3 files changed, 66 insertions, 42 deletions
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CWordFinderTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CWordFinderTest.java
index 9b0676b71f..4591f253cb 100644
--- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CWordFinderTest.java
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CWordFinderTest.java
@@ -7,6 +7,7 @@
*
* Contributors:
* Anton Leherbauer (Wind River Systems) - initial API and implementation
+ * Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.ui.tests.text;
@@ -39,6 +40,32 @@ public class CWordFinderTest extends BaseUITestCase {
super.tearDown();
}
+ public void testBasic() {
+ IDocument doc= new Document(" func(int a, int b);");
+ IRegion region = CWordFinder.findWord(doc, 1);
+ assertEquals(1, region.getOffset());
+ assertEquals(4, region.getLength());
+ region = CWordFinder.findWord(doc, 4);
+ assertEquals(1, region.getOffset());
+ assertEquals(4, region.getLength());
+ region = CWordFinder.findWord(doc, 5);
+ assertEquals(1, region.getOffset());
+ assertEquals(4, region.getLength());
+ region = CWordFinder.findWord(doc, 6);
+ assertEquals(6, region.getOffset());
+ assertEquals(3, region.getLength());
+ region = CWordFinder.findWord(doc, 12);
+ assertEquals(12, region.getOffset());
+ assertEquals(0, region.getLength());
+ doc= new Document("func();");
+ region = CWordFinder.findWord(doc, 0);
+ assertEquals(0, region.getOffset());
+ assertEquals(4, region.getLength());
+ region = CWordFinder.findWord(doc, 5);
+ assertEquals(5, region.getOffset());
+ assertEquals(0, region.getLength());
+ }
+
public void testFindWord() throws BadLocationException {
IDocument doc= new Document();
StringBuffer buf= new StringBuffer();
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/HyperlinkTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/HyperlinkTest.java
index c04bd9cb4c..44726d8a69 100644
--- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/HyperlinkTest.java
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/HyperlinkTest.java
@@ -36,7 +36,6 @@ import org.eclipse.cdt.internal.ui.editor.CElementHyperlinkDetector;
* @author Mike Kucera
*/
public class HyperlinkTest extends TestCase {
-
private static final String CPP_FILE_NAME = "hyperlink_test_cpp.cpp";
private static final String CPP_CODE =
@@ -59,14 +58,12 @@ public class HyperlinkTest extends TestCase {
" p + p;" +
"} \n";
-
private static final String C_FILE_NAME_1 = "hyperlink_test_c_1.c";
private static final String C_CODE_1 =
"int main() { \n" +
" int class = 99; \n" +
"}";
-
private static final String C_FILE_NAME_2 = "hyperlink_test_c_2.c";
private static final String C_CODE_2 =
"#ifdef NOTDEF\n" +
@@ -74,17 +71,15 @@ public class HyperlinkTest extends TestCase {
"#else\n" +
" int itworks = 100; \n" +
"#endif\n";
-
-
+
private ICProject project;
private CEditor editor;
-
+
public static TestSuite suite() {
return new TestSuite(HyperlinkTest.class);
}
-
private void setUpEditor(String fileName, String code) throws Exception {
super.setUp();
project= CProjectHelper.createCCProject(super.getName(), "unused", IPDOMManager.ID_NO_INDEXER);
@@ -158,7 +153,7 @@ public class HyperlinkTest extends TestCase {
// no hyperlinks for punctuation
assertNotHyperlink(CPP_CODE.indexOf("{"));
assertNotHyperlink(CPP_CODE.indexOf("}"));
- assertNotHyperlink(CPP_CODE.indexOf("("));
+ assertNotHyperlink(CPP_CODE.indexOf("(" + 1));
assertNotHyperlink(CPP_CODE.indexOf(")"));
assertNotHyperlink(CPP_CODE.indexOf(":"));
assertNotHyperlink(CPP_CODE.indexOf(";"));
@@ -178,8 +173,7 @@ public class HyperlinkTest extends TestCase {
// hyperlinks for overloaded operators
assertHyperlink(CPP_CODE.indexOf("+ p"), CPP_CODE.indexOf("+ p"), 1);
}
-
-
+
public void testHyperlinksCKeywords() throws Exception {
setUpEditor(C_FILE_NAME_1, C_CODE_1);
@@ -189,8 +183,7 @@ public class HyperlinkTest extends TestCase {
// no hyperlinks for numeric literals
assertNotHyperlink(C_CODE_1.indexOf("99") + 1);
}
-
-
+
public void testHyperlinksInactiveCode() throws Exception {
setUpEditor(C_FILE_NAME_2, C_CODE_2);
@@ -202,7 +195,4 @@ public class HyperlinkTest extends TestCase {
// assertNotHyperlink(C_CODE_2.indexOf("nothere") + 1);
assertHyperlink(C_CODE_2.indexOf("itworks") + 1, C_CODE_2.indexOf("itworks"), "itworks".length());
}
-
-
-
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CWordFinder.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CWordFinder.java
index 8f4033d0bd..23739f5c8e 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CWordFinder.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CWordFinder.java
@@ -7,6 +7,7 @@
*
* Contributors:
* QNX Software Systems - Initial API and implementation
+ * Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text;
@@ -25,25 +26,30 @@ public class CWordFinder {
private static final char CBRACE_L = '{';
private static final char CBRACE_R = '}';
- private static final char BRACE_R = ')';
+ private static final char PAREN_R = ')';
/**
* This method determines for a given offset into a given document what the
- * region is which defines the current word. A word is defined as the set of
- * non "C" identifiers. So assuming that ! indicated the current cursor
- * postion: !afunction(int a, int b) --> word = length 0 afunc!tion(int a,
- * int b) --> word = afunction afunction!(int a, int b) --> word = afunction
- * afunction(!int a, int b) --> word = length 0 afunction(int a,! int b) -->
- * word = length 0 afunction(!) --> word = length 0
+ * region is which defines the current word. A word is defined as a contiguous
+ * sequence of C-identifier characters. So assuming that | indicates the current
+ * cursor position:
+ * <pre>
+ * |afunction(int a, int b) --> word = afunction
+ * afunc|tion(int a, int b) --> word = afunction
+ * afunction|(int a, int b) --> word = afunction
+ * afunction(|int a, int b) --> word = int
+ * afunction(int a,| int b) --> word = length 0
+ * afunction(|) --> word = length 0
+ * </pre>
*
* @param document
* The document to be examined
* @param offset
* The offset into the document where a word should be
- * idendified.
+ * identified.
* @return The region defining the current word, which may be a region of
* length 0 if the offset is not in a word, or null if there is an
- * error accessing the docment data.
+ * error accessing the document data.
*/
public static IRegion findWord(IDocument document, int offset) {
int start = -2;
@@ -53,11 +59,11 @@ public class CWordFinder {
int pos = offset;
char c;
- while (pos >= 0) {
+ while (--pos >= 0) {
c = document.getChar(pos);
- if (!Character.isJavaIdentifierPart(c))
+ if (!Character.isJavaIdentifierPart(c)) {
break;
- --pos;
+ }
}
start = pos;
@@ -73,7 +79,6 @@ public class CWordFinder {
}
end = pos;
-
} catch (BadLocationException x) {
}
@@ -97,10 +102,10 @@ public class CWordFinder {
* The document to be examined
* @param offset
* The offset into the document where a word should be
- * idendified.
+ * identified.
* @return The region defining the current word, which may be a region of
* length 0 if the offset is not in a function, or null if there is
- * an error accessing the docment data.
+ * an error accessing the document data.
*/
public static IRegion findFunction(IDocument document, int offset) {
int leftbracket = -1;
@@ -144,7 +149,7 @@ public class CWordFinder {
return new Region(offset, 0);
}
- //Now backtrack our way from the rightbracket to the left
+ // Now backtrack our way from the right bracket to the left
pos = rightbracket;
rightbracketcount = leftbracketcount = 0;
while (pos >= 0) {
@@ -173,7 +178,7 @@ public class CWordFinder {
return new Region(offset, 0);
}
- //Now work our way to the function name
+ // Now work our way to the function name
pos = leftbracket - 1;
while (pos >= 0) {
c = document.getChar(pos);
@@ -222,7 +227,7 @@ public class CWordFinder {
int bracketcount = 0;
char c;
- //Find left curled bracket from our position
+ // Find left curled brace from our position
while (pos > 0) {
c = document.getChar(pos--);
@@ -232,18 +237,19 @@ public class CWordFinder {
if (bracketcount-- == 0) {
do {
c = document.getChar(pos--);
- if (c == BRACE_R) return false;
+ if (c == PAREN_R)
+ return false;
} while (Character.isWhitespace(c));
- // container block seems to be not a function or statement body
+ // Container block seems to be not a function or statement body
pos++; // step back one symbol
bracketcount = 0; // let's search for upper block
}
}
}
-
- } catch (BadLocationException x) { /* Ignore */ }
- // return true in case of unknown result or exception
- return true;
+ } catch (BadLocationException x) {
+ // Ignore
+ }
+ return true; // return true in case of unknown result or exception
}
/**
@@ -258,14 +264,16 @@ public class CWordFinder {
int counter = 0;
char lf = 0;
char c;
- for (int i=0; i<s.length(); i++) {
+ for (int i= 0; i < s.length(); i++) {
c = s.charAt(i);
if (lf == 0) {
if (c == '\n' || c == '\r') {
lf = c;
counter++;
}
- } else if (lf == c) counter++;
+ } else if (lf == c) {
+ counter++;
+ }
}
return counter;
}
@@ -283,4 +291,3 @@ public class CWordFinder {
return false;
}
}
-

Back to the top