in src/checks/manuallevel/qt6-qlatin1stringchar-to-u.cpp [299:371]
std::string Qt6QLatin1StringCharToU::buildReplacement(clang::Stmt *stmt, bool &noFix, bool extra, bool ancestorIsCondition, int ancestorConditionChildNumber)
{
std::string replacement;
Stmt *current_stmt = stmt;
int i = 0;
for (auto it = current_stmt->child_begin(); it != current_stmt->child_end(); it++) {
Stmt *child = *it;
auto *parent_condOp = dyn_cast<ConditionalOperator>(current_stmt);
auto *child_condOp = dyn_cast<ConditionalOperator>(child);
if (parent_condOp) {
ancestorIsCondition = true;
ancestorConditionChildNumber = i;
if (ancestorConditionChildNumber == 2) {
replacement += " : ";
}
}
// to handle nested condition
if (child_condOp && ancestorIsCondition) {
replacement += "(";
}
// to handle catching left over nested QLatin1String call
if (extra && child_condOp && !ancestorIsCondition) {
replacement += "(";
}
replacement += buildReplacement(child, noFix, extra, ancestorIsCondition, ancestorConditionChildNumber);
auto *child_declRefExp = dyn_cast<DeclRefExpr>(child);
auto *child_boolLitExp = dyn_cast<CXXBoolLiteralExpr>(child);
auto *child_charliteral = dyn_cast<CharacterLiteral>(child);
auto *child_stringliteral = dyn_cast<StringLiteral>(child);
if (child_stringliteral) {
replacement += "u\"";
replacement += child_stringliteral->getString();
replacement += "\"";
replacement += "_qs";
} else if (child_charliteral) {
replacement += "u\'";
if (child_charliteral->getValue() == 92 || child_charliteral->getValue() == 39) {
replacement += "\\";
}
replacement += child_charliteral->getValue();
replacement += "\'";
} else if (child_boolLitExp) {
replacement = child_boolLitExp->getValue() ? "true" : "false";
replacement += " ? ";
} else if (child_declRefExp) {
if (ancestorIsCondition && ancestorConditionChildNumber == 0 && child_declRefExp->getType().getAsString() == "_Bool") {
replacement += child_declRefExp->getNameInfo().getAsString();
replacement += " ? ";
} else {
// not supporting those cases
noFix = true;
return {};
}
} else if (child_condOp && ancestorIsCondition) {
replacement += ")";
}
if (extra && child_condOp && !ancestorIsCondition) {
replacement += ")";
}
i++;
}
return replacement;
}