forked from qt-creator/qt-creator
		
	Quickfix: Wrap string literal in QLatin1String(...)
This commit is contained in:
		@@ -748,6 +748,70 @@ private:
 | 
			
		||||
    IfStatementAST *pattern;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  Replace
 | 
			
		||||
    "abcd"
 | 
			
		||||
  With
 | 
			
		||||
    QLatin1String("abcd")
 | 
			
		||||
*/
 | 
			
		||||
class WrapStringLiteral: public QuickFixOperation
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    WrapStringLiteral()
 | 
			
		||||
        : stringLiteral(0)
 | 
			
		||||
    {}
 | 
			
		||||
 | 
			
		||||
    virtual QString description() const
 | 
			
		||||
    {
 | 
			
		||||
        return QLatin1String("Enclose in QLatin1String(...)"); // ### tr?
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual int match(const QList<AST *> &path)
 | 
			
		||||
    {
 | 
			
		||||
        if (path.isEmpty())
 | 
			
		||||
            return -1;
 | 
			
		||||
 | 
			
		||||
        int index = path.size() - 1;
 | 
			
		||||
        stringLiteral = path[index]->asStringLiteral();
 | 
			
		||||
 | 
			
		||||
        if (!stringLiteral)
 | 
			
		||||
            return -1;
 | 
			
		||||
 | 
			
		||||
        // check if it is already wrapped in QLatin1String or -Literal
 | 
			
		||||
        if (index-2 < 0)
 | 
			
		||||
            return index;
 | 
			
		||||
 | 
			
		||||
        CallAST *call = path[index-1]->asCall();
 | 
			
		||||
        PostfixExpressionAST *postfixExp = path[index-2]->asPostfixExpression();
 | 
			
		||||
        if (call && postfixExp
 | 
			
		||||
            && postfixExp->base_expression
 | 
			
		||||
            && postfixExp->postfix_expression_list
 | 
			
		||||
            && postfixExp->postfix_expression_list->value == call)
 | 
			
		||||
        {
 | 
			
		||||
            NameAST *callName = postfixExp->base_expression->asName();
 | 
			
		||||
            if (!callName)
 | 
			
		||||
                return index;
 | 
			
		||||
 | 
			
		||||
            QByteArray callNameString(tokenAt(callName->firstToken()).spell());
 | 
			
		||||
            if (callNameString == "QLatin1String"
 | 
			
		||||
                || callNameString == "QLatin1Literal"
 | 
			
		||||
                )
 | 
			
		||||
                return -1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return index;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual void createChangeSet()
 | 
			
		||||
    {
 | 
			
		||||
        insert(startOf(stringLiteral), "QLatin1String(");
 | 
			
		||||
        insert(endOf(stringLiteral), ")");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    StringLiteralAST *stringLiteral;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // end of anonymous namespace
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1033,6 +1097,7 @@ int CPPQuickFixCollector::startCompletion(TextEditor::ITextEditable *editable)
 | 
			
		||||
        QSharedPointer<AddBracesToIfOp> addBracesToIfOp(new AddBracesToIfOp());
 | 
			
		||||
        QSharedPointer<UseInverseOp> useInverseOp(new UseInverseOp());
 | 
			
		||||
        QSharedPointer<FlipBinaryOp> flipBinaryOp(new FlipBinaryOp());
 | 
			
		||||
        QSharedPointer<WrapStringLiteral> wrapStringLiteral(new WrapStringLiteral());
 | 
			
		||||
 | 
			
		||||
        QList<QuickFixOperationPtr> candidates;
 | 
			
		||||
        candidates.append(rewriteLogicalAndOp);
 | 
			
		||||
@@ -1043,6 +1108,7 @@ int CPPQuickFixCollector::startCompletion(TextEditor::ITextEditable *editable)
 | 
			
		||||
        candidates.append(addBracesToIfOp);
 | 
			
		||||
        candidates.append(useInverseOp);
 | 
			
		||||
        candidates.append(flipBinaryOp);
 | 
			
		||||
        candidates.append(wrapStringLiteral);
 | 
			
		||||
 | 
			
		||||
        QMap<int, QList<QuickFixOperationPtr> > matchedOps;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user