diff options
author | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2013-06-17 16:09:47 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2013-06-25 09:57:23 +0200 |
commit | 021dbc2e96f7ad18c8ec4ae76f753e6223ff871f (patch) | |
tree | b2e44e9ec22f26ce5cc910616f5730701626689a /src/plugins/cpptools/cpppointerdeclarationformatter.cpp | |
parent | c59ba462adff332fee2cb333cbb9a87972288011 (diff) | |
download | qt-creator-021dbc2e96f7ad18c8ec4ae76f753e6223ff871f.tar.gz |
CppEditor: Respect whitespace in operator names for more quick fixes
* Affected quick fixes: InsertDefFromDecl, MoveFuncDefOutside
* Fix also reformating pointer declaration of operator functions for
qualified name ids
Change-Id: I6a7578f496221557d103f5fdbb5dacc9540ee779
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cpppointerdeclarationformatter.cpp')
-rw-r--r-- | src/plugins/cpptools/cpppointerdeclarationformatter.cpp | 36 |
1 files changed, 7 insertions, 29 deletions
diff --git a/src/plugins/cpptools/cpppointerdeclarationformatter.cpp b/src/plugins/cpptools/cpppointerdeclarationformatter.cpp index bb4291b5e7..edcb105028 100644 --- a/src/plugins/cpptools/cpppointerdeclarationformatter.cpp +++ b/src/plugins/cpptools/cpppointerdeclarationformatter.cpp @@ -115,7 +115,7 @@ static unsigned firstTypeSpecifierWithoutFollowingAttribute( PointerDeclarationFormatter::PointerDeclarationFormatter( const CppRefactoringFilePtr refactoringFile, - const Overview &overview, + Overview &overview, CursorHandling cursorHandling) : ASTVisitor(refactoringFile->cppDocument()->translationUnit()) , m_cppRefactoringFile(refactoringFile) @@ -413,21 +413,14 @@ void PointerDeclarationFormatter::checkAndRewrite(DeclaratorAST *declarator, QString rewrittenDeclaration; const Name *name = symbol->name(); if (name) { - if (name->isOperatorNameId()) { - // Take the operator name from the file instead from the AST, so the white - // spaces within the operator names can be respected, e.g. in "operator =". - const QByteArray operatorText - = m_cppRefactoringFile->textOf(declarator->core_declarator).toLatin1(); - Identifier operatorName(operatorText.constData(), operatorText.size()); - rewrittenDeclaration = rewriteDeclaration(type, &operatorName); - } else { - rewrittenDeclaration = rewriteDeclaration(type, name); + if (name->isOperatorNameId() + || (name->isQualifiedNameId() + && name->asQualifiedNameId()->name()->isOperatorNameId())) { + const QString operatorText = m_cppRefactoringFile->textOf(declarator->core_declarator); + m_overview.includeWhiteSpaceInOperatorName = operatorText.contains(QLatin1Char(' ')); } - } else { - // The declaration will be correctly rewritten for name == 0 (e.g. "int *"). - rewrittenDeclaration = rewriteDeclaration(type, name); } - + rewrittenDeclaration = m_overview.prettyType(type, name); rewrittenDeclaration.remove(0, charactersToRemove); CHECK_R(originalDeclaration != rewrittenDeclaration, "Rewritten is same as original"); @@ -460,21 +453,6 @@ void PointerDeclarationFormatter::checkAndRewrite(DeclaratorAST *declarator, qDebug() << "Replacement operation failed"; } -/*! Rewrite/format the given type and name. */ -QString PointerDeclarationFormatter::rewriteDeclaration(FullySpecifiedType type, const Name *name) - const -{ - CHECK_RV(type.isValid(), "Invalid type", QString()); - - const char *identifier = 0; - if (const Name *declarationName = name) { - if (const Identifier *id = declarationName->identifier()) - identifier = id->chars(); - } - - return m_overview.prettyType(type, QLatin1String(identifier)); -} - void PointerDeclarationFormatter::printCandidate(AST *ast) { #if DEBUG_OUTPUT |