diff options
Diffstat (limited to 'src/plugins/cppeditor/cppquickfixes.cpp')
-rw-r--r-- | src/plugins/cppeditor/cppquickfixes.cpp | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index c8929a6ff9..50d0da5aff 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -2002,9 +2002,13 @@ namespace { class ConvertToCamelCaseOp: public CppQuickFixOperation { public: - ConvertToCamelCaseOp(const CppQuickFixInterface &interface, const QString &newName) + ConvertToCamelCaseOp(const CppQuickFixInterface &interface, const QString &name, + const AST *nameAst, bool test) : CppQuickFixOperation(interface, -1) - , m_name(newName) + , m_name(name) + , m_nameAst(nameAst) + , m_isAllUpper(name.isUpper()) + , m_test(test) { setDescription(QApplication::translate("CppTools::QuickFix", "Convert to Camel Case")); } @@ -2014,17 +2018,24 @@ public: CppRefactoringChanges refactoring(snapshot()); CppRefactoringFilePtr currentFile = refactoring.file(filePath().toString()); - for (int i = 1; i < m_name.length(); ++i) { - const QChar c = m_name.at(i); - if (c.isUpper()) { - m_name[i] = c.toLower(); - } else if (i < m_name.length() - 1 - && isConvertibleUnderscore(m_name, i)) { - m_name.remove(i, 1); - m_name[i] = m_name.at(i).toUpper(); + QString newName = m_isAllUpper ? m_name.toLower() : m_name; + for (int i = 1; i < newName.length(); ++i) { + const QChar c = newName.at(i); + if (c.isUpper() && m_isAllUpper) { + newName[i] = c.toLower(); + } else if (i < newName.length() - 1 && isConvertibleUnderscore(newName, i)) { + newName.remove(i, 1); + newName[i] = newName.at(i).toUpper(); } } - editor()->renameUsages(m_name); + if (m_test) { + ChangeSet changeSet; + changeSet.replace(currentFile->range(m_nameAst), newName); + currentFile->setChangeSet(changeSet); + currentFile->apply(); + } else { + editor()->renameUsages(newName); + } } static bool isConvertibleUnderscore(const QString &name, int pos) @@ -2034,7 +2045,10 @@ public: } private: - QString m_name; + const QString m_name; + const AST * const m_nameAst; + const bool m_isAllUpper; + const bool m_test; }; } // anonymous namespace @@ -2048,22 +2062,26 @@ void ConvertToCamelCase::match(const CppQuickFixInterface &interface, QuickFixOp AST * const ast = path.last(); const Name *name = nullptr; + const AST *astForName = nullptr; if (const NameAST * const nameAst = ast->asName()) { - if (nameAst->name && nameAst->name->asNameId()) + if (nameAst->name && nameAst->name->asNameId()) { + astForName = nameAst; name = nameAst->name; + } } else if (const NamespaceAST * const namespaceAst = ast->asNamespace()) { + astForName = namespaceAst; name = namespaceAst->symbol->name(); } if (!name) return; - QString newName = QString::fromUtf8(name->identifier()->chars()); - if (newName.length() < 3) + QString nameString = QString::fromUtf8(name->identifier()->chars()); + if (nameString.length() < 3) return; - for (int i = 1; i < newName.length() - 1; ++i) { - if (ConvertToCamelCaseOp::isConvertibleUnderscore(newName, i)) { - result << new ConvertToCamelCaseOp(interface, newName); + for (int i = 1; i < nameString.length() - 1; ++i) { + if (ConvertToCamelCaseOp::isConvertibleUnderscore(nameString, i)) { + result << new ConvertToCamelCaseOp(interface, nameString, astForName, m_test); return; } } |