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);
|
assertEquals( ((ASTNode)refs[0]).getLength(), 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testBug86698() throws Exception {
|
public void testBug86698A() throws Exception {
|
||||||
Writer writer = new StringWriter();
|
Writer writer = new StringWriter();
|
||||||
writer.write("struct C;\n"); //$NON-NLS-1$
|
writer.write("struct C;\n"); //$NON-NLS-1$
|
||||||
writer.write("void no_opt(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);
|
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);
|
String slas = document.get(start,1);
|
||||||
if (slas.equals("\n") || //$NON-NLS-1$
|
if (slas.equals("\n") || //$NON-NLS-1$
|
||||||
slas.equals("\t") || //$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);
|
selWord =document.get(start+1, end - start - 1);
|
||||||
|
|
Loading…
Add table
Reference in a new issue