From 540081b263252cb34c5fa12eed8344b39d2a4d96 Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Tue, 10 May 2005 19:53:38 +0000 Subject: [PATCH] better handle adding declarations/definitions to templates --- .../dom/parser/cpp/CPPTemplateDefinition.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java index 173173468d8..c1303b35a89 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java @@ -25,7 +25,10 @@ import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IProblemBinding; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTParameterDeclaration; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; @@ -282,6 +285,13 @@ public abstract class CPPTemplateDefinition implements ICPPTemplateDefinition, I * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDefinition(org.eclipse.cdt.core.dom.ast.IASTNode) */ public void addDefinition(IASTNode node) { + if( node instanceof ICPPASTCompositeTypeSpecifier ){ + node = ((ICPPASTCompositeTypeSpecifier)node).getName(); + if( node instanceof ICPPASTQualifiedName ){ + IASTName [] ns = ((ICPPASTQualifiedName)node).getNames(); + node = ns[ ns.length - 1]; + } + } if( !(node instanceof IASTName) ) return; updateTemplateParameterBindings( (IASTName) node ); @@ -292,6 +302,13 @@ public abstract class CPPTemplateDefinition implements ICPPTemplateDefinition, I * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDeclaration(org.eclipse.cdt.core.dom.ast.IASTNode) */ public void addDeclaration(IASTNode node) { + if( node instanceof ICPPASTElaboratedTypeSpecifier ){ + node = ((ICPPASTElaboratedTypeSpecifier)node).getName(); + if( node instanceof ICPPASTQualifiedName ){ + IASTName [] ns = ((ICPPASTQualifiedName)node).getNames(); + node = ns[ ns.length - 1]; + } + } if( !(node instanceof IASTName) ) return; IASTName declName = (IASTName) node;