Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Schorn2009-02-20 13:41:55 +0000
committerMarkus Schorn2009-02-20 13:41:55 +0000
commit29aba5e310a595309ad9c9995ba2a1334b8c305b (patch)
tree95a24be5314f7154b8b3b4c08988dea2a5bcbf2e /core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java
parent4db2416905caab163154a86d60fead946301afa9 (diff)
downloadorg.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.java18
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());

Back to the top