Skip to main content

[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);
+	}
+	
 }
 

Back to the top