From 7d1631e8ef3ae94b2a34cc02138d0cd9b7c2766f Mon Sep 17 00:00:00 2001 From: John Camelon Date: Tue, 7 Jun 2005 20:20:46 +0000 Subject: [PATCH] Fixed Bug 98806 - selectNodeForLocation fails after typename --- .../parser/tests/ast2/AST2SelectionParseTest.java | 7 +++++++ .../internal/core/dom/parser/c/GNUCSourceParser.java | 11 ++++++----- .../core/dom/parser/cpp/GNUCPPSourceParser.java | 1 + 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SelectionParseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SelectionParseTest.java index 5027d93ff8a..7c15a7c2594 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SelectionParseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SelectionParseTest.java @@ -1648,4 +1648,11 @@ public class AST2SelectionParseTest extends AST2SelectionParseBaseTest { assertNotNull(node); } + + public void testBug98806() throws Exception { + String code = "template class A { typedef typename T::B _B;};"; + IASTNode node = parse( code, ParserLanguage.CPP, code.indexOf( "T::B"), "T::B".length() ); + assertNotNull( node ); + assertTrue( node instanceof IASTName ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java index 2a0e8d3804e..2bd0e64c767 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java @@ -2016,11 +2016,12 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { .setPropertyInParent(IASTDeclarator.DECLARATOR_NAME); } - for (int i = 0; i < parmNames.length; ++i) { - parmNames[i].setParent(functionDecltor); - parmNames[i] - .setPropertyInParent(ICASTKnRFunctionDeclarator.PARAMETER_NAME); - } + if( parmNames != null ) + for (int i = 0; i < parmNames.length; ++i) { + parmNames[i].setParent(functionDecltor); + parmNames[i] + .setPropertyInParent(ICASTKnRFunctionDeclarator.PARAMETER_NAME); + } d = functionDecltor; } else if (isFunction) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 514268158d2..54b9de2ed02 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -3324,6 +3324,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { isTypename = true; last = consume(IToken.t_typename); duple = name(); + last = duple.getLastToken(); flags.setEncounteredTypename(true); break; case IToken.tCOLONCOLON: