diff options
author | Doug Schaefer | 2007-04-04 15:30:20 +0000 |
---|---|---|
committer | Doug Schaefer | 2007-04-04 15:30:20 +0000 |
commit | 49724e630c7531a756571106ba65c13da42c00c8 (patch) | |
tree | 7ee37bf8b8cae64db32e955b31c46f79519ab1af /core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java | |
parent | 8934213fa1c19ef0888de35aac61be7ce59d1e22 (diff) | |
download | org.eclipse.cdt-49724e630c7531a756571106ba65c13da42c00c8.tar.gz org.eclipse.cdt-49724e630c7531a756571106ba65c13da42c00c8.tar.xz org.eclipse.cdt-49724e630c7531a756571106ba65c13da42c00c8.zip |
Patch for Bryan continuing 167098:
- implements base classes for class instances and class specializations
- allows for instantiation/specialization during incremental reindexes
- prior to this a full reindex was required to properly resolve newly added
implicit instances and specializations
- renders templates less exception-prone
- cleaned up code from last patch
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java')
-rw-r--r-- | core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java index afbe997dacf..052cd53835e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java @@ -11,7 +11,6 @@ package org.eclipse.cdt.internal.core.pdom.dom.cpp; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import org.eclipse.cdt.core.CCorePlugin; @@ -36,6 +35,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateScope; import org.eclipse.cdt.core.index.IIndexBinding; import org.eclipse.cdt.core.index.IndexFilter; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassScope; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSemantics; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplates; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalTemplateInstantiator; @@ -94,7 +94,7 @@ class PDOMCPPClassTemplate extends PDOMCPPClassType implements } } - public ICPPTemplateParameter[] getTemplateParameters() throws DOMException { + public ICPPTemplateParameter[] getTemplateParameters() { try { PDOMNodeLinkedList list = new PDOMNodeLinkedList(pdom, record + PARAMETERS, getLinkageImpl()); TemplateParameterCollector visitor = new TemplateParameterCollector(); @@ -186,7 +186,7 @@ class PDOMCPPClassTemplate extends PDOMCPPClassType implements }; BindingCollector visitor = new BindingCollector(getLinkageImpl(), name.toCharArray(), filter, prefixLookup, !prefixLookup); - acceptInHierarchy(new HashSet(), visitor); + accept(visitor); return visitor.getBindings(); } catch (CoreException e) { CCorePlugin.log(e); @@ -282,7 +282,11 @@ class PDOMCPPClassTemplate extends PDOMCPPClassType implements } public ICPPSpecialization deferredInstance(IType[] arguments) { - return getInstance( arguments ); + ICPPSpecialization instance = getInstance( arguments ); + if( instance == null ){ + instance = new CPPDeferredClassInstance( this, arguments ); + } + return instance; } private static class InstanceFinder implements IPDOMVisitor { @@ -342,6 +346,6 @@ class PDOMCPPClassTemplate extends PDOMCPPClassType implements return ((PDOMCPPClassTemplate)template).instantiate( arguments ); } - return getInstance(arguments); + return CPPTemplates.instantiateTemplate(this, arguments, null); } } |