summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r--src/plugins/cpptools/cpppointerdeclarationformatter.cpp36
-rw-r--r--src/plugins/cpptools/cpppointerdeclarationformatter.h5
-rw-r--r--src/plugins/cpptools/cpppointerdeclarationformatter_test.cpp6
3 files changed, 14 insertions, 33 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
diff --git a/src/plugins/cpptools/cpppointerdeclarationformatter.h b/src/plugins/cpptools/cpppointerdeclarationformatter.h
index 0419f8257e..621c6d3971 100644
--- a/src/plugins/cpptools/cpppointerdeclarationformatter.h
+++ b/src/plugins/cpptools/cpppointerdeclarationformatter.h
@@ -78,7 +78,7 @@ public:
enum CursorHandling { RespectCursor, IgnoreCursor };
explicit PointerDeclarationFormatter(const CppRefactoringFilePtr refactoringFile,
- const Overview &overview,
+ Overview &overview,
CursorHandling cursorHandling = IgnoreCursor);
/*!
@@ -113,11 +113,10 @@ private:
void processIfWhileForStatement(ExpressionAST *expression, Symbol *symbol);
void checkAndRewrite(DeclaratorAST *declarator, Symbol *symbol, TokenRange range,
unsigned charactersToRemove = 0);
- QString rewriteDeclaration(FullySpecifiedType type, const Name *name) const;
void printCandidate(AST *ast);
const CppRefactoringFilePtr m_cppRefactoringFile;
- const Overview &m_overview;
+ Overview &m_overview;
const CursorHandling m_cursorHandling;
ChangeSet m_changeSet;
diff --git a/src/plugins/cpptools/cpppointerdeclarationformatter_test.cpp b/src/plugins/cpptools/cpppointerdeclarationformatter_test.cpp
index 474a829ac5..cddb4d0db2 100644
--- a/src/plugins/cpptools/cpppointerdeclarationformatter_test.cpp
+++ b/src/plugins/cpptools/cpppointerdeclarationformatter_test.cpp
@@ -349,9 +349,13 @@ void CppToolsPlugin::test_format_pointerdeclaration_in_simpledeclarations_data()
<< source << stripCursor(source);
// Respect white space within operator names
- QTest::newRow("operators")
+ QTest::newRow("operators1")
<< "class C { C@&operator = (const C &); };"
<< "class C { C & operator = (const C &); };";
+
+ QTest::newRow("operators2")
+ << "C &C::operator = (const C &) {}"
+ << "C & C::operator = (const C &) {}";
}
void CppToolsPlugin::test_format_pointerdeclaration_in_controlflowstatements()