Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Schaefer2007-04-04 15:30:20 +0000
committerDoug Schaefer2007-04-04 15:30:20 +0000
commit49724e630c7531a756571106ba65c13da42c00c8 (patch)
tree7ee37bf8b8cae64db32e955b31c46f79519ab1af /core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java
parent8934213fa1c19ef0888de35aac61be7ce59d1e22 (diff)
downloadorg.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.java14
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);
}
}

Back to the top