CanAppearWithoutContext.WithoutContextCons consReference = (CanAppearWithoutContext.WithoutContextCons)reference;
Name.WithoutContextCons name = consReference.getName();
if(willConflictWith(moduleTypeInfo, name, newName, category)) {
Category consCategory = getCategory(moduleTypeInfo, name);
See newSee;
if(consCategory == Category.MODULE_NAME) {
newSee = See.Module.make(new CrossReference.Module[] {
CrossReference.Module.make(Name.Module.make(collateralDamageModuleRenameMapping.getNewNameForModule(ModuleName.make(name.toSourceText()))), consReference.isChecked())
});
} else if(consCategory == Category.DATA_CONSTRUCTOR) {
newSee = See.DataCons.make(new CrossReference.DataCons[] {
CrossReference.DataCons.make(Name.DataCons.make(collateralDamageModuleRenameMapping.getNewNameForModule(org.openquark.cal.compiler.SourceModel.Name.Module.maybeToModuleName(name.getModuleName())), name.getUnqualifiedName()), consReference.isChecked())
});
} else if(consCategory == Category.TYPE_CONSTRUCTOR) {
newSee = See.TypeCons.make(new CrossReference.TypeCons[] {
CrossReference.TypeCons.make(Name.TypeCons.make(collateralDamageModuleRenameMapping.getNewNameForModule(org.openquark.cal.compiler.SourceModel.Name.Module.maybeToModuleName(name.getModuleName())), name.getUnqualifiedName()), consReference.isChecked())
});
} else if(consCategory == Category.TYPE_CLASS) {
newSee = See.TypeClass.make(new CrossReference.TypeClass[] {
CrossReference.TypeClass.make(Name.TypeClass.make(collateralDamageModuleRenameMapping.getNewNameForModule(org.openquark.cal.compiler.SourceModel.Name.Module.maybeToModuleName(name.getModuleName())), name.getUnqualifiedName()), consReference.isChecked())
});
} else {
throw new IllegalStateException("unexpected category");
}
newSee.toSourceText(sb);
} else if(refersTo(moduleTypeInfo, name, oldName, category)) {
See newSee;
if(category == Category.MODULE_NAME) {
newSee = See.Module.make(new CrossReference.Module[] {
CrossReference.Module.make(Name.Module.make(newName.getModuleName()), consReference.isChecked())
});
} else if(category == Category.DATA_CONSTRUCTOR) {
CrossReference.DataCons newReference;
if(name.getModuleName() != null || qualifyAllRenamedReferences) {
newReference = CrossReference.DataCons.make(Name.DataCons.make(newName.getModuleName(), newName.getUnqualifiedName()), consReference.isChecked());
} else {
newReference = CrossReference.DataCons.make(Name.DataCons.makeUnqualified(newName.getUnqualifiedName()), consReference.isChecked());
}
newSee = See.DataCons.make(new CrossReference.DataCons[] { newReference });
} else if(category == Category.TYPE_CONSTRUCTOR) {
CrossReference.TypeCons newReference;
if(name.getModuleName() != null || qualifyAllRenamedReferences) {
newReference = CrossReference.TypeCons.make(Name.TypeCons.make(newName.getModuleName(), newName.getUnqualifiedName()), consReference.isChecked());
} else {
newReference = CrossReference.TypeCons.make(Name.TypeCons.makeUnqualified(newName.getUnqualifiedName()), consReference.isChecked());
}
newSee = See.TypeCons.make(new CrossReference.TypeCons[] { newReference });
} else if(category == Category.TYPE_CLASS) {
CrossReference.TypeClass newReference;
if(name.getModuleName() != null || qualifyAllRenamedReferences) {
newReference = CrossReference.TypeClass.make(Name.TypeClass.make(newName.getModuleName(), newName.getUnqualifiedName()), consReference.isChecked());
} else {
newReference = CrossReference.TypeClass.make(Name.TypeClass.makeUnqualified(newName.getUnqualifiedName()), consReference.isChecked());
}
newSee = See.TypeClass.make(new CrossReference.TypeClass[] { newReference });
} else {
throw new IllegalStateException("unexpected category");
}
newSee.toSourceText(sb);
} else {
// If the constructor name without context can be a module name or a qualified cons name where the
// module name is affected by a module renaming and needs to be disambiguated.
CanAppearWithoutContext.WithoutContextCons newReference = consReference;
if (getCategory(moduleTypeInfo, name) == Category.MODULE_NAME) {
// if the constructor name without context is a module name, disambiguate it if required.
ModuleName rawModuleName = ModuleName.make(name.toSourceText());
if (collateralDamageModuleRenameMapping.hasNewName(rawModuleName)) {
ModuleName fixedModuleName = collateralDamageModuleRenameMapping.getNewNameForModule(rawModuleName);
String fixedModuleNameAsString = fixedModuleName.toSourceText();
newReference = CrossReference.WithoutContextCons.make(Name.WithoutContextCons.make(fixedModuleNameAsString), reference.isChecked());
}
} else {
// the constructor name without context is not a module name,
// so if it is a qualified cons name, disambiguate the module name component if required.
ModuleName moduleName = org.openquark.cal.compiler.SourceModel.Name.Module.maybeToModuleName(name.getModuleName()); // may be null
if (moduleName != null) {
if (collateralDamageModuleRenameMapping.hasNewName(moduleName)) {
ModuleName fixedModuleName = collateralDamageModuleRenameMapping.getNewNameForModule(moduleName);
newReference = CrossReference.WithoutContextCons.make(Name.WithoutContextCons.make(fixedModuleName, name.getUnqualifiedName()), reference.isChecked());
}
}
}
See.WithoutContext newSee = See.WithoutContext.make(new CanAppearWithoutContext[] { newReference });
newSee.toSourceText(sb);
}
}
}
return makeReplaceText(sourceText, seeBlock.getSourceRange(), sb.toString());