mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 08:55:25 +02:00
Bug 335122 - DeclarationGenerator asserts for templated types with namespace. Restored assert in CPPASTTemplateId
This commit is contained in:
parent
2c1d3433ab
commit
ef5c018b27
3 changed files with 46 additions and 10 deletions
|
@ -76,7 +76,7 @@ public class CPPASTTemplateId extends CPPASTNameBase implements ICPPASTTemplateI
|
|||
|
||||
public void setTemplateName(IASTName name) {
|
||||
assertNotFrozen();
|
||||
assert !(name instanceof ICPPASTTemplateId);
|
||||
assert !(name instanceof ICPPASTQualifiedName) && !(name instanceof ICPPASTTemplateId);
|
||||
templateName = name;
|
||||
if (name != null) {
|
||||
name.setParent(this);
|
||||
|
|
|
@ -303,19 +303,46 @@ public class DeclarationGeneratorImpl extends DeclarationGenerator {
|
|||
private IASTDeclSpecifier getDeclSpecForTemplate(ICPPTemplateInstance type) {
|
||||
IASTName name = getName(type);
|
||||
if (factory instanceof ICPPNodeFactory) {
|
||||
ICPPNodeFactory cppFactory = (ICPPNodeFactory) factory;
|
||||
ICPPASTTemplateId tempId = cppFactory.newTemplateId(name);
|
||||
for (ICPPTemplateArgument arg : type.getTemplateArguments()) {
|
||||
IASTDeclSpecifier argDeclSpec = createDeclSpecFromType(arg.isTypeValue() ? arg
|
||||
.getTypeValue() : arg.getTypeOfNonTypeValue());
|
||||
IASTTypeId typeId = cppFactory.newTypeId(argDeclSpec, null);
|
||||
tempId.addTemplateArgument(typeId);
|
||||
|
||||
if (name instanceof ICPPASTQualifiedName) {
|
||||
ICPPASTQualifiedName fullQualifiedName = (ICPPASTQualifiedName) name;
|
||||
IASTName templateName = fullQualifiedName.getLastName();
|
||||
ICPPASTTemplateId tempId = getTemplateId(type, templateName);
|
||||
|
||||
ICPPASTQualifiedName newQualifiedName = ((ICPPNodeFactory) factory)
|
||||
.newQualifiedName();
|
||||
int nbQualifiedNames = fullQualifiedName.getNames().length;
|
||||
if (nbQualifiedNames > 1) {
|
||||
for (int i = 0; i < nbQualifiedNames - 1; i++) {
|
||||
newQualifiedName.addName(fullQualifiedName.getNames()[i].copy());
|
||||
}
|
||||
}
|
||||
newQualifiedName.addName(tempId);
|
||||
|
||||
return factory.newTypedefNameSpecifier(newQualifiedName);
|
||||
|
||||
} else {
|
||||
IASTName templateName = getName(type);
|
||||
ICPPASTTemplateId tempId = getTemplateId(type, templateName);
|
||||
return factory.newTypedefNameSpecifier(tempId);
|
||||
}
|
||||
return factory.newTypedefNameSpecifier(tempId);
|
||||
}
|
||||
|
||||
return factory.newTypedefNameSpecifier(name);
|
||||
}
|
||||
|
||||
private ICPPASTTemplateId getTemplateId(ICPPTemplateInstance type, IASTName templateName) {
|
||||
ICPPNodeFactory cppFactory = (ICPPNodeFactory) factory;
|
||||
ICPPASTTemplateId tempId = cppFactory.newTemplateId(templateName.copy());
|
||||
for (ICPPTemplateArgument arg : type.getTemplateArguments()) {
|
||||
IASTDeclSpecifier argDeclSpec = createDeclSpecFromType(arg.isTypeValue() ? arg
|
||||
.getTypeValue() : arg.getTypeOfNonTypeValue());
|
||||
IASTTypeId typeId = cppFactory.newTypeId(argDeclSpec, null);
|
||||
tempId.addTemplateArgument(typeId);
|
||||
}
|
||||
return tempId;
|
||||
}
|
||||
|
||||
private IASTNamedTypeSpecifier getDeclSpecForBinding(IBinding binding) {
|
||||
IASTName name = getName(binding);
|
||||
return factory.newTypedefNameSpecifier(name);
|
||||
|
|
|
@ -207,7 +207,16 @@ public abstract class CRefactoring extends Refactoring {
|
|||
public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
|
||||
ModificationCollector collector = new ModificationCollector();
|
||||
collectModifications(pm, collector);
|
||||
CCompositeChange finalChange = collector.createFinalChange();
|
||||
CCompositeChange finalChange = null;
|
||||
try {
|
||||
lockIndex();
|
||||
finalChange = collector.createFinalChange();
|
||||
} catch (InterruptedException e) {
|
||||
throw new OperationCanceledException();
|
||||
} finally {
|
||||
unlockIndex();
|
||||
}
|
||||
|
||||
finalChange.setDescription(new RefactoringChangeDescriptor(getRefactoringDescriptor()));
|
||||
return finalChange;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue