mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-05 08:46:02 +02:00
Bug 357563: Consider specializations found in index.
This commit is contained in:
parent
8afad54183
commit
3f92e17364
13 changed files with 215 additions and 50 deletions
|
@ -1901,4 +1901,33 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
|
|||
public void testUsageOfClassTemplateOutsideOfClassBody_357320() throws Exception {
|
||||
getBindingFromASTName("m1", 0, ICPPMethod.class);
|
||||
}
|
||||
|
||||
// template <typename> struct foo;
|
||||
// template <> struct foo<int> {
|
||||
// typedef int type;
|
||||
// };
|
||||
|
||||
// #include "header.h"
|
||||
// template <typename> struct foo {};
|
||||
// int main() {
|
||||
// typedef foo<int>::type type; // ERROR HERE: 'foo<int>::type' could not be
|
||||
// }
|
||||
public void testSpecializationInIndex_367563a() throws Exception {
|
||||
getBindingFromASTName("type type", 4, ITypedef.class);
|
||||
}
|
||||
|
||||
// template <typename> struct foo;
|
||||
// template <typename T> struct foo<T*> {
|
||||
// typedef int type;
|
||||
// };
|
||||
|
||||
// #include "header.h"
|
||||
// template <typename> struct foo {};
|
||||
// int main() {
|
||||
// typedef foo<int*>::type type; // ERROR HERE: 'foo<int>::type' could not be
|
||||
// }
|
||||
public void testSpecializationInIndex_367563b() throws Exception {
|
||||
getBindingFromASTName("type type", 4, ITypedef.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -21,14 +21,11 @@ import org.eclipse.cdt.core.index.IIndexFileLocation;
|
|||
import org.eclipse.cdt.core.index.IndexLocationFactory;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.core.testplugin.CTestPlugin;
|
||||
import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
|
||||
import org.eclipse.cdt.core.testplugin.util.TestSourceReader;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMProjectIndexLocationConverter;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.osgi.framework.Bundle;
|
||||
|
||||
/**
|
||||
* Tests behavior related to location representation in the PDOM
|
||||
|
@ -40,15 +37,13 @@ public class PDOMLocationTests extends BaseTestCase {
|
|||
return suite(PDOMLocationTests.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
cproject= CProjectHelper.createCCProject("PDOMLocationTests"+System.currentTimeMillis(), "bin", IPDOMManager.ID_NO_INDEXER);
|
||||
|
||||
Bundle b = CTestPlugin.getDefault().getBundle();
|
||||
CharSequence[] testData = TestSourceReader.getContentsForTest(b, "parser", getClass(), getName(), 3);
|
||||
|
||||
super.setUp();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
if (cproject != null) {
|
||||
cproject.getProject().delete(IResource.FORCE | IResource.ALWAYS_DELETE_PROJECT_CONTENT, new NullProgressMonitor());
|
||||
|
|
|
@ -18,7 +18,7 @@ import org.eclipse.cdt.core.dom.ast.DOMException;
|
|||
* @noimplement This interface is not intended to be implemented by clients.
|
||||
*/
|
||||
public interface ICPPClassTemplate extends ICPPTemplateDefinition, ICPPClassType {
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() throws DOMException;
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations();
|
||||
|
||||
/**
|
||||
* Returns a deferred instance that allows lookups within this class template.
|
||||
|
|
|
@ -17,7 +17,6 @@ import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
|
|||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IField;
|
||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
|
@ -36,8 +35,8 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
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.internal.core.dom.parser.cpp.semantics.CPPTemplates;
|
||||
|
||||
|
@ -47,26 +46,26 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates;
|
|||
public class CPPClassTemplate extends CPPTemplateDefinition implements ICPPClassTemplate,
|
||||
ICPPInternalClassTemplate, ICPPInternalClassTypeMixinHost {
|
||||
|
||||
private ICPPClassTemplate fIndexBinding= null;
|
||||
private boolean checkedIndex= false;
|
||||
|
||||
|
||||
private ICPPClassTemplatePartialSpecialization[] partialSpecializations = null;
|
||||
private ICPPDeferredClassInstance fDeferredInstance;
|
||||
private boolean addedPartialSpecializationsOfIndex;
|
||||
|
||||
public CPPClassTemplate(IASTName name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
public void checkForDefinition() {
|
||||
@Override
|
||||
public void checkForDefinition() {
|
||||
// Ambiguity resolution ensures that definitions are resolved.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPartialSpecialization(ICPPClassTemplatePartialSpecialization spec) {
|
||||
partialSpecializations = (ICPPClassTemplatePartialSpecialization[]) ArrayUtil.append(
|
||||
ICPPClassTemplatePartialSpecialization.class, partialSpecializations, spec);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPASTCompositeTypeSpecifier getCompositeTypeSpecifier() {
|
||||
if (definition != null) {
|
||||
IASTNode node = definition.getParent();
|
||||
|
@ -78,6 +77,7 @@ public class CPPClassTemplate extends CPPTemplateDefinition implements ICPPClass
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPClassScope getCompositeScope() {
|
||||
if (definition == null) {
|
||||
checkForDefinition();
|
||||
|
@ -93,15 +93,16 @@ public class CPPClassTemplate extends CPPTemplateDefinition implements ICPPClass
|
|||
}
|
||||
|
||||
// Forward declarations must be backed up from the index.
|
||||
checkForIndexBinding();
|
||||
if (fIndexBinding != null) {
|
||||
IScope scope = fIndexBinding.getCompositeScope();
|
||||
ICPPClassTemplate ib = getIndexBinding();
|
||||
if (ib != null) {
|
||||
IScope scope = ib.getCompositeScope();
|
||||
if (scope instanceof ICPPClassScope)
|
||||
return (ICPPClassScope) scope;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getKey() {
|
||||
if (definition != null) {
|
||||
ICPPASTCompositeTypeSpecifier cts= getCompositeTypeSpecifier();
|
||||
|
@ -124,11 +125,25 @@ public class CPPClassTemplate extends CPPTemplateDefinition implements ICPPClass
|
|||
return ICPPASTElaboratedTypeSpecifier.k_class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() {
|
||||
if (!addedPartialSpecializationsOfIndex) {
|
||||
addedPartialSpecializationsOfIndex= true;
|
||||
ICPPClassTemplate ib = getIndexBinding();
|
||||
if (ib != null) {
|
||||
IIndexFileSet fs = getTemplateName().getTranslationUnit().getIndexFileSet();
|
||||
for (ICPPClassTemplatePartialSpecialization spec : ib.getPartialSpecializations()) {
|
||||
if (spec instanceof IIndexBinding && fs.containsDeclaration((IIndexBinding) spec)) {
|
||||
addPartialSpecialization(spec);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
partialSpecializations = (ICPPClassTemplatePartialSpecialization[]) ArrayUtil.trim(ICPPClassTemplatePartialSpecialization.class, partialSpecializations);
|
||||
return partialSpecializations;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSameType(IType type) {
|
||||
if (type == this)
|
||||
return true;
|
||||
|
@ -137,42 +152,52 @@ public class CPPClassTemplate extends CPPTemplateDefinition implements ICPPClass
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPBase[] getBases() {
|
||||
return ClassTypeHelper.getBases(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IField[] getFields() {
|
||||
return ClassTypeHelper.getFields(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPField[] getDeclaredFields() {
|
||||
return ClassTypeHelper.getDeclaredFields(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPMethod[] getMethods() {
|
||||
return ClassTypeHelper.getMethods(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPMethod[] getAllDeclaredMethods() {
|
||||
return ClassTypeHelper.getAllDeclaredMethods(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPMethod[] getDeclaredMethods() {
|
||||
return ClassTypeHelper.getDeclaredMethods(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPConstructor[] getConstructors() {
|
||||
return ClassTypeHelper.getConstructors(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinding[] getFriends() {
|
||||
return ClassTypeHelper.getFriends(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPClassType[] getNestedClasses() {
|
||||
return ClassTypeHelper.getNestedClasses(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IField findField(String name) {
|
||||
return ClassTypeHelper.findField(this, name);
|
||||
}
|
||||
|
@ -194,10 +219,12 @@ public class CPPClassTemplate extends CPPTemplateDefinition implements ICPPClass
|
|||
return ASTTypeUtil.getType(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAnonymous() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final ICPPDeferredClassInstance asDeferredInstance() throws DOMException {
|
||||
if (fDeferredInstance == null) {
|
||||
fDeferredInstance= createDeferredInstance();
|
||||
|
@ -210,10 +237,11 @@ public class CPPClassTemplate extends CPPTemplateDefinition implements ICPPClass
|
|||
return new CPPDeferredClassInstance(this, args, getCompositeScope());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateArgument getDefaultArgFromIndex(int paramPos) throws DOMException {
|
||||
checkForIndexBinding();
|
||||
if (fIndexBinding != null) {
|
||||
ICPPTemplateParameter[] params = fIndexBinding.getTemplateParameters();
|
||||
ICPPClassTemplate ib = getIndexBinding();
|
||||
if (ib != null) {
|
||||
ICPPTemplateParameter[] params = ib.getTemplateParameters();
|
||||
if (paramPos < params.length) {
|
||||
ICPPTemplateParameter param = params[paramPos];
|
||||
return param.getDefaultValue();
|
||||
|
@ -221,21 +249,4 @@ public class CPPClassTemplate extends CPPTemplateDefinition implements ICPPClass
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void checkForIndexBinding() {
|
||||
if (checkedIndex)
|
||||
return;
|
||||
|
||||
checkedIndex= true;
|
||||
IASTTranslationUnit tu;
|
||||
if (definition != null) {
|
||||
tu= definition.getTranslationUnit();
|
||||
} else {
|
||||
tu= declarations[0].getTranslationUnit();
|
||||
}
|
||||
IIndex index= tu.getIndex();
|
||||
if (index != null) {
|
||||
fIndexBinding= (ICPPClassTemplate) index.adaptBinding(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,11 +40,13 @@ public class CPPClassTemplatePartialSpecializationSpecialization extends CPPClas
|
|||
fClassTemplate= template;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateParameter[] getTemplateParameters() {
|
||||
ICPPClassTemplatePartialSpecialization template = (ICPPClassTemplatePartialSpecialization) getSpecializedBinding();
|
||||
return template.getTemplateParameters();
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized final void addInstance(ICPPTemplateArgument[] arguments, ICPPTemplateInstance instance) {
|
||||
if (instances == null)
|
||||
instances = new ObjectMap(2);
|
||||
|
@ -52,6 +54,7 @@ public class CPPClassTemplatePartialSpecializationSpecialization extends CPPClas
|
|||
instances.put(key, instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized final ICPPTemplateInstance getInstance(ICPPTemplateArgument[] arguments) {
|
||||
if (instances != null) {
|
||||
String key= ASTTypeUtil.getArgumentListString(arguments, true);
|
||||
|
@ -60,6 +63,7 @@ public class CPPClassTemplatePartialSpecializationSpecialization extends CPPClas
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized ICPPTemplateInstance[] getAllInstances() {
|
||||
if (instances != null) {
|
||||
ICPPTemplateInstance[] result= new ICPPTemplateInstance[instances.size()];
|
||||
|
@ -71,10 +75,12 @@ public class CPPClassTemplatePartialSpecializationSpecialization extends CPPClas
|
|||
return ICPPTemplateInstance.EMPTY_TEMPLATE_INSTANCE_ARRAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinding resolveTemplateParameter(ICPPTemplateParameter param) {
|
||||
return param;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPDeferredClassInstance asDeferredInstance() throws DOMException {
|
||||
if (fDeferredInstance == null) {
|
||||
ICPPTemplateArgument[] args = CPPTemplates.templateParametersAsArguments(getTemplateParameters());
|
||||
|
@ -83,10 +89,12 @@ public class CPPClassTemplatePartialSpecializationSpecialization extends CPPClas
|
|||
return fDeferredInstance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPClassTemplate getPrimaryClassTemplate() {
|
||||
return fClassTemplate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateArgument[] getTemplateArguments() throws DOMException {
|
||||
ICPPTemplateArgument[] args = ((ICPPClassTemplatePartialSpecialization) getSpecializedBinding()).getTemplateArguments();
|
||||
final IBinding owner = getOwner();
|
||||
|
@ -96,10 +104,12 @@ public class CPPClassTemplatePartialSpecializationSpecialization extends CPPClas
|
|||
return CPPTemplates.instantiateArguments(args, getTemplateParameterMap(), -1, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPartialSpecialization(ICPPClassTemplatePartialSpecialization spec) {
|
||||
}
|
||||
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() throws DOMException {
|
||||
@Override
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() {
|
||||
return ICPPClassTemplatePartialSpecialization.EMPTY_PARTIAL_SPECIALIZATION_ARRAY;
|
||||
}
|
||||
|
||||
|
@ -118,11 +128,13 @@ public class CPPClassTemplatePartialSpecializationSpecialization extends CPPClas
|
|||
return CPPTemplates.getArgumentMap(getPrimaryClassTemplate(), getTemplateParameterMap());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public IType[] getArguments() throws DOMException {
|
||||
return CPPTemplates.getArguments(getTemplateArguments());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateArgument getDefaultArgFromIndex(int paramPos) throws DOMException {
|
||||
// no default arguments for partial specializations
|
||||
return null;
|
||||
|
|
|
@ -39,7 +39,8 @@ public class CPPClassTemplateSpecialization extends CPPClassSpecialization
|
|||
super(orig, owner, argumentMap);
|
||||
}
|
||||
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() throws DOMException {
|
||||
@Override
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() {
|
||||
if (fPartialSpecs == null) {
|
||||
ICPPClassTemplate origTemplate= (ICPPClassTemplate) getSpecializedBinding();
|
||||
ICPPClassTemplatePartialSpecialization[] orig = origTemplate.getPartialSpecializations();
|
||||
|
@ -52,6 +53,7 @@ public class CPPClassTemplateSpecialization extends CPPClassSpecialization
|
|||
return fPartialSpecs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateParameter[] getTemplateParameters() {
|
||||
// mstodo if we specialize the template parameters (because of its default values), it will
|
||||
// be less error prone to use the defaults.
|
||||
|
@ -59,6 +61,7 @@ public class CPPClassTemplateSpecialization extends CPPClassSpecialization
|
|||
return template.getTemplateParameters();
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized final void addInstance(ICPPTemplateArgument[] arguments, ICPPTemplateInstance instance) {
|
||||
if (instances == null)
|
||||
instances = new ObjectMap(2);
|
||||
|
@ -66,6 +69,7 @@ public class CPPClassTemplateSpecialization extends CPPClassSpecialization
|
|||
instances.put(key, instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized final ICPPTemplateInstance getInstance(ICPPTemplateArgument[] arguments) {
|
||||
if (instances != null) {
|
||||
String key= ASTTypeUtil.getArgumentListString(arguments, true);
|
||||
|
@ -74,6 +78,7 @@ public class CPPClassTemplateSpecialization extends CPPClassSpecialization
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized ICPPTemplateInstance[] getAllInstances() {
|
||||
if (instances != null) {
|
||||
ICPPTemplateInstance[] result= new ICPPTemplateInstance[instances.size()];
|
||||
|
@ -85,6 +90,7 @@ public class CPPClassTemplateSpecialization extends CPPClassSpecialization
|
|||
return ICPPTemplateInstance.EMPTY_TEMPLATE_INSTANCE_ARRAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPartialSpecialization(ICPPClassTemplatePartialSpecialization spec) {
|
||||
}
|
||||
|
||||
|
@ -93,10 +99,12 @@ public class CPPClassTemplateSpecialization extends CPPClassSpecialization
|
|||
return getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinding resolveTemplateParameter(ICPPTemplateParameter param) {
|
||||
return param;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPDeferredClassInstance asDeferredInstance() throws DOMException {
|
||||
if (fDeferredInstance == null) {
|
||||
ICPPTemplateArgument[] args = CPPTemplates.templateParametersAsArguments(getTemplateParameters());
|
||||
|
@ -105,6 +113,7 @@ public class CPPClassTemplateSpecialization extends CPPClassSpecialization
|
|||
return fDeferredInstance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateArgument getDefaultArgFromIndex(int paramPos) throws DOMException {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
|
||||
|
@ -28,11 +29,14 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplatePartialSpecialization;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
||||
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.ICPPTemplateParameter;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.index.IIndexBinding;
|
||||
import org.eclipse.cdt.core.parser.util.ArrayUtil;
|
||||
import org.eclipse.cdt.core.parser.util.ObjectMap;
|
||||
import org.eclipse.cdt.internal.core.dom.Linkage;
|
||||
|
@ -48,6 +52,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
public CPPTemplateProblem(IASTNode node, int id, char[] arg) {
|
||||
super(node, id, arg);
|
||||
}
|
||||
@Override
|
||||
public ICPPTemplateParameter[] getTemplateParameters() {
|
||||
return ICPPTemplateParameter.EMPTY_TEMPLATE_PARAMETER_ARRAY;
|
||||
}
|
||||
|
@ -62,6 +67,10 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
private ICPPTemplateParameter[] templateParameters;
|
||||
private ObjectMap instances;
|
||||
|
||||
private ICPPClassTemplate indexBinding= null;
|
||||
private boolean checkedIndex= false;
|
||||
|
||||
|
||||
public CPPTemplateDefinition(IASTName name) {
|
||||
if (name != null) {
|
||||
ASTNodeProperty prop = name.getPropertyInParent();
|
||||
|
@ -85,6 +94,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void addInstance(ICPPTemplateArgument[] arguments, ICPPTemplateInstance instance) {
|
||||
if (instances == null)
|
||||
instances = new ObjectMap(2);
|
||||
|
@ -92,14 +102,46 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
instances.put(key, instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final ICPPTemplateInstance getInstance(ICPPTemplateArgument[] arguments) {
|
||||
if (instances != null) {
|
||||
String key= ASTTypeUtil.getArgumentListString(arguments, true);
|
||||
return (ICPPTemplateInstance) instances.get(key);
|
||||
ICPPTemplateInstance cand = (ICPPTemplateInstance) instances.get(key);
|
||||
if (cand != null)
|
||||
return cand;
|
||||
}
|
||||
|
||||
final ICPPClassTemplate ib = getIndexBinding();
|
||||
if (ib instanceof ICPPInstanceCache) {
|
||||
ICPPTemplateInstance cand= ((ICPPInstanceCache) ib).getInstance(arguments);
|
||||
if (cand instanceof IIndexBinding &&
|
||||
getTemplateName().getTranslationUnit().getIndexFileSet().containsDeclaration((IIndexBinding) cand)) {
|
||||
return cand;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected ICPPClassTemplate getIndexBinding() {
|
||||
if (!checkedIndex) {
|
||||
checkedIndex= true;
|
||||
IASTName name= getTemplateName();
|
||||
if (name != null) {
|
||||
IASTTranslationUnit tu = name.getTranslationUnit();
|
||||
if (tu != null) {
|
||||
IIndex index= tu.getIndex();
|
||||
if (index != null) {
|
||||
IIndexBinding ib = index.adaptBinding(this);
|
||||
if (ib instanceof ICPPClassTemplate)
|
||||
indexBinding= (ICPPClassTemplate) ib;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return indexBinding;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateInstance[] getAllInstances() {
|
||||
if (instances != null) {
|
||||
ICPPTemplateInstance[] result= new ICPPTemplateInstance[instances.size()];
|
||||
|
@ -122,6 +164,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IBinding#getName()
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return new String(getNameCharArray());
|
||||
}
|
||||
|
@ -129,6 +172,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IBinding#getNameCharArray()
|
||||
*/
|
||||
@Override
|
||||
public char[] getNameCharArray() {
|
||||
return getTemplateName().getSimpleID();
|
||||
}
|
||||
|
@ -136,6 +180,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IBinding#getScope()
|
||||
*/
|
||||
@Override
|
||||
public IScope getScope() {
|
||||
return CPPVisitor.getContainingScope(getTemplateName());
|
||||
}
|
||||
|
@ -143,6 +188,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding#getQualifiedName()
|
||||
*/
|
||||
@Override
|
||||
public String[] getQualifiedName() {
|
||||
return CPPVisitor.getQualifiedName(this);
|
||||
}
|
||||
|
@ -150,6 +196,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding#getQualifiedNameCharArray()
|
||||
*/
|
||||
@Override
|
||||
public char[][] getQualifiedNameCharArray() {
|
||||
return CPPVisitor.getQualifiedNameCharArray(this);
|
||||
}
|
||||
|
@ -157,6 +204,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding#isGloballyQualified()
|
||||
*/
|
||||
@Override
|
||||
public boolean isGloballyQualified() {
|
||||
return true;
|
||||
}
|
||||
|
@ -164,6 +212,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition#getParameters()
|
||||
*/
|
||||
@Override
|
||||
public ICPPTemplateParameter[] getTemplateParameters() {
|
||||
if (templateParameters == null) {
|
||||
ICPPASTTemplateDeclaration template = CPPTemplates.getTemplateDeclaration(getTemplateName());
|
||||
|
@ -186,6 +235,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDefinition(org.eclipse.cdt.core.dom.ast.IASTNode)
|
||||
*/
|
||||
@Override
|
||||
public void addDefinition(IASTNode node) {
|
||||
if (node instanceof ICPPASTCompositeTypeSpecifier) {
|
||||
node = ((ICPPASTCompositeTypeSpecifier)node).getName();
|
||||
|
@ -203,6 +253,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDeclaration(org.eclipse.cdt.core.dom.ast.IASTNode)
|
||||
*/
|
||||
@Override
|
||||
public void addDeclaration(IASTNode node) {
|
||||
if (node instanceof ICPPASTElaboratedTypeSpecifier) {
|
||||
node = ((ICPPASTElaboratedTypeSpecifier)node).getName();
|
||||
|
@ -227,6 +278,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinding resolveTemplateParameter(ICPPTemplateParameter templateParameter) {
|
||||
int pos= templateParameter.getParameterPosition();
|
||||
|
||||
|
@ -286,6 +338,7 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#getDeclarations()
|
||||
*/
|
||||
@Override
|
||||
public IASTNode[] getDeclarations() {
|
||||
return declarations;
|
||||
}
|
||||
|
@ -293,14 +346,17 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#getDefinition()
|
||||
*/
|
||||
@Override
|
||||
public IASTNode getDefinition() {
|
||||
return definition;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ILinkage getLinkage() {
|
||||
return Linkage.CPP_LINKAGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final IBinding getOwner() {
|
||||
IASTName templateName= getTemplateName();
|
||||
if (templateName == null)
|
||||
|
|
|
@ -57,10 +57,12 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
fIsParameterPack= isPack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isParameterPack() {
|
||||
return fIsParameterPack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPScope asScope() {
|
||||
if (unknownScope == null) {
|
||||
IASTName n = null;
|
||||
|
@ -72,6 +74,7 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
return unknownScope;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateParameter[] getTemplateParameters() {
|
||||
if (templateParameters == null) {
|
||||
ICPPASTTemplatedTypeTemplateParameter template = (ICPPASTTemplatedTypeTemplateParameter) getPrimaryDeclaration().getParent();
|
||||
|
@ -88,6 +91,7 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
return templateParameters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinding resolveTemplateParameter(ICPPTemplateParameter templateParameter) {
|
||||
return templateParameter;
|
||||
}
|
||||
|
@ -96,6 +100,7 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
return ICPPClassTemplatePartialSpecialization.EMPTY_PARTIAL_SPECIALIZATION_ARRAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IType getDefault() {
|
||||
IASTName[] nds = getDeclarations();
|
||||
if (nds == null || nds.length == 0)
|
||||
|
@ -120,6 +125,7 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateArgument getDefaultValue() {
|
||||
IType d= getDefault();
|
||||
if (d == null)
|
||||
|
@ -128,46 +134,59 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
return new CPPTemplateArgument(d);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPBase[] getBases() {
|
||||
return ICPPBase.EMPTY_BASE_ARRAY;
|
||||
}
|
||||
@Override
|
||||
public IField[] getFields() {
|
||||
return IField.EMPTY_FIELD_ARRAY;
|
||||
}
|
||||
@Override
|
||||
public IField findField(String name) {
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
public ICPPField[] getDeclaredFields() {
|
||||
return ICPPField.EMPTY_CPPFIELD_ARRAY;
|
||||
}
|
||||
@Override
|
||||
public ICPPMethod[] getMethods() {
|
||||
return ICPPMethod.EMPTY_CPPMETHOD_ARRAY;
|
||||
}
|
||||
@Override
|
||||
public ICPPMethod[] getAllDeclaredMethods() {
|
||||
return ICPPMethod.EMPTY_CPPMETHOD_ARRAY;
|
||||
}
|
||||
@Override
|
||||
public ICPPMethod[] getDeclaredMethods() {
|
||||
return ICPPMethod.EMPTY_CPPMETHOD_ARRAY;
|
||||
}
|
||||
@Override
|
||||
public ICPPConstructor[] getConstructors() {
|
||||
return ICPPConstructor.EMPTY_CONSTRUCTOR_ARRAY;
|
||||
}
|
||||
@Override
|
||||
public IBinding[] getFriends() {
|
||||
return IBinding.EMPTY_BINDING_ARRAY;
|
||||
}
|
||||
@Override
|
||||
public ICPPClassType[] getNestedClasses() {
|
||||
return ICPPClassType.EMPTY_CLASS_ARRAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getKey() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IScope getCompositeScope() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isSameType(IType type) {
|
||||
@Override
|
||||
public boolean isSameType(IType type) {
|
||||
if (type == this)
|
||||
return true;
|
||||
if (type instanceof ITypedef)
|
||||
|
@ -178,10 +197,12 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
return getParameterID() == ((ICPPTemplateParameter) type).getParameterID();
|
||||
}
|
||||
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() throws DOMException {
|
||||
@Override
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() {
|
||||
return ICPPClassTemplatePartialSpecialization.EMPTY_PARTIAL_SPECIALIZATION_ARRAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void addInstance(ICPPTemplateArgument[] arguments, ICPPTemplateInstance instance) {
|
||||
if (instances == null)
|
||||
instances = new ObjectMap(2);
|
||||
|
@ -189,6 +210,7 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
instances.put(key, instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final ICPPTemplateInstance getInstance(ICPPTemplateArgument[] arguments) {
|
||||
if (instances != null) {
|
||||
String key= ASTTypeUtil.getArgumentListString(arguments, true);
|
||||
|
@ -197,6 +219,7 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateInstance[] getAllInstances() {
|
||||
if (instances != null) {
|
||||
ICPPTemplateInstance[] result= new ICPPTemplateInstance[instances.size()];
|
||||
|
@ -208,14 +231,17 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
return ICPPTemplateInstance.EMPTY_TEMPLATE_INSTANCE_ARRAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IASTName getUnknownName() {
|
||||
return new CPPASTName(getNameCharArray());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAnonymous() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPDeferredClassInstance asDeferredInstance() {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -36,7 +36,8 @@ public class CompositeCPPClassTemplate extends CompositeCPPClassType
|
|||
super(cf, ct);
|
||||
}
|
||||
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() throws DOMException {
|
||||
@Override
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() {
|
||||
try {
|
||||
final CIndex cIndex = (CIndex) ((CPPCompositesFactory) cf).getContext();
|
||||
IIndexFragmentBinding[] bindings = cIndex.findEquivalentBindings(rbinding);
|
||||
|
@ -59,22 +60,27 @@ public class CompositeCPPClassTemplate extends CompositeCPPClassType
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateParameter[] getTemplateParameters() {
|
||||
return TemplateInstanceUtil.convert(cf, ((ICPPClassTemplate) rbinding).getTemplateParameters());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateInstance getInstance(ICPPTemplateArgument[] arguments) {
|
||||
return CompositeInstanceCache.getCache(cf, rbinding).getInstance(arguments);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInstance(ICPPTemplateArgument[] arguments, ICPPTemplateInstance instance) {
|
||||
CompositeInstanceCache.getCache(cf, rbinding).addInstance(arguments, instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateInstance[] getAllInstances() {
|
||||
return CompositeInstanceCache.getCache(cf, rbinding).getAllInstances();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPDeferredClassInstance asDeferredInstance() throws DOMException {
|
||||
CompositeInstanceCache cache= CompositeInstanceCache.getCache(cf, rbinding);
|
||||
synchronized (cache) {
|
||||
|
|
|
@ -32,8 +32,8 @@ CompositeCPPClassSpecialization implements ICPPClassTemplate, ICPPInstanceCache{
|
|||
super(cf, rbinding);
|
||||
}
|
||||
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations()
|
||||
throws DOMException {
|
||||
@Override
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() {
|
||||
ICPPClassTemplatePartialSpecialization[] result= ((ICPPClassTemplate) rbinding).getPartialSpecializations();
|
||||
for (int i= 0; i < result.length; i++) {
|
||||
result[i]= (ICPPClassTemplatePartialSpecialization) cf.getCompositeBinding((IIndexFragmentBinding)result[i]);
|
||||
|
@ -41,23 +41,28 @@ CompositeCPPClassSpecialization implements ICPPClassTemplate, ICPPInstanceCache{
|
|||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateParameter[] getTemplateParameters() {
|
||||
return TemplateInstanceUtil.convert(cf, ((ICPPClassTemplate) rbinding).getTemplateParameters());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateInstance getInstance(ICPPTemplateArgument[] arguments) {
|
||||
return CompositeInstanceCache.getCache(cf, rbinding).getInstance(arguments);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInstance(ICPPTemplateArgument[] arguments, ICPPTemplateInstance instance) {
|
||||
CompositeInstanceCache.getCache(cf, rbinding).addInstance(arguments, instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateInstance[] getAllInstances() {
|
||||
return CompositeInstanceCache.getCache(cf, rbinding).getAllInstances();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ICPPDeferredClassInstance asDeferredInstance() throws DOMException {
|
||||
CompositeInstanceCache cache= CompositeInstanceCache.getCache(cf, rbinding);
|
||||
synchronized (cache) {
|
||||
|
|
|
@ -87,6 +87,7 @@ public class PDOMCPPClassTemplate extends PDOMCPPClassType
|
|||
return IIndexCPPBindingConstants.CPP_CLASS_TEMPLATE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateParameter[] getTemplateParameters() {
|
||||
if (params == null) {
|
||||
try {
|
||||
|
@ -209,7 +210,8 @@ public class PDOMCPPClassTemplate extends PDOMCPPClassType
|
|||
getDB().putRecPtr(record + FIRST_PARTIAL, partial.getRecord());
|
||||
}
|
||||
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() throws DOMException {
|
||||
@Override
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() {
|
||||
try {
|
||||
ArrayList<PDOMCPPClassTemplatePartialSpecialization> partials =
|
||||
new ArrayList<PDOMCPPClassTemplatePartialSpecialization>();
|
||||
|
@ -262,18 +264,22 @@ public class PDOMCPPClassTemplate extends PDOMCPPClassType
|
|||
return SemanticUtil.isSameOwner(getOwner(), ctype.getOwner());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateInstance getInstance(ICPPTemplateArgument[] arguments) {
|
||||
return PDOMInstanceCache.getCache(this).getInstance(arguments);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInstance(ICPPTemplateArgument[] arguments, ICPPTemplateInstance instance) {
|
||||
PDOMInstanceCache.getCache(this).addInstance(arguments, instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateInstance[] getAllInstances() {
|
||||
return PDOMInstanceCache.getCache(this).getAllInstances();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateParameter adaptTemplateParameter(ICPPTemplateParameter param) {
|
||||
// Template parameters are identified by their position in the parameter list.
|
||||
int pos = param.getParameterPosition();
|
||||
|
@ -296,6 +302,7 @@ public class PDOMCPPClassTemplate extends PDOMCPPClassType
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPDeferredClassInstance asDeferredInstance() throws DOMException {
|
||||
PDOMInstanceCache cache= PDOMInstanceCache.getCache(this);
|
||||
synchronized (cache) {
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
package org.eclipse.cdt.internal.core.pdom.dom.cpp;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IType;
|
||||
import org.eclipse.cdt.core.dom.ast.ITypedef;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate;
|
||||
|
@ -67,7 +66,7 @@ class PDOMCPPClassTemplatePartialSpecializationSpecialization extends PDOMCPPCla
|
|||
}
|
||||
|
||||
@Override
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() throws DOMException {
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() {
|
||||
return ICPPClassTemplatePartialSpecialization.EMPTY_PARTIAL_SPECIALIZATION_ARRAY;
|
||||
}
|
||||
|
||||
|
@ -102,6 +101,7 @@ class PDOMCPPClassTemplatePartialSpecializationSpecialization extends PDOMCPPCla
|
|||
return CPPClassTemplatePartialSpecialization.isSamePartialClassSpecialization(this, rhs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPClassTemplate getPrimaryClassTemplate() {
|
||||
if (fPrimaryTemplate == null) {
|
||||
try {
|
||||
|
@ -114,6 +114,7 @@ class PDOMCPPClassTemplatePartialSpecializationSpecialization extends PDOMCPPCla
|
|||
return fPrimaryTemplate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setArguments(ICPPTemplateArgument[] templateArguments) throws CoreException {
|
||||
final Database db = getPDOM().getDB();
|
||||
long oldRec = db.getRecPtr(record+ARGUMENTS);
|
||||
|
@ -124,6 +125,7 @@ class PDOMCPPClassTemplatePartialSpecializationSpecialization extends PDOMCPPCla
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateArgument[] getTemplateArguments() {
|
||||
try {
|
||||
final long rec= getPDOM().getDB().getRecPtr(record+ARGUMENTS);
|
||||
|
@ -134,6 +136,7 @@ class PDOMCPPClassTemplatePartialSpecializationSpecialization extends PDOMCPPCla
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public IType[] getArguments() {
|
||||
return CPPTemplates.getArguments(getTemplateArguments());
|
||||
|
|
|
@ -64,19 +64,23 @@ class PDOMCPPClassTemplateSpecialization extends PDOMCPPClassSpecialization
|
|||
return IIndexCPPBindingConstants.CPP_CLASS_TEMPLATE_SPECIALIZATION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateParameter[] getTemplateParameters() {
|
||||
ICPPClassTemplate template = (ICPPClassTemplate) getSpecializedBinding();
|
||||
return template.getTemplateParameters();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateInstance getInstance(ICPPTemplateArgument[] arguments) {
|
||||
return PDOMInstanceCache.getCache(this).getInstance(arguments);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInstance(ICPPTemplateArgument[] arguments, ICPPTemplateInstance instance) {
|
||||
PDOMInstanceCache.getCache(this).addInstance(arguments, instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateInstance[] getAllInstances() {
|
||||
return PDOMInstanceCache.getCache(this).getAllInstances();
|
||||
}
|
||||
|
@ -153,7 +157,8 @@ class PDOMCPPClassTemplateSpecialization extends PDOMCPPClassSpecialization
|
|||
return ((ICPPClassType) owner1).isSameType((ICPPClassType) owner2);
|
||||
}
|
||||
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() throws DOMException {
|
||||
@Override
|
||||
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations() {
|
||||
ICPPClassTemplate origTemplate= (ICPPClassTemplate) getSpecializedBinding();
|
||||
ICPPClassTemplatePartialSpecialization[] orig = origTemplate.getPartialSpecializations();
|
||||
ICPPClassTemplatePartialSpecialization[] spec = new ICPPClassTemplatePartialSpecialization[orig.length];
|
||||
|
@ -163,6 +168,7 @@ class PDOMCPPClassTemplateSpecialization extends PDOMCPPClassSpecialization
|
|||
return spec;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPDeferredClassInstance asDeferredInstance() throws DOMException {
|
||||
PDOMInstanceCache cache= PDOMInstanceCache.getCache(this);
|
||||
synchronized (cache) {
|
||||
|
|
Loading…
Add table
Reference in a new issue