diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 226b27a86109ce90512243a2358810b480489d3b..a2d766effc0ba48bf7d21abe4d6ee9738f316503 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1539,6 +1539,7 @@ void CPPEditor::indentBlock(QTextDocument *doc, QTextBlock block, QChar typedCha codeFormatter.setIndentDeclarationMembers(true); } + codeFormatter.updateStateUntil(block); const int depth = codeFormatter.indentFor(block); ts.indentLine(block, depth); } diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp index 97db194e70a40f06bd0f1307fb0603b037ccb0d8..0eb40bf4e91b38de286baffeb4d4d11c5b1df4f8 100644 --- a/src/plugins/cpptools/cppcodeformatter.cpp +++ b/src/plugins/cpptools/cppcodeformatter.cpp @@ -446,12 +446,12 @@ int CodeFormatter::indentFor(const QTextBlock &block) { // qDebug() << "indenting for" << block.blockNumber() + 1; - requireStatesUntil(block); + restoreBlockState(block.previous()); correctIndentation(block); return m_indentDepth; } -void CodeFormatter::requireStatesUntil(const QTextBlock &endBlock) +void CodeFormatter::updateStateUntil(const QTextBlock &endBlock) { QStack<State> previousState = initialState(); QTextBlock it = endBlock.document()->firstBlock(); @@ -473,7 +473,6 @@ void CodeFormatter::requireStatesUntil(const QTextBlock &endBlock) //qDebug() << "recalc line" << it.blockNumber() + 1; recalculateStateAfter(it); } - restoreBlockState(endBlock.previous()); } CodeFormatter::State CodeFormatter::state(int belowTop) const diff --git a/src/plugins/cpptools/cppcodeformatter.h b/src/plugins/cpptools/cppcodeformatter.h index 16375892af972caed66e679e0740903a7d4877ea..2475603d4d0254627871191c076f7185fda2b945 100644 --- a/src/plugins/cpptools/cppcodeformatter.h +++ b/src/plugins/cpptools/cppcodeformatter.h @@ -28,6 +28,7 @@ public: CodeFormatter(); virtual ~CodeFormatter(); + void updateStateUntil(const QTextBlock &block); int indentFor(const QTextBlock &block); void setTabSize(int tabSize); @@ -138,7 +139,6 @@ protected: bool isBracelessState(int type) const; private: - void requireStatesUntil(const QTextBlock &block); void recalculateStateAfter(const QTextBlock &block); void storeBlockState(const QTextBlock &block); void restoreBlockState(const QTextBlock &block); diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp index 7c49cc4c236d7e49460e8ed71d5506d3e6a1d876..3960de86f39e1fb573f9ae5d1742529c93a0f387 100644 --- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp +++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp @@ -89,6 +89,8 @@ void checkIndent(QList<Line> data, int style = 0) formatter.setIndentDeclarationBraces(true); } + formatter.updateStateUntil(document.lastBlock()); + int i = 0; foreach (const Line &l, data) { if (l.expectedIndent != -1) {