diff options
author | Andrew Niefer | 2004-03-26 15:50:31 +0000 |
---|---|---|
committer | Andrew Niefer | 2004-03-26 15:50:31 +0000 |
commit | bb598c9a999061e2183615092d89dcd1803c9e52 (patch) | |
tree | 8d2fa6e27bebe3287ed507963cf59faeef581ee9 /core/org.eclipse.cdt.core | |
parent | 6475a7ac01032574a959a73e2b8f9c20b3978e1a (diff) | |
download | org.eclipse.cdt-bb598c9a999061e2183615092d89dcd1803c9e52.tar.gz org.eclipse.cdt-bb598c9a999061e2183615092d89dcd1803c9e52.tar.xz org.eclipse.cdt-bb598c9a999061e2183615092d89dcd1803c9e52.zip |
report references for symbols used in template-ids
Diffstat (limited to 'core/org.eclipse.cdt.core')
-rw-r--r-- | core/org.eclipse.cdt.core/parser/ChangeLog-parser | 3 | ||||
-rw-r--r-- | core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java | 27 |
2 files changed, 28 insertions, 2 deletions
diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog-parser b/core/org.eclipse.cdt.core/parser/ChangeLog-parser index 82281758a28..0e54c2d9a52 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog-parser +++ b/core/org.eclipse.cdt.core/parser/ChangeLog-parser @@ -1,3 +1,6 @@ +2004-03-26 Andrew Niefer + -report references to symbols used in a template-id. + 2004-03-25 Andrew Niefer -modify IASTFactory.createField & .createVariable to take ITokenDuple's for the name -modify ITokenDuple to support manipulating TokenDuples that have template arguments in them diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java index 53a38c696e4..27d9922f498 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java @@ -160,6 +160,23 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto references.add(reference); } + protected void addTemplateIdReferences( List references, List templateArgs ){ + if( templateArgs == null ) + return; + + Iterator i = templateArgs.iterator(); + while( i.hasNext() ){ + ASTExpression exp = (ASTExpression) i.next(); + Iterator j = null; + if( exp.getExpressionKind() == IASTExpression.Kind.POSTFIX_TYPEID_TYPEID ) + j = ((ASTTypeId) exp.getTypeId()).getReferences().iterator(); + else + j = exp.getReferences().iterator(); + while( j.hasNext() ){ + addReference( references, (IASTReference) j.next() ); + } + } + } /* * Test if the provided list is a valid parameter list * Parameters are list of TypeInfos @@ -356,6 +373,8 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto ((ITemplateFactory)startingScope).pushSymbol( result ); } addReference( references, createReference( result, image, offset )); + if( templateArgLists != null && templateArgLists[idx] != null ) + addTemplateIdReferences( references, templateArgLists[idx] ); } else break; @@ -1726,9 +1745,13 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto else typeSymbol = ((IContainerSymbol)typeSymbol).lookup( image ); - if( typeSymbol != null ) + if( typeSymbol != null ) + { addReference( references, createReference( typeSymbol, image, offset )); - else + if( argLists != null && argLists[idx] != null ) + addTemplateIdReferences( references, argLists[idx] ); + } + else handleProblem( IProblem.SEMANTIC_NAME_NOT_FOUND, image ); } catch (ParserSymbolTableException e) |