mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Patch for Devin Steffler.
Validation/fixes for the following defects: 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
This commit is contained in:
parent
cd8ccc6b17
commit
0abbfb7df8
2 changed files with 93 additions and 3 deletions
|
@ -1562,7 +1562,7 @@ public class DOMSelectionParseTest extends DOMSelectionParseBaseTest {
|
|||
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$
|
||||
|
@ -1586,6 +1586,94 @@ public class DOMSelectionParseTest extends DOMSelectionParseBaseTest {
|
|||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -98,7 +98,9 @@ public class CElementHyperlinkDetector implements IHyperlinkDetector{
|
|||
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);
|
||||
|
|
Loading…
Add table
Reference in a new issue