From 2a023a46e08d5c26aaafb52928e54d59d476b0ae Mon Sep 17 00:00:00 2001 From: Mike Kucera Date: Tue, 17 Mar 2009 15:19:58 +0000 Subject: [PATCH] bug 268604, hyperlinks for overloaded operators --- .../cdt/ui/tests/text/HyperlinkTest.java | 10 +++++++++- .../ui/editor/CElementHyperlinkDetector.java | 20 ++++++++++++------- 2 files changed, 22 insertions(+), 8 deletions(-) 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 36bbcba3322..c04bd9cb4c0 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 @@ -50,11 +50,13 @@ public class HyperlinkTest extends TestCase { " void set(int x, int y); \n" + " int getX(); \n" + " int getY(); \n" + + " Point operator+(Point); \n" + " private: \n" + " int x, y; \n" + "}; \n" + - "int main() { \n" + + "int test(Point p) { \n" + " char* str = \"STRING LITERAL\"; \n" + + " p + p;" + "} \n"; @@ -172,6 +174,9 @@ public class HyperlinkTest extends TestCase { assertHyperlink(CPP_CODE.indexOf("set(") + 1, CPP_CODE.indexOf("set("), "set".length()); assertHyperlink(CPP_CODE.indexOf("getX()") + 1, CPP_CODE.indexOf("getX()"), "getX".length()); assertHyperlink(CPP_CODE.indexOf("getY()") + 1, CPP_CODE.indexOf("getY()"), "getY".length()); + + // hyperlinks for overloaded operators + assertHyperlink(CPP_CODE.indexOf("+ p"), CPP_CODE.indexOf("+ p"), 1); } @@ -180,6 +185,9 @@ public class HyperlinkTest extends TestCase { // 'class' is not a keyword in C, it should be hyperlinked assertHyperlink(C_CODE_1.indexOf("class") + 1, C_CODE_1.indexOf("class"), "class".length()); + + // no hyperlinks for numeric literals + assertNotHyperlink(C_CODE_1.indexOf("99") + 1); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CElementHyperlinkDetector.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CElementHyperlinkDetector.java index 216b72de952..173845d6b62 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CElementHyperlinkDetector.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CElementHyperlinkDetector.java @@ -91,10 +91,16 @@ public class CElementHyperlinkDetector extends AbstractHyperlinkDetector { } } else { - // search for include statement - final IASTNode cand= nodeSelector.findEnclosingNode(offset, length); - if (cand instanceof IASTPreprocessorIncludeStatement) { - linkLocation= cand.getFileLocation(); + final IASTNode implicit = nodeSelector.findEnclosingImplicitName(offset, length); + if(implicit != null) { + linkLocation = implicit.getFileLocation(); + } + else { + // search for include statement + final IASTNode cand= nodeSelector.findEnclosingNode(offset, length); + if (cand instanceof IASTPreprocessorIncludeStatement) { + linkLocation= cand.getFileLocation(); + } } } if (linkLocation != null) { @@ -106,13 +112,13 @@ public class CElementHyperlinkDetector extends AbstractHyperlinkDetector { IRegion wordRegion= CWordFinder.findWord(document, offset); if (wordRegion != null) { try { - String word= document.get(wordRegion.getOffset(), wordRegion.getLength()); - if (!isLanguageKeyword(lang, word)) { + String word = document.get(wordRegion.getOffset(), wordRegion.getLength()); + if(word.length() > 0 && !Character.isDigit(word.charAt(0)) && !isLanguageKeyword(lang, word)) { result[0]= new CElementHyperlink( new Region(wordRegion.getOffset(), wordRegion.getLength()), openAction); } } catch (BadLocationException exc) { - // ingore + // ignore } } }