diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2011-09-30 10:45:11 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2011-09-30 12:01:33 +0200 |
commit | 1b5e10e1b66961f6bf07fe4d1a24ccc540447f39 (patch) | |
tree | 03573fb0581009b75cfb0d4ccd38265cc69d6a3a | |
parent | 5e7e6e5a9cbf6c01ce71694c9d278463b57a1a0d (diff) | |
download | qt-creator-1b5e10e1b66961f6bf07fe4d1a24ccc540447f39.tar.gz |
CppEditor: Add Quickfix for Qt 5 QStringLiteral.
Make replacement a parameter of the Operation class.
Change-Id: Ie9c013061d7045b3ee8c0e569e9df342dab38096
Reviewed-on: http://codereview.qt-project.org/5845
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Christian Kamm <christian.d.kamm@nokia.com>
-rw-r--r-- | src/plugins/cppeditor/cppquickfixes.cpp | 73 |
1 files changed, 50 insertions, 23 deletions
diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index d6742c0017..df8cf8a7f8 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -74,6 +74,11 @@ using namespace TextEditor; using namespace CPlusPlus; using namespace Utils; +static inline bool isQtStringLiteral(const QByteArray &id) +{ + return id == "QLatin1String" || id == "QLatin1Literal" || id == "QStringLiteral"; +} + namespace { /* @@ -897,6 +902,13 @@ private: Activates on: the string literal */ + +static inline QString msgQtStringLiteralDescription(const QString &replacement, int qtVersion) +{ + return QApplication::translate("CppTools::QuickFix", "Enclose in %1(...) (Qt %2)") + .arg(replacement).arg(qtVersion); +} + class WrapStringLiteral: public CppQuickFixFactory { public: @@ -932,7 +944,7 @@ public: const QByteArray id(file->tokenAt(functionName->identifier_token).identifier->chars()); if (id == "QT_TRANSLATE_NOOP" || id == "tr" || id == "trUtf8" - || (type == TypeString && (id == "QLatin1String" || id == "QLatin1Literal")) + || (type == TypeString && isQtStringLiteral(id)) || (type == TypeChar && id == "QLatin1Char")) return noResult(); // skip it } @@ -945,53 +957,68 @@ public: if (file->charAt(file->startOf(literal)) == QLatin1Char('@')) type = TypeObjCString; } - return singleResult(new Operation(interface, - path.size() - 1, // very high priority - type, - literal)); + + QList<CppQuickFixOperation::Ptr> result; + + const int priority = path.size() - 1; // very high priority + if (type == TypeChar) { + const QString replacement = QLatin1String("QLatin1Char"); + const QString description = + QApplication::translate("CppTools::QuickFix", "Enclose in %1(...)") + .arg(replacement); + + result.push_back(CppQuickFixOperation::Ptr(new Operation(interface, priority, type, + replacement, description, literal))); + } else { + QString replacement = QLatin1String("QLatin1String"); + result.push_back(CppQuickFixOperation::Ptr(new Operation(interface, priority, type, + replacement, msgQtStringLiteralDescription(replacement, 4), + literal))); + replacement = QLatin1String("QStringLiteral"); + result.push_back(CppQuickFixOperation::Ptr(new Operation(interface, priority, type, + replacement, msgQtStringLiteralDescription(replacement, 5), + literal))); + } + return result; } private: class Operation: public CppQuickFixOperation { public: - Operation(const QSharedPointer<const CppQuickFixAssistInterface> &interface, int priority, Type type, + Operation(const QSharedPointer<const CppQuickFixAssistInterface> &interface, int priority, + Type type, const QString &replacement, const QString &description, ExpressionAST *literal) : CppQuickFixOperation(interface, priority) - , type(type) + , type(type), replacement(replacement) , literal(literal) { - if (type == TypeChar) - setDescription(QApplication::translate("CppTools::QuickFix", - "Enclose in QLatin1Char(...)")); - else - setDescription(QApplication::translate("CppTools::QuickFix", - "Enclose in QLatin1String(...)")); - } + setDescription(description); + } virtual void performChanges(const CppRefactoringFilePtr ¤tFile, const CppRefactoringChanges &) { ChangeSet changes; const int startPos = currentFile->startOf(literal); - QLatin1String replacement = (type == TypeChar ? QLatin1String("QLatin1Char(") - : QLatin1String("QLatin1String(")); - + const QString fullReplacement = replacement + QLatin1Char('('); if (type == TypeObjCString) - changes.replace(startPos, startPos + 1, replacement); + changes.replace(startPos, startPos + 1, fullReplacement); else - changes.insert(startPos, replacement); + changes.insert(startPos, fullReplacement); - changes.insert(currentFile->endOf(literal), ")"); + changes.insert(currentFile->endOf(literal), QLatin1String(")")); currentFile->setChangeSet(changes); currentFile->apply(); } private: - Type type; + const Type type; + const QString replacement; ExpressionAST *literal; }; + }; /* @@ -1035,7 +1062,7 @@ public: if (id == "tr" || id == "trUtf8" || id == "translate" || id == "QT_TRANSLATE_NOOP" - || id == "QLatin1String" || id == "QLatin1Literal") + || isQtStringLiteral(id)) return noResult(); // skip it } } @@ -1164,7 +1191,7 @@ public: if (SimpleNameAST *functionName = idExpr->name->asSimpleName()) { const QByteArray id(interface->currentFile()->tokenAt(functionName->identifier_token).identifier->chars()); - if (id == "QLatin1String" || id == "QLatin1Literal") + if (isQtStringLiteral(id)) qlatin1Call = call; } } |