From d7bf4f515d36f742d7fd28869c97129beff2a7a5 Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Fri, 24 Sep 2010 15:08:08 +0200
Subject: [PATCH] C++ indenter: Fix indentation if template and class appear on
 one line.

Task-number: QTCREATORBUG-2427
---
 src/plugins/cpptools/cppcodeformatter.cpp         | 15 +++++++++------
 .../cplusplus/codeformatter/tst_codeformatter.cpp | 13 +++++++++++++
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp
index 87811c01cdc..30f589e6026 100644
--- a/src/plugins/cpptools/cppcodeformatter.cpp
+++ b/src/plugins/cpptools/cppcodeformatter.cpp
@@ -1040,16 +1040,18 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
 
     switch (newState) {
     case namespace_start:
-        if (firstToken)
+        if (firstToken) {
             *savedIndentDepth = tokenPosition;
-        *indentDepth = tokenPosition;
+            *indentDepth = tokenPosition;
+        }
         break;
 
     case enum_start:
     case class_start:
-        if (firstToken)
+        if (firstToken) {
             *savedIndentDepth = tokenPosition;
-        *indentDepth = tokenPosition;
+            *indentDepth = tokenPosition;
+        }
         *paddingDepth = 2*m_indentSize;
         break;
 
@@ -1075,9 +1077,10 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
         break;
 
     case declaration_start:
-        if (firstToken)
+        if (firstToken) {
             *savedIndentDepth = tokenPosition;
-        *indentDepth = *savedIndentDepth;
+            *indentDepth = *savedIndentDepth;
+        }
         // continuation indent in function bodies only, to not indent
         // after the return type in "void\nfoo() {}"
         for (int i = 0; state(i).type != topmost_intro; ++i) {
diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
index 9d6f7c6584f..bebe2383c29 100644
--- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
+++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
@@ -48,6 +48,7 @@ private Q_SLOTS:
     void blockStmtInIf();
     void nestedInitializer();
     void forStatement();
+    void templateSingleline();
 };
 
 struct Line {
@@ -939,6 +940,18 @@ void tst_CodeFormatter::forStatement()
     checkIndent(data);
 }
 
+void tst_CodeFormatter::templateSingleline()
+{
+    QList<Line> data;
+    data
+         << Line("template <typename T> class Foo")
+         << Line("{")
+         << Line("    T t;")
+         << Line("}")
+         ;
+    checkIndent(data);
+}
+
 QTEST_APPLESS_MAIN(tst_CodeFormatter)
 #include "tst_codeformatter.moc"
 
-- 
GitLab