diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownClassInstance.java index ab650e28aaa..4f4cb636a0c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownClassInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownClassInstance.java @@ -15,11 +15,8 @@ import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplatePartialSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; -import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.core.parser.util.ObjectMap; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates; @@ -29,8 +26,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates; * @author Sergey Prigogin */ public class CPPUnknownClassInstance extends CPPUnknownClass implements ICPPInternalUnknownClassInstance { - private ICPPClassTemplatePartialSpecialization[] partialSpecializations; - private ObjectMap instances; private final IType[] arguments; public CPPUnknownClassInstance(ICPPInternalUnknown scopeBinding, IASTName name, IType[] arguments) { @@ -38,65 +33,6 @@ public class CPPUnknownClassInstance extends CPPUnknownClass implements ICPPInte this.arguments = arguments; } - public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() - throws DOMException { - return partialSpecializations; - } - - public ICPPTemplateParameter[] getTemplateParameters() throws DOMException { - return ICPPTemplateParameter.EMPTY_TEMPLATE_PARAMETER_ARRAY; - } - - public void addPartialSpecialization(ICPPClassTemplatePartialSpecialization spec) { - partialSpecializations = (ICPPClassTemplatePartialSpecialization[]) ArrayUtil.append( - ICPPClassTemplatePartialSpecialization.class, partialSpecializations, spec); - } - - public void addSpecialization(IType[] arguments, ICPPSpecialization specialization) { - if (arguments == null) - return; - for (int i = 0; i < arguments.length; i++) { - if (arguments[i] == null) - return; - } - if (instances == null) - instances = new ObjectMap(2); - instances.put(arguments, specialization); - } - - public ICPPSpecialization deferredInstance(ObjectMap argMap, IType[] arguments) { - ICPPSpecialization instance = getInstance(arguments); - if (instance == null) { - instance = new CPPDeferredClassInstance(this, argMap, arguments); - addSpecialization(arguments, instance); - } - return instance; - } - - public ICPPSpecialization getInstance(IType[] arguments) { - if (instances == null) - return null; - - for (int i = 0; i < instances.size(); i++) { - IType[] args = (IType[]) instances.keyAt(i); - if (args.length == arguments.length) { - int j = 0; - for (; j < args.length; j++) { - if (!args[j].isSameType(arguments[j])) - break; - } - if (j == args.length) { - return (ICPPSpecialization) instances.getAt(i); - } - } - } - return null; - } - - public IBinding instantiate(IType[] arguments) { - return deferredInstance(null, arguments); - } - public IType[] getArguments() { return arguments; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPInternalUnknownClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPInternalUnknownClassInstance.java index 1e126e2a9f9..3be5e546c8a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPInternalUnknownClassInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPInternalUnknownClassInstance.java @@ -11,14 +11,12 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate; /* * Represents a partially instantiated C++ class template, declaration of which is not yet available. * * @author Sergey Prigogin */ -public interface ICPPInternalUnknownClassInstance extends ICPPClassTemplate, ICPPInternalClassTemplate, - ICPPInternalUnknownClassType { +public interface ICPPInternalUnknownClassInstance extends ICPPInternalUnknownClassType { public IType[] getArguments(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java index 148fb09ea98..0c7af111c4a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java @@ -226,9 +226,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { } } } else if (binding instanceof ICPPTemplateDefinition) { - if (binding instanceof ICPPInternalUnknownClassInstance) { - result = new CompositeCPPUnknownClassInstance(this, (ICPPInternalUnknownClassInstance) binding); - } else if (binding instanceof ICPPClassTemplate) { + if (binding instanceof ICPPClassTemplate) { ICPPClassType def= (ICPPClassType) findOneBinding(binding); return new CompositeCPPClassTemplate(this, def); } else if (binding instanceof ICPPConstructor) { @@ -246,6 +244,8 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { result = new CompositeCPPField(this, (ICPPField) binding); } else if (binding instanceof ICPPVariable) { result = new CompositeCPPVariable(this, (ICPPVariable) binding); + } else if (binding instanceof ICPPInternalUnknownClassInstance) { + result = new CompositeCPPUnknownClassInstance(this, (ICPPInternalUnknownClassInstance) binding); } else if (binding instanceof ICPPInternalUnknownClassType) { result = new CompositeCPPUnknownClassType(this, (ICPPInternalUnknownClassType) binding); } else if (binding instanceof ICPPClassType) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassInstance.java index f0d7f4e1df0..8780b9740a5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassInstance.java @@ -14,10 +14,8 @@ import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplatePartialSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; import org.eclipse.cdt.core.parser.util.ObjectMap; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalUnknownClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates; @@ -45,32 +43,6 @@ class CompositeCPPUnknownClassInstance extends CompositeCPPUnknownClassType } return arguments; } - - public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() throws DOMException { - return ICPPClassTemplatePartialSpecialization.EMPTY_PARTIAL_SPECIALIZATION_ARRAY; - } - - public ICPPTemplateParameter[] getTemplateParameters() throws DOMException { - return ICPPTemplateParameter.EMPTY_TEMPLATE_PARAMETER_ARRAY; - } - - public void addPartialSpecialization(ICPPClassTemplatePartialSpecialization spec) { - } - - public void addSpecialization(IType[] arguments, ICPPSpecialization specialization) { - } - - public ICPPSpecialization deferredInstance(ObjectMap argMap, IType[] arguments) { - return InternalTemplateInstantiatorUtil.deferredInstance(argMap, arguments, cf, rbinding); - } - - public ICPPSpecialization getInstance(IType[] arguments) { - return InternalTemplateInstantiatorUtil.getInstance(arguments, cf, this); - } - - public IBinding instantiate(IType[] args) { - return InternalTemplateInstantiatorUtil.instantiate(args, cf, rbinding); - } @Override public IBinding resolveUnknown(ObjectMap argMap) throws DOMException { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java index 7b46b7a5834..26b5620df20 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java @@ -358,13 +358,11 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { } else if (binding instanceof ICPPFunction) { pdomBinding = new PDOMCPPFunction(pdom, parent, (ICPPFunction) binding, true); } else if (binding instanceof ICPPClassTemplate) { + pdomBinding= new PDOMCPPClassTemplate(pdom, parent, (ICPPClassTemplate) binding); + } else if (binding instanceof ICPPClassType) { if (binding instanceof ICPPInternalUnknownClassInstance) { pdomBinding= new PDOMCPPUnknownClassInstance(pdom, parent, (ICPPInternalUnknownClassInstance) binding); - } else { - pdomBinding= new PDOMCPPClassTemplate(pdom, parent, (ICPPClassTemplate) binding); - } - } else if (binding instanceof ICPPClassType) { - if (binding instanceof ICPPInternalUnknown) { + } else if (binding instanceof ICPPInternalUnknown) { pdomBinding= new PDOMCPPUnknownClassType(pdom, parent, (ICPPInternalUnknownClassType) binding); } else { pdomBinding= new PDOMCPPClassType(pdom, parent, (ICPPClassType) binding); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassInstance.java index 197cd74e13c..825e7d51301 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassInstance.java @@ -22,13 +22,10 @@ import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplatePartialSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; import org.eclipse.cdt.core.parser.util.ObjectMap; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalUnknown; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalUnknownClassInstance; @@ -59,8 +56,8 @@ class PDOMCPPUnknownClassInstance extends PDOMCPPUnknownClassType PDOMNodeLinkedList list = new PDOMNodeLinkedList(pdom, record + ARGUMENTS, getLinkageImpl()); IType[] args = classInstance.getArguments(); - for (int i = 0; i < args.length; i++) { - PDOMNode typeNode = getLinkageImpl().addType(this, args[i]); + for (IType arg : args) { + PDOMNode typeNode = getLinkageImpl().addType(this, arg); if (typeNode != null) list.addMember(typeNode); } @@ -109,38 +106,6 @@ class PDOMCPPUnknownClassInstance extends PDOMCPPUnknownClassType return arguments; } - public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() - throws DOMException { - return ICPPClassTemplatePartialSpecialization.EMPTY_PARTIAL_SPECIALIZATION_ARRAY; - } - - public ICPPTemplateParameter[] getTemplateParameters() throws DOMException { - return ICPPTemplateParameter.EMPTY_TEMPLATE_PARAMETER_ARRAY; - } - - public void addPartialSpecialization(ICPPClassTemplatePartialSpecialization spec) { - } - - public void addSpecialization(IType[] arguments, ICPPSpecialization specialization) { - } - - public ICPPSpecialization deferredInstance(ObjectMap argMap, IType[] arguments) { - ICPPSpecialization instance = getInstance(arguments); - if (instance == null) { - instance = new CPPDeferredClassInstance(this, argMap, arguments); - addSpecialization(arguments, instance); - } - return instance; - } - - public ICPPSpecialization getInstance(IType[] arguments) { - return null; - } - - public IBinding instantiate(IType[] arguments) { - return deferredInstance(null, arguments); - } - /* (non-Javadoc) * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalUnknown#resolveUnknown(org.eclipse.cdt.core.parser.util.ObjectMap) */