diff options
author | Markus Schorn | 2009-02-20 13:41:55 +0000 |
---|---|---|
committer | Markus Schorn | 2009-02-20 13:41:55 +0000 |
commit | 29aba5e310a595309ad9c9995ba2a1334b8c305b (patch) | |
tree | 95a24be5314f7154b8b3b4c08988dea2a5bcbf2e /core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java | |
parent | 4db2416905caab163154a86d60fead946301afa9 (diff) | |
download | org.eclipse.cdt-29aba5e310a595309ad9c9995ba2a1334b8c305b.tar.gz org.eclipse.cdt-29aba5e310a595309ad9c9995ba2a1334b8c305b.tar.xz org.eclipse.cdt-29aba5e310a595309ad9c9995ba2a1334b8c305b.zip |
Map index bindings for class instances back to AST, bug 262719.
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java')
-rw-r--r-- | core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java index e951dad0128..6307cdde668 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java @@ -29,14 +29,18 @@ import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceScope; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance; import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDirective; import org.eclipse.cdt.core.index.IIndexBinding; import org.eclipse.cdt.core.index.IIndexFileSet; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.core.parser.util.CharArrayMap; +import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates; import org.eclipse.cdt.internal.core.index.IIndexScope; /** @@ -285,6 +289,20 @@ public class CPPScopeMapper { } public ICPPClassType mapToAST(ICPPClassType type) { + if (type instanceof ICPPTemplateInstance) { + ICPPTemplateInstance inst= (ICPPTemplateInstance) type; + ICPPTemplateDefinition template= inst.getTemplateDefinition(); + if (template instanceof IIndexBinding && template instanceof ICPPClassType) { + IBinding mapped= mapToAST((ICPPClassType) template); + if (mapped != template && mapped instanceof ICPPClassType) { + mapped= CPPTemplates.instantiate((ICPPClassTemplate) mapped, inst.getTemplateArguments()); + if (mapped instanceof ICPPClassType) + return (ICPPClassType) mapped; + } + } + return type; + } + if (fClasses == null) { fClasses= new CharArrayMap<IASTName[]>(); fTu.accept(new Visitor()); |