From 19b964b6f1c7c47e65aec9d63db5d04f65808138 Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Wed, 11 May 2005 16:11:05 +0000 Subject: [PATCH] make sure template parameters have all their declarations added --- .../core/dom/parser/cpp/CPPTemplateDefinition.java | 6 +++++- .../core/dom/parser/cpp/CPPTemplateParameter.java | 11 ++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) 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 88f7b19f235..c2f2846a214 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 @@ -176,6 +176,8 @@ public abstract class CPPTemplateDefinition implements ICPPTemplateDefinition, I if( paramName.getBinding() != null ){ binding = paramName.getBinding(); name.setBinding( binding ); + if( binding instanceof ICPPInternalBinding ) + ((ICPPInternalBinding)binding).addDeclaration( name ); return binding; } } @@ -198,8 +200,10 @@ public abstract class CPPTemplateDefinition implements ICPPTemplateDefinition, I temp = template.getTemplateParameters()[i]; IASTName n = CPPTemplates.getTemplateParameterName( temp ); - if( n != name ) { + if( n != name && n.getBinding() == null ) { n.setBinding( binding ); + if( binding instanceof ICPPInternalBinding ) + ((ICPPInternalBinding)binding).addDeclaration( n ); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java index 4c4309c5a85..5cbfafc56ff 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java @@ -131,13 +131,14 @@ public class CPPTemplateParameter implements ICPPTemplateParameter, ICPPInternal if( declarations == null ) declarations = new IASTName[] { name }; else { - //keep the lowest offset declaration in [0] + if( declarations.length > 0 && declarations[0] == node ) + return; + //keep the lowest offset declaration in [0] if( declarations.length > 0 && ((ASTNode)node).getOffset() < ((ASTNode)declarations[0]).getOffset() ){ - IASTName temp = declarations[0]; - declarations[0] = name; - name = temp; + declarations = (IASTName[]) ArrayUtil.prepend( IASTName.class, declarations, name ); + } else { + declarations = (IASTName[]) ArrayUtil.append( IASTName.class, declarations, name ); } - declarations = (IASTName[]) ArrayUtil.append( IASTName.class, declarations, name ); } } public void removeDeclaration(IASTNode node) {