summaryrefslogtreecommitdiff
path: root/src/plugins/cppeditor
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2010-06-14 17:15:53 +0200
committerErik Verbruggen <erik.verbruggen@nokia.com>2010-06-14 17:16:45 +0200
commitf3faf34db9d437338e5a8843e5d142ddfdefa0de (patch)
tree881432a7b668a99f916cbf690efdb2d317e3af1c /src/plugins/cppeditor
parent00b5333745f82a379da8a17311ea1679dd39777a (diff)
downloadqt-creator-f3faf34db9d437338e5a8843e5d142ddfdefa0de.tar.gz
Removed implicit change set and related utility methods.
Diffstat (limited to 'src/plugins/cppeditor')
-rw-r--r--src/plugins/cppeditor/cppquickfix.cpp270
-rw-r--r--src/plugins/cppeditor/cppquickfix.h33
2 files changed, 195 insertions, 108 deletions
diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp
index ea809580a8..179969fc8d 100644
--- a/src/plugins/cppeditor/cppquickfix.cpp
+++ b/src/plugins/cppeditor/cppquickfix.cpp
@@ -56,6 +56,7 @@
using namespace CppEditor::Internal;
using namespace CPlusPlus;
+using namespace Utils;
namespace {
@@ -135,18 +136,20 @@ public:
return index;
}
- virtual void createChangeSet()
+ virtual void createChanges()
{
+ ChangeSet changes;
if (negation) {
// can't remove parentheses since that might break precedence
- remove(negation->unary_op_token);
+ remove(&changes, negation->unary_op_token);
} else if (nested) {
- insert(startOf(nested), "!");
+ changes.insert(startOf(nested), "!");
} else {
- insert(startOf(binary), "!(");
- insert(endOf(binary), ")");
+ changes.insert(startOf(binary), "!(");
+ changes.insert(endOf(binary), ")");
}
- replace(binary->binary_op_token, replacement);
+ replace(&changes, binary->binary_op_token, replacement);
+ cppRefactoringChanges()->changeFile(fileName(), changes);
}
private:
@@ -221,11 +224,15 @@ public:
return index;
}
- virtual void createChangeSet()
+ virtual void createChanges()
{
- flip(binary->left_expression, binary->right_expression);
+ ChangeSet changes;
+
+ flip(&changes, binary->left_expression, binary->right_expression);
if (! replacement.isEmpty())
- replace(binary->binary_op_token, replacement);
+ replace(&changes, binary->binary_op_token, replacement);
+
+ cppRefactoringChanges()->changeFile(fileName(), changes);
}
private:
@@ -283,14 +290,19 @@ public:
return -1;
}
- virtual void createChangeSet()
+ virtual void createChanges()
{
- setTopLevelNode(pattern);
- replace(pattern->binary_op_token, QLatin1String("||"));
- remove(left->unary_op_token);
- remove(right->unary_op_token);
- insert(startOf(pattern), QLatin1String("!("));
- insert(endOf(pattern), QLatin1String(")"));
+ ChangeSet changes;
+ replace(&changes, pattern->binary_op_token, QLatin1String("||"));
+ remove(&changes, left->unary_op_token);
+ remove(&changes, right->unary_op_token);
+ const int start = startOf(pattern);
+ const int end = endOf(pattern);
+ changes.insert(start, QLatin1String("!("));
+ changes.insert(end, QLatin1String(")"));
+
+ cppRefactoringChanges()->changeFile(fileName(), changes);
+ cppRefactoringChanges()->reindent(fileName(), range(start, end));
}
private:
@@ -374,9 +386,10 @@ public:
return -1;
}
- virtual void createChangeSet()
+ virtual void createChanges()
{
- setTopLevelNode(declaration);
+ ChangeSet changes;
+
SpecifierListAST *specifiers = declaration->decl_specifier_list;
int declSpecifiersStart = startOf(specifiers->firstToken());
int declSpecifiersEnd = endOf(specifiers->lastToken() - 1);
@@ -387,16 +400,21 @@ public:
for (DeclaratorListAST *it = declaration->declarator_list->next; it; it = it->next) {
DeclaratorAST *declarator = it->value;
- insert(insertPos, QLatin1String("\n"));
- copy(declSpecifiersStart, declSpecifiersEnd, insertPos);
- insert(insertPos, QLatin1String(" "));
- move(declarator, insertPos);
- insert(insertPos, QLatin1String(";"));
+ changes.insert(insertPos, QLatin1String("\n"));
+ changes.copy(declSpecifiersStart, declSpecifiersEnd - declSpecifiersStart, insertPos);
+ changes.insert(insertPos, QLatin1String(" "));
+ move(&changes, declarator, insertPos);
+ changes.insert(insertPos, QLatin1String(";"));
- remove(endOf(prevDeclarator), startOf(declarator));
+ const int prevDeclEnd = endOf(prevDeclarator);
+ changes.remove(prevDeclEnd, startOf(declarator) - prevDeclEnd);
prevDeclarator = declarator;
}
+
+ cppRefactoringChanges()->changeFile(fileName(), changes);
+ cppRefactoringChanges()->reindent(fileName(), range(startOf(declaration->firstToken()),
+ endOf(declaration->lastToken() - 1)));
}
private:
@@ -448,11 +466,18 @@ public:
return -1;
}
- virtual void createChangeSet()
+ virtual void createChanges()
{
- setTopLevelNode(_statement);
- insert(endOf(_statement->firstToken() - 1), QLatin1String(" {"));
- insert(endOf(_statement->lastToken() - 1), "\n}");
+ ChangeSet changes;
+
+ const int start = endOf(_statement->firstToken() - 1);
+ changes.insert(start, QLatin1String(" {"));
+
+ const int end = endOf(_statement->lastToken() - 1);
+ changes.insert(end, "\n}");
+
+ cppRefactoringChanges()->changeFile(fileName(), changes);
+ cppRefactoringChanges()->reindent(fileName(), range(start, end));
}
private:
@@ -502,15 +527,19 @@ public:
return -1;
}
- virtual void createChangeSet()
+ virtual void createChanges()
{
- setTopLevelNode(pattern);
+ ChangeSet changes;
- copy(core, startOf(condition));
+ copy(&changes, core, startOf(condition));
int insertPos = startOf(pattern);
- move(condition, insertPos);
- insert(insertPos, QLatin1String(";\n"));
+ move(&changes, condition, insertPos);
+ changes.insert(insertPos, QLatin1String(";\n"));
+
+ cppRefactoringChanges()->changeFile(fileName(), changes);
+ cppRefactoringChanges()->reindent(fileName(), range(startOf(pattern),
+ endOf(pattern)));
}
private:
@@ -572,17 +601,22 @@ public:
return -1;
}
- virtual void createChangeSet()
+ virtual void createChanges()
{
- setTopLevelNode(pattern);
+ ChangeSet changes;
- insert(startOf(condition), QLatin1String("("));
- insert(endOf(condition), QLatin1String(") != 0"));
+ changes.insert(startOf(condition), QLatin1String("("));
+ changes.insert(endOf(condition), QLatin1String(") != 0"));
int insertPos = startOf(pattern);
- move(startOf(condition), startOf(core), insertPos);
- copy(core, insertPos);
- insert(insertPos, QLatin1String(";\n"));
+ const int conditionStart = startOf(condition);
+ changes.move(conditionStart, startOf(core) - conditionStart, insertPos);
+ copy(&changes, core, insertPos);
+ changes.insert(insertPos, QLatin1String(";\n"));
+
+ cppRefactoringChanges()->changeFile(fileName(), changes);
+ cppRefactoringChanges()->reindent(fileName(), range(startOf(pattern),
+ endOf(pattern)));
}
private:
@@ -671,7 +705,7 @@ public:
return -1;
}
- virtual void createChangeSet()
+ virtual void createChanges()
{
Token binaryToken = tokenAt(condition->binary_op_token);
@@ -683,35 +717,51 @@ public:
void splitAndCondition()
{
- setTopLevelNode(pattern);
+ ChangeSet changes;
int startPos = startOf(pattern);
- insert(startPos, QLatin1String("if ("));
- move(condition->left_expression, startPos);
- insert(startPos, QLatin1String(") {\n"));
-
- remove(endOf(condition->left_expression), startOf(condition->right_expression));
- insert(endOf(pattern), QLatin1String("\n}"));
+ changes.insert(startPos, QLatin1String("if ("));
+ move(&changes, condition->left_expression, startPos);
+ changes.insert(startPos, QLatin1String(") {\n"));
+
+ const int lExprEnd = endOf(condition->left_expression);
+ changes.remove(lExprEnd,
+ startOf(condition->right_expression) - lExprEnd);
+ changes.insert(endOf(pattern), QLatin1String("\n}"));
+
+ cppRefactoringChanges()->changeFile(fileName(), changes);
+ cppRefactoringChanges()->reindent(fileName(), range(startOf(pattern),
+ endOf(pattern)));
}
void splitOrCondition()
{
+ ChangeSet changes;
+
StatementAST *ifTrueStatement = pattern->statement;
CompoundStatementAST *compoundStatement = ifTrueStatement->asCompoundStatement();
- setTopLevelNode(pattern);
-
int insertPos = endOf(ifTrueStatement);
if (compoundStatement)
- insert(insertPos, QLatin1String(" "));
+ changes.insert(insertPos, QLatin1String(" "));
else
- insert(insertPos, QLatin1String("\n"));
- insert(insertPos, QLatin1String("else if ("));
- move(startOf(condition->right_expression), startOf(pattern->rparen_token), insertPos);
- insert(insertPos, QLatin1String(")"));
- copy(endOf(pattern->rparen_token), endOf(pattern->statement), insertPos);
+ changes.insert(insertPos, QLatin1String("\n"));
+ changes.insert(insertPos, QLatin1String("else if ("));
+
+ const int rExprStart = startOf(condition->right_expression);
+ changes.move(rExprStart, startOf(pattern->rparen_token) - rExprStart,
+ insertPos);
+ changes.insert(insertPos, QLatin1String(")"));
- remove(endOf(condition->left_expression), startOf(condition->right_expression));
+ const int rParenEnd = endOf(pattern->rparen_token);
+ changes.copy(rParenEnd, endOf(pattern->statement) - rParenEnd, insertPos);
+
+ const int lExprEnd = endOf(condition->left_expression);
+ changes.remove(lExprEnd, startOf(condition->right_expression) - lExprEnd);
+
+ cppRefactoringChanges()->changeFile(fileName(), changes);
+ cppRefactoringChanges()->reindent(fileName(), range(startOf(pattern),
+ endOf(pattern)));
}
private:
@@ -775,17 +825,21 @@ public:
return index;
}
- virtual void createChangeSet()
+ virtual void createChanges()
{
+ ChangeSet changes;
+
const int startPos = startOf(stringLiteral);
const QLatin1String replacement("QLatin1String(");
if (isObjCStringLiteral)
- replace(startPos, startPos + 1, replacement);
+ changes.replace(startPos, 1, replacement);
else
- insert(startPos, replacement);
+ changes.insert(startPos, replacement);
- insert(endOf(stringLiteral), ")");
+ changes.insert(endOf(stringLiteral), ")");
+
+ cppRefactoringChanges()->changeFile(fileName(), changes);
}
private:
@@ -846,14 +900,21 @@ public:
return index;
}
- virtual void createChangeSet()
+ virtual void createChanges()
{
+ ChangeSet changes;
+
if (qlatin1Call) {
- replace(startOf(qlatin1Call), startOf(stringLiteral), QLatin1String("@"));
- remove(endOf(stringLiteral), endOf(qlatin1Call));
+ changes.replace(startOf(qlatin1Call),
+ startOf(stringLiteral) - startOf(qlatin1Call),
+ QLatin1String("@"));
+ changes.remove(endOf(stringLiteral),
+ endOf(qlatin1Call) - endOf(stringLiteral));
} else {
- insert(startOf(stringLiteral), "@");
+ changes.insert(startOf(stringLiteral), "@");
}
+
+ cppRefactoringChanges()->changeFile(fileName(), changes);
}
private:
@@ -887,6 +948,9 @@ int CppQuickFixOperation::match(TextEditor::QuickFixState *state)
return match(s->path);
}
+QString CppQuickFixOperation::fileName() const
+{ return document()->fileName(); }
+
void CppQuickFixOperation::apply()
{
cppRefactoringChanges()->apply();
@@ -898,12 +962,6 @@ CppTools::CppRefactoringChanges *CppQuickFixOperation::cppRefactoringChanges() c
TextEditor::RefactoringChanges *CppQuickFixOperation::refactoringChanges() const
{ return cppRefactoringChanges(); }
-CPlusPlus::AST *CppQuickFixOperation::topLevelNode() const
-{ return _topLevelNode; }
-
-void CppQuickFixOperation::setTopLevelNode(CPlusPlus::AST *topLevelNode)
-{ _topLevelNode = topLevelNode; }
-
Document::Ptr CppQuickFixOperation::document() const
{ return _document; }
@@ -979,57 +1037,91 @@ bool CppQuickFixOperation::isCursorOn(const CPlusPlus::AST *ast) const
return false;
}
-void CppQuickFixOperation::move(unsigned tokenIndex, int to)
+void CppQuickFixOperation::move(ChangeSet *changeSet, unsigned tokenIndex,
+ int to)
{
+ Q_ASSERT(changeSet);
+
int start, end;
startAndEndOf(tokenIndex, &start, &end);
- move(start, end, to);
+ changeSet->move(start, end - start, to);
}
-void CppQuickFixOperation::move(const CPlusPlus::AST *ast, int to)
+void CppQuickFixOperation::move(ChangeSet *changeSet, const CPlusPlus::AST *ast,
+ int to)
{
- move(startOf(ast), endOf(ast), to);
+ Q_ASSERT(changeSet);
+
+ const int start = startOf(ast);
+ changeSet->move(start, endOf(ast) - start, to);
}
-void CppQuickFixOperation::replace(unsigned tokenIndex, const QString &replacement)
+void CppQuickFixOperation::replace(ChangeSet *changeSet, unsigned tokenIndex,
+ const QString &replacement)
{
+ Q_ASSERT(changeSet);
+
int start, end;
startAndEndOf(tokenIndex, &start, &end);
- replace(start, end, replacement);
+ changeSet->replace(start, end - start, replacement);
}
-void CppQuickFixOperation::replace(const CPlusPlus::AST *ast, const QString &replacement)
+void CppQuickFixOperation::replace(ChangeSet *changeSet,
+ const CPlusPlus::AST *ast,
+ const QString &replacement)
{
- replace(startOf(ast), endOf(ast), replacement);
+ Q_ASSERT(changeSet);
+
+ const int start = startOf(ast);
+ changeSet->replace(start, endOf(ast) - start, replacement);
}
-void CppQuickFixOperation::remove(unsigned tokenIndex)
+void CppQuickFixOperation::remove(ChangeSet *changeSet, unsigned tokenIndex)
{
+ Q_ASSERT(changeSet);
+
int start, end;
startAndEndOf(tokenIndex, &start, &end);
- remove(start, end);
+ changeSet->remove(start, end - start);
}
-void CppQuickFixOperation::remove(const CPlusPlus::AST *ast)
+void CppQuickFixOperation::remove(ChangeSet *changeSet, const CPlusPlus::AST *ast)
{
- remove(startOf(ast), endOf(ast));
+ Q_ASSERT(changeSet);
+
+ const int start = startOf(ast);
+ changeSet->remove(start, endOf(ast) - start);
}
-void CppQuickFixOperation::flip(const CPlusPlus::AST *ast1, const CPlusPlus::AST *ast2)
+void CppQuickFixOperation::flip(ChangeSet *changeSet,
+ const CPlusPlus::AST *ast1,
+ const CPlusPlus::AST *ast2)
{
- flip(startOf(ast1), endOf(ast1), startOf(ast2), endOf(ast2));
+ Q_ASSERT(changeSet);
+
+ const int start1 = startOf(ast1);
+ const int start2 = startOf(ast2);
+ changeSet->flip(start1, endOf(ast1) - start1,
+ start2, endOf(ast2) - start2);
}
-void CppQuickFixOperation::copy(unsigned tokenIndex, int to)
+void CppQuickFixOperation::copy(ChangeSet *changeSet, unsigned tokenIndex,
+ int to)
{
+ Q_ASSERT(changeSet);
+
int start, end;
startAndEndOf(tokenIndex, &start, &end);
- copy(start, end, to);
+ changeSet->copy(start, end - start, to);
}
-void CppQuickFixOperation::copy(const CPlusPlus::AST *ast, int to)
+void CppQuickFixOperation::copy(ChangeSet *changeSet, const CPlusPlus::AST *ast,
+ int to)
{
- copy(startOf(ast), endOf(ast), to);
+ Q_ASSERT(changeSet);
+
+ const int start = startOf(ast);
+ changeSet->copy(start, endOf(ast) - start, to);
}
QString CppQuickFixOperation::textOf(const AST *ast) const
diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h
index a16562523a..28e11b5451 100644
--- a/src/plugins/cppeditor/cppquickfix.h
+++ b/src/plugins/cppeditor/cppquickfix.h
@@ -65,13 +65,12 @@ public:
virtual int match(TextEditor::QuickFixState *state);
protected:
+ QString fileName() const;
+
virtual void apply();
virtual CppTools::CppRefactoringChanges *cppRefactoringChanges() const;
virtual TextEditor::RefactoringChanges *refactoringChanges() const;
- CPlusPlus::AST *topLevelNode() const;
- void setTopLevelNode(CPlusPlus::AST *topLevelNode);
-
const CPlusPlus::Token &tokenAt(unsigned index) const;
int startOf(unsigned index) const;
@@ -83,25 +82,21 @@ protected:
bool isCursorOn(unsigned tokenIndex) const;
bool isCursorOn(const CPlusPlus::AST *ast) const;
- using TextEditor::QuickFixOperation::move;
- using TextEditor::QuickFixOperation::replace;
- using TextEditor::QuickFixOperation::insert;
- using TextEditor::QuickFixOperation::remove;
- using TextEditor::QuickFixOperation::flip;
- using TextEditor::QuickFixOperation::copy;
-
using TextEditor::QuickFixOperation::textOf;
using TextEditor::QuickFixOperation::charAt;
- void move(unsigned tokenIndex, int to);
- void move(const CPlusPlus::AST *ast, int to);
- void replace(unsigned tokenIndex, const QString &replacement);
- void replace(const CPlusPlus::AST *ast, const QString &replacement);
- void remove(unsigned tokenIndex);
- void remove(const CPlusPlus::AST *ast);
- void flip(const CPlusPlus::AST *ast1, const CPlusPlus::AST *ast2);
- void copy(unsigned tokenIndex, int to);
- void copy(const CPlusPlus::AST *ast, int to);
+ void move(Utils::ChangeSet *changeSet, unsigned tokenIndex, int to);
+ void move(Utils::ChangeSet *changeSet, const CPlusPlus::AST *ast, int to);
+ void replace(Utils::ChangeSet *changeSet, unsigned tokenIndex,
+ const QString &replacement);
+ void replace(Utils::ChangeSet *changeSet, const CPlusPlus::AST *ast,
+ const QString &replacement);
+ void remove(Utils::ChangeSet *changeSet, unsigned tokenIndex);
+ void remove(Utils::ChangeSet *changeSet, const CPlusPlus::AST *ast);
+ void flip(Utils::ChangeSet *changeSet, const CPlusPlus::AST *ast1,
+ const CPlusPlus::AST *ast2);
+ void copy(Utils::ChangeSet *changeSet, unsigned tokenIndex, int to);
+ void copy(Utils::ChangeSet *changeSet, const CPlusPlus::AST *ast, int to);
QString textOf(const CPlusPlus::AST *ast) const;