diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp
index b242f6c490d74d8c0c43312702fbfd0fe420aa92..87811c01cdc28851766d33ba77dfb63e580a38c7 100644
--- a/src/plugins/cpptools/cppcodeformatter.cpp
+++ b/src/plugins/cpptools/cppcodeformatter.cpp
@@ -36,6 +36,7 @@
 #include <texteditor/tabsettings.h>
 
 #include <QtCore/QDebug>
+#include <QtCore/QMetaEnum>
 #include <QtGui/QTextDocument>
 #include <QtGui/QTextCursor>
 #include <QtGui/QTextBlock>
@@ -907,10 +908,12 @@ int CodeFormatter::tokenizeBlock(const QTextBlock &block, bool *endedJoined)
 
 void CodeFormatter::dump() const
 {
+    QMetaEnum metaEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("StateType"));
+
     qDebug() << "Current token index" << m_tokenIndex;
     qDebug() << "Current state:";
     foreach (State s, m_currentState) {
-        qDebug() << s.type << s.savedIndentDepth << s.savedPaddingDepth;
+        qDebug() << metaEnum.valueToKey(s.type) << s.savedIndentDepth << s.savedPaddingDepth;
     }
     qDebug() << "Current indent depth:" << m_indentDepth;
     qDebug() << "Current padding depth:" << m_paddingDepth;
diff --git a/src/plugins/cpptools/cppcodeformatter.h b/src/plugins/cpptools/cppcodeformatter.h
index bb46fc6abc59a3ec1597d26d3a389a21cd450527..fa306d2c3400629f343880f4a305b0322aff705c 100644
--- a/src/plugins/cpptools/cppcodeformatter.h
+++ b/src/plugins/cpptools/cppcodeformatter.h
@@ -57,6 +57,7 @@ class CppCodeFormatterData;
 
 class CPPTOOLS_EXPORT CodeFormatter
 {
+    Q_GADGET
 public:
     CodeFormatter();
     virtual ~CodeFormatter();
@@ -98,7 +99,7 @@ protected:
     virtual void saveLexerState(QTextBlock *block, int state) const = 0;
     virtual int loadLexerState(const QTextBlock &block) const = 0;
 
-protected:
+public: // must be public to make Q_GADGET introspection work
     enum StateType {
         invalid = 0,
 
@@ -170,7 +171,9 @@ protected:
         expression, // after a '=' in a declaration_start once we're sure it's not '= {'
         initializer, // after a '=' in a declaration start
     };
+    Q_ENUMS(StateType)
 
+protected:
     class State {
     public:
         State()
diff --git a/tests/auto/cplusplus/codeformatter/codeformatter.pro b/tests/auto/cplusplus/codeformatter/codeformatter.pro
index 6ebd7722237301d05b857eeff461e8e5d9e01644..6aa0259f5885a480c01f10fc9a22e4ed9bf3a174 100644
--- a/tests/auto/cplusplus/codeformatter/codeformatter.pro
+++ b/tests/auto/cplusplus/codeformatter/codeformatter.pro
@@ -12,6 +12,7 @@ SOURCES += \
     $$SRCDIR/plugins/texteditor/basetextdocumentlayout.cpp
 
 HEADERS += \
+    $$SRCDIR/plugins/cpptools/cppcodeformatter.h \
     $$SRCDIR/plugins/texteditor/basetextdocumentlayout.h
 
 INCLUDEPATH += $$SRCDIR/plugins $$SRCDIR/libs