diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp index 9b84403a56d97d78fa86facafd9272fb9ecabed9..ac63a3941e61fe8a9d9ea53d8609165d0f951b8e 100644 --- a/src/plugins/cppeditor/cppquickfix.cpp +++ b/src/plugins/cppeditor/cppquickfix.cpp @@ -759,7 +759,7 @@ class WrapStringLiteral: public QuickFixOperation { public: WrapStringLiteral() - : stringLiteral(0) + : stringLiteral(0), isObjCStringLiteral(false) {} virtual QString description() const @@ -778,6 +778,8 @@ public: if (!stringLiteral) return -1; + isObjCStringLiteral = charAt(startOf(stringLiteral)) == QLatin1Char('@'); + // check if it is already wrapped in QLatin1String or -Literal if (index-2 < 0) return index; @@ -805,12 +807,20 @@ public: virtual void createChangeSet() { - insert(startOf(stringLiteral), "QLatin1String("); + const int startPos = startOf(stringLiteral); + const QLatin1String replacement("QLatin1String("); + + if (isObjCStringLiteral) + replace(startPos, startPos + 1, replacement); + else + insert(startPos, replacement); + insert(endOf(stringLiteral), ")"); } private: StringLiteralAST *stringLiteral; + bool isObjCStringLiteral; }; } // end of anonymous namespace @@ -1040,6 +1050,11 @@ QString QuickFixOperation::textOf(const AST *ast) const return textOf(startOf(ast), endOf(ast)); } +QChar QuickFixOperation::charAt(int offset) const +{ + return textOf(offset, offset + 1).at(0); +} + void QuickFixOperation::apply() { Range range; diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h index e7f2b1a8962f853cc015a1bddaf71037b24399a2..77fcb20cfbf6b450230f9cc3c9915e7e17fd1da8 100644 --- a/src/plugins/cppeditor/cppquickfix.h +++ b/src/plugins/cppeditor/cppquickfix.h @@ -116,6 +116,7 @@ protected: QString textOf(int firstOffset, int lastOffset) const; QString textOf(const CPlusPlus::AST *ast) const; + QChar charAt(int offset) const; struct Range { Range() {}