[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] FIXED: 86698, 64181, 80823, 64326
|
FIXED 86698- [Selection] selecting from
constructor chain initializer fails to find IASTNode due to stop condition
FIXED 64181- [Search] Open declaration
on a namespace does not offer all possible declarations
FIXED 80823- [F3] Open Declaration should
find #defines of basic_types
FIXED 64326- [Search] Hyperlink navigation
does not work on referenced class/struct/union members
Devin Steffler
IBM's Eclipse CDT
Ottawa (Palladium), Ontario, Canada
Index: src/org/eclipse/cdt/internal/ui/editor/CElementHyperlinkDetector.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CElementHyperlinkDetector.java,v
retrieving revision 1.1
diff -u -r1.1 CElementHyperlinkDetector.java
--- src/org/eclipse/cdt/internal/ui/editor/CElementHyperlinkDetector.java 25 Feb 2005 19:46:32 -0000 1.1
+++ src/org/eclipse/cdt/internal/ui/editor/CElementHyperlinkDetector.java 27 Apr 2005 19:24:23 -0000
@@ -98,7 +98,9 @@
String slas = document.get(start,1);
if (slas.equals("\n") || //$NON-NLS-1$
slas.equals("\t") || //$NON-NLS-1$
- slas.equals(" ")) //$NON-NLS-1$
+ slas.equals(" ") || //$NON-NLS-1$
+ slas.equals(">") || //$NON-NLS-1$
+ slas.equals(".")) //$NON-NLS-1$
{
selWord =document.get(start+1, end - start - 1);
Index: parser/org/eclipse/cdt/core/parser/tests/ast2/DOMSelectionParseTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMSelectionParseTest.java,v
retrieving revision 1.1
diff -u -r1.1 DOMSelectionParseTest.java
--- parser/org/eclipse/cdt/core/parser/tests/ast2/DOMSelectionParseTest.java 27 Apr 2005 17:43:33 -0000 1.1
+++ parser/org/eclipse/cdt/core/parser/tests/ast2/DOMSelectionParseTest.java 27 Apr 2005 19:24:09 -0000
@@ -1562,7 +1562,7 @@
assertEquals( ((ASTNode)refs[0]).getLength(), 8);
}
- public void testBug86698() throws Exception {
+ public void testBug86698A() throws Exception {
Writer writer = new StringWriter();
writer.write("struct C;\n"); //$NON-NLS-1$
writer.write("void no_opt(C*);\n"); //$NON-NLS-1$
@@ -1585,7 +1585,95 @@
assertEquals( ((ASTNode)decls[0]).getOffset(), 42);
assertEquals( ((ASTNode)decls[0]).getLength(), 1);
}
+
+ public void testBug86698B() throws Exception {
+ Writer writer = new StringWriter();
+ writer.write("void foo() {\n"); //$NON-NLS-1$
+ writer.write("int f(int);\n"); //$NON-NLS-1$
+ writer.write("class C {\n"); //$NON-NLS-1$
+ writer.write("int i;\n"); //$NON-NLS-1$
+ writer.write("double d;\n"); //$NON-NLS-1$
+ writer.write("public:\n"); //$NON-NLS-1$
+ writer.write("C(int, double);\n"); //$NON-NLS-1$
+ writer.write("};\n"); //$NON-NLS-1$
+ writer.write("C::C(int ii, double id)\n"); //$NON-NLS-1$
+ writer.write("try\n"); //$NON-NLS-1$
+ writer.write(": i(f(ii)), d(id)\n"); //$NON-NLS-1$
+ writer.write("{\n"); //$NON-NLS-1$
+ writer.write("// constructor function body\n"); //$NON-NLS-1$
+ writer.write("}\n"); //$NON-NLS-1$
+ writer.write("catch (...)\n"); //$NON-NLS-1$
+ writer.write("{\n"); //$NON-NLS-1$
+ writer.write("// handles exceptions thrown from the ctorinitializer\n"); //$NON-NLS-1$
+ writer.write("// and from the constructor function body\n"); //$NON-NLS-1$
+ writer.write("}\n"); //$NON-NLS-1$
+ writer.write("}\n"); //$NON-NLS-1$
+
+ String code = writer.toString();
+
+ int index = code.indexOf("i(f(ii)), d(id)"); //$NON-NLS-1$
+ IASTNode node = parse( code, index, index + 1, true );
+ assertTrue( node instanceof IASTName );
+ assertTrue( ((IASTName)node).resolveBinding() instanceof ICPPField );
+ assertEquals( ((IASTName)node).toString(), "i" ); //$NON-NLS-1$
+
+ IASTName[] decls = getDeclarationOffTU((IASTName)node);
+ assertEquals(decls.length, 1);
+ assertEquals( decls[0].toString(), "i" ); //$NON-NLS-1$
+ assertEquals( ((ASTNode)decls[0]).getOffset(), 39);
+ assertEquals( ((ASTNode)decls[0]).getLength(), 1);
+ }
+
+ public void testBug64181() throws Exception
+ {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("namespace Foo { // ** (A) **\n"); //$NON-NLS-1$
+ buffer.append("int bar;\n"); //$NON-NLS-1$
+ buffer.append("}\n"); //$NON-NLS-1$
+ buffer.append("namespace Foo { // ** (B) **\n"); //$NON-NLS-1$
+ buffer.append("long fooboo;\n"); //$NON-NLS-1$
+ buffer.append("}\n"); //$NON-NLS-1$
+ buffer.append("int \n"); //$NON-NLS-1$
+ buffer.append("main(int argc, char **argv) {\n"); //$NON-NLS-1$
+ buffer.append("Foo::bar; // ** (C) **\n"); //$NON-NLS-1$
+ buffer.append("}\n"); //$NON-NLS-1$
+
+ String code = buffer.toString();
+ int index = code.indexOf("Foo::bar;"); //$NON-NLS-1$
+ IASTNode node = parse( code, index, index + 3, true );
+ assertNotNull( node );
+ assertTrue( node instanceof IASTName );
+ assertTrue( ((IASTName)node).resolveBinding() instanceof ICPPNamespace );
+ assertEquals( ((IASTName)node).toString(), "Foo" ); //$NON-NLS-1$
+ IASTName[] decls = getDeclarationOffTU((IASTName)node);
+ assertEquals(decls.length, 2);
+ assertEquals( decls[0].toString(), "Foo" ); //$NON-NLS-1$
+ assertEquals( ((ASTNode)decls[0]).getOffset(), 10);
+ assertEquals( ((ASTNode)decls[0]).getLength(), 3);
+ assertEquals( ((ASTNode)decls[1]).getOffset(), 50);
+ assertEquals( ((ASTNode)decls[1]).getLength(), 3);
+ }
+
+ public void testBug80823() throws Exception
+ {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("class MyEggImpl {}; // line A\n"); //$NON-NLS-1$
+ buffer.append("#define MyChicken MyEggImpl\n"); //$NON-NLS-1$
+ buffer.append("MyChicken c; // line C\n"); //$NON-NLS-1$
-
+ String code = buffer.toString();
+ int index = code.indexOf("MyChicken c;"); //$NON-NLS-1$
+ IASTNode node = parse( code, index, index + 9, true );
+ assertNotNull( node );
+ assertTrue( node instanceof IASTName );
+ assertTrue( ((IASTName)node).resolveBinding() instanceof IMacroBinding );
+ assertEquals( ((IASTName)node).toString(), "MyChicken" ); //$NON-NLS-1$
+ IASTName[] decls = getDeclarationOffTU((IASTName)node);
+ assertEquals(decls.length, 1);
+ assertEquals( decls[0].toString(), "MyChicken" ); //$NON-NLS-1$
+ assertEquals( ((ASTNode)decls[0]).getOffset(), 38);
+ assertEquals( ((ASTNode)decls[0]).getLength(), 9);
+ }
+
}