mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 17:05:26 +02:00
180948: fix ClassCastException
This commit is contained in:
parent
95058d83f4
commit
3139aa5792
2 changed files with 12 additions and 7 deletions
|
@ -155,7 +155,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC
|
|||
result = null;
|
||||
} else if (binding instanceof ICPPTemplateDefinition) {
|
||||
if(binding instanceof ICPPClassTemplate) {
|
||||
return new CompositeCPPClassTemplate(this, (ICPPClassType) binding);
|
||||
return new CompositeCPPClassTemplate(this, (ICPPClassType) findOneDefinition(binding));
|
||||
} else if (binding instanceof ICPPFunctionTemplate) {
|
||||
return new CompositeCPPFunctionTemplate(this, (ICPPFunction) binding);
|
||||
} else {
|
||||
|
@ -165,7 +165,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC
|
|||
if(binding instanceof ICPPTemplateInstance) {
|
||||
if(binding instanceof ICPPDeferredTemplateInstance) {
|
||||
if(binding instanceof ICPPClassType) {
|
||||
return new CompositeCPPDeferredClassInstance(this, (ICPPClassType) binding);
|
||||
return new CompositeCPPDeferredClassInstance(this, (ICPPClassType) findOneDefinition(binding));
|
||||
} else if(binding instanceof ICPPFunction) {
|
||||
return new CompositeCPPDeferredFunctionInstance(this, (ICPPFunction) binding);
|
||||
} else {
|
||||
|
@ -173,7 +173,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC
|
|||
}
|
||||
} else {
|
||||
if(binding instanceof ICPPClassType) {
|
||||
return new CompositeCPPClassInstance(this, (ICPPClassType) binding);
|
||||
return new CompositeCPPClassInstance(this, (ICPPClassType) findOneDefinition(binding));
|
||||
} if(binding instanceof ICPPFunction) {
|
||||
return new CompositeCPPFunctionInstance(this, (ICPPFunction) binding);
|
||||
} else {
|
||||
|
@ -185,7 +185,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC
|
|||
if(binding instanceof ICPPClassTemplatePartialSpecialization) {
|
||||
return new CompositeCPPClassTemplatePartialSpecialization(this, (ICPPClassTemplatePartialSpecialization) binding);
|
||||
} else {
|
||||
return new CompositeCPPClassSpecialization(this, (ICPPClassType) binding);
|
||||
return new CompositeCPPClassSpecialization(this, (ICPPClassType) findOneDefinition(binding));
|
||||
}
|
||||
} if(binding instanceof ICPPConstructor) {
|
||||
return new CompositeCPPConstructorSpecialization(this, (ICPPConstructor) binding);
|
||||
|
@ -196,7 +196,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC
|
|||
} if(binding instanceof ICPPField) {
|
||||
return new CompositeCPPField(this, (ICPPField) binding);
|
||||
} if(binding instanceof ICPPParameter) {
|
||||
return new CompositeCPPParameter(this, (ICPPParameter) binding);
|
||||
return new CompositeCPPParameterSpecialization(this, (ICPPParameter) binding);
|
||||
} else {
|
||||
throw new CompositingNotImplementedError("composite binding unavailable for "+binding+" "+binding.getClass()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
|
|
|
@ -34,9 +34,14 @@ public class TemplateInstanceUtil {
|
|||
Object[] keys= preresult.keyArray();
|
||||
for(int i=0; i<keys.length; i++) {
|
||||
IType type= (IType) preresult.get(keys[i]);
|
||||
result.put(
|
||||
try {
|
||||
result.put(
|
||||
cf.getCompositeBinding((IIndexFragmentBinding)keys[i]),
|
||||
cf.getCompositeBinding((IIndexFragmentBinding)type));
|
||||
cf.getCompositeType((IIndexType)type));
|
||||
} catch(DOMException de) {
|
||||
result.put(keys[i], type);
|
||||
CCorePlugin.log(de);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue