aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppeditor/cppquickfixes.cpp
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2020-01-09 11:18:44 +0100
committerEike Ziller <eike.ziller@qt.io>2020-01-09 11:18:44 +0100
commit0f30adcc8cdc538ae96198c1e2d988ef16abfae5 (patch)
tree78263557a28db9f7256f21fbe4e54dbbc4449361 /src/plugins/cppeditor/cppquickfixes.cpp
parentafa1e2bc399c820e1def47d03b91eebbf670c71f (diff)
parenta4055f382c194198473b21b95fc0aedbc00a0477 (diff)
Merge remote-tracking branch 'origin/4.11'
Diffstat (limited to 'src/plugins/cppeditor/cppquickfixes.cpp')
-rw-r--r--src/plugins/cppeditor/cppquickfixes.cpp50
1 files changed, 31 insertions, 19 deletions
diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp
index c1bf3c42b4..b9aac32df2 100644
--- a/src/plugins/cppeditor/cppquickfixes.cpp
+++ b/src/plugins/cppeditor/cppquickfixes.cpp
@@ -4153,20 +4153,21 @@ private:
void removeNewExpression(ChangeSet &changes, NewExpressionAST *newExprAST) const
{
- ExpressionListParenAST *exprlist = newExprAST->new_initializer
- ? newExprAST->new_initializer->asExpressionListParen()
- : nullptr;
+ ExpressionListAST *exprlist = nullptr;
+ if (newExprAST->new_initializer) {
+ if (ExpressionListParenAST *ast = newExprAST->new_initializer->asExpressionListParen())
+ exprlist = ast->expression_list;
+ else if (BracedInitializerAST *ast = newExprAST->new_initializer->asBracedInitializer())
+ exprlist = ast->expression_list;
+ }
- if (exprlist && exprlist->expression_list) {
+ if (exprlist) {
// remove 'new' keyword and type before initializer
changes.remove(m_file->startOf(newExprAST->new_token),
m_file->startOf(newExprAST->new_initializer));
- // remove parenthesis around initializer
- int pos = m_file->startOf(exprlist->lparen_token);
- changes.remove(pos, pos + 1);
- pos = m_file->startOf(exprlist->rparen_token);
- changes.remove(pos, pos + 1);
+ changes.remove(m_file->endOf(m_declaratorAST->equal_token - 1),
+ m_file->startOf(m_declaratorAST->equal_token + 1));
} else {
// remove the whole new expression
changes.remove(m_file->endOf(m_identifierAST->firstToken()),
@@ -4272,24 +4273,30 @@ private:
return overview.prettyName(namedType->name->name);
}
- void insertNewExpression(ChangeSet &changes, CallAST *callAST) const
+ void insertNewExpression(ChangeSet &changes, ExpressionAST *ast) const
{
const QString typeName = typeNameOfDeclaration();
- if (typeName.isEmpty()) {
- changes.insert(m_file->startOf(callAST), QLatin1String("new "));
+ if (CallAST *callAST = ast->asCall()) {
+ if (typeName.isEmpty()) {
+ changes.insert(m_file->startOf(callAST), QLatin1String("new "));
+ } else {
+ changes.insert(m_file->startOf(callAST),
+ QLatin1String("new ") + typeName + QLatin1Char('('));
+ changes.insert(m_file->startOf(callAST->lastToken()), QLatin1String(")"));
+ }
} else {
- changes.insert(m_file->startOf(callAST),
- QLatin1String("new ") + typeName + QLatin1Char('('));
- changes.insert(m_file->startOf(callAST->lastToken()), QLatin1String(")"));
+ if (typeName.isEmpty())
+ return;
+ changes.insert(m_file->startOf(ast), QLatin1String(" = new ") + typeName);
}
}
- void insertNewExpression(ChangeSet &changes, ExpressionListParenAST *exprListAST) const
+ void insertNewExpression(ChangeSet &changes) const
{
const QString typeName = typeNameOfDeclaration();
if (typeName.isEmpty())
return;
- changes.insert(m_file->startOf(exprListAST),
+ changes.insert(m_file->endOf(m_identifierAST->firstToken()),
QLatin1String(" = new ") + typeName);
}
@@ -4301,10 +4308,15 @@ private:
changes.insert(m_file->startOf(idExprAST), QLatin1String("&"));
} else if (CallAST *callAST = m_declaratorAST->initializer->asCall()) {
insertNewExpression(changes, callAST);
- } else if (ExpressionListParenAST *exprListAST
- = m_declaratorAST->initializer->asExpressionListParen()) {
+ } else if (ExpressionListParenAST *exprListAST = m_declaratorAST->initializer
+ ->asExpressionListParen()) {
insertNewExpression(changes, exprListAST);
+ } else if (BracedInitializerAST *bracedInitializerAST = m_declaratorAST->initializer
+ ->asBracedInitializer()) {
+ insertNewExpression(changes, bracedInitializerAST);
}
+ } else {
+ insertNewExpression(changes);
}
// Fix all occurrences of the identifier in this function.