From 5d15076ea14262b474dd60768e6d80ef498cfdd1 Mon Sep 17 00:00:00 2001
From: jkobus <jaroslaw.kobus@digia.com>
Date: Fri, 13 Sep 2013 12:13:10 +0200
Subject: [PATCH] Fix compilation of generichighlighter test on Windows

Change-Id: I25c2f68528ede12fa900ea86973c6df39667c421
Reviewed-by: Jarek Kobus <jaroslaw.kobus@digia.com>
Reviewed-by: Christian Stenger <christian.stenger@digia.com>
---
 src/plugins/diffeditor/diffeditorwidget.cpp   |  7 ++----
 .../generichighlighter/highlighter.cpp        | 17 ++++++++++----
 .../generichighlighter/highlighter.h          | 23 ++++++++-----------
 .../highlighterutils.cpp                      | 12 +++++++---
 .../highlighterutils.h                        |  8 ++++---
 src/plugins/texteditor/plaintexteditor.cpp    |  2 +-
 src/plugins/texteditor/texteditor.pro         |  4 ++--
 src/plugins/texteditor/texteditor.qbs         |  6 +++--
 .../{texteditor => }/basetextdocumentlayout.h |  0
 .../highlighterengine/highlighterengine.pro   | 10 ++++----
 .../highlighterengine/highlighterengine.qbs   |  4 +---
 .../highlighterengine/highlightermock.cpp     |  7 +++---
 .../highlighterengine/highlightermock.h       |  2 +-
 .../{texteditor => }/syntaxhighlighter.cpp    |  3 ++-
 .../{texteditor => }/syntaxhighlighter.h      |  0
 .../{texteditor => }/tabsettings.h            |  0
 .../tst_highlighterengine.cpp                 | 13 ++++++-----
 17 files changed, 65 insertions(+), 53 deletions(-)
 rename src/plugins/texteditor/{generichighlighter => }/highlighterutils.cpp (88%)
 rename src/plugins/texteditor/{generichighlighter => }/highlighterutils.h (84%)
 rename tests/auto/generichighlighter/highlighterengine/{texteditor => }/basetextdocumentlayout.h (100%)
 rename tests/auto/generichighlighter/highlighterengine/{texteditor => }/syntaxhighlighter.cpp (98%)
 rename tests/auto/generichighlighter/highlighterengine/{texteditor => }/syntaxhighlighter.h (100%)
 rename tests/auto/generichighlighter/highlighterengine/{texteditor => }/tabsettings.h (100%)

diff --git a/src/plugins/diffeditor/diffeditorwidget.cpp b/src/plugins/diffeditor/diffeditorwidget.cpp
index 8c0c43b5707..4960b192633 100644
--- a/src/plugins/diffeditor/diffeditorwidget.cpp
+++ b/src/plugins/diffeditor/diffeditorwidget.cpp
@@ -45,8 +45,7 @@
 #include <texteditor/texteditorsettings.h>
 #include <texteditor/fontsettings.h>
 #include <texteditor/displaysettings.h>
-#include <texteditor/generichighlighter/highlighter.h>
-#include <texteditor/generichighlighter/highlighterutils.h>
+#include <texteditor/highlighterutils.h>
 
 #include <coreplugin/icore.h>
 #include <coreplugin/minisplitter.h>
@@ -278,9 +277,7 @@ void MultiHighlighter::setDocuments(const QList<QPair<DiffEditorWidget::DiffFile
                 highlighter->setDocument(document);
         }
         if (!highlighter) {
-            TextEditor::Highlighter *h = new TextEditor::Highlighter();
-            highlighter = h;
-            setMimeTypeForHighlighter(h, mimeType);
+            highlighter = createGenericSyntaxHighlighter(mimeType);
             highlighter->setDocument(document);
         }
         m_documents.append(document);
diff --git a/src/plugins/texteditor/generichighlighter/highlighter.cpp b/src/plugins/texteditor/generichighlighter/highlighter.cpp
index 7cd1bfca377..06106e9703b 100644
--- a/src/plugins/texteditor/generichighlighter/highlighter.cpp
+++ b/src/plugins/texteditor/generichighlighter/highlighter.cpp
@@ -35,7 +35,7 @@
 #include "highlighterexception.h"
 #include "progressdata.h"
 #include "reuse.h"
-#include <texteditor/tabsettings.h>
+#include "tabsettings.h"
 
 #include <QLatin1String>
 #include <QLatin1Char>
@@ -50,8 +50,6 @@ namespace {
     static const QLatin1Char kHash('#');
 }
 
-const Highlighter::KateFormatMap Highlighter::m_kateFormats;
-
 Highlighter::Highlighter(QTextDocument *parent) :
     TextEditor::SyntaxHighlighter(parent),
     m_regionDepth(0),
@@ -92,7 +90,14 @@ Highlighter::BlockData::BlockData() : m_foldingIndentDelta(0), m_originalObserva
 Highlighter::BlockData::~BlockData()
 {}
 
-Highlighter::KateFormatMap::KateFormatMap()
+// Mapping from Kate format strings to format ids.
+struct KateFormatMap
+{
+    KateFormatMap();
+    QHash<QString, Highlighter::TextFormatId> m_ids;
+};
+
+KateFormatMap::KateFormatMap()
 {
     m_ids.insert(QLatin1String("dsNormal"), Highlighter::Normal);
     m_ids.insert(QLatin1String("dsKeyword"), Highlighter::Keyword);
@@ -110,6 +115,8 @@ Highlighter::KateFormatMap::KateFormatMap()
     m_ids.insert(QLatin1String("dsOthers"), Highlighter::Others);
 }
 
+Q_GLOBAL_STATIC(KateFormatMap, kateFormatMap)
+
 void Highlighter::setDefaultContext(const QSharedPointer<Context> &defaultContext)
 {
     m_defaultContext = defaultContext;
@@ -404,7 +411,7 @@ void Highlighter::applyFormat(int offset,
         return;
     }
 
-    TextFormatId formatId = m_kateFormats.m_ids.value(itemData->style(), Normal);
+    TextFormatId formatId = kateFormatMap()->m_ids.value(itemData->style(), Normal);
     if (formatId != Normal) {
         QTextCharFormat format = formatForCategory(formatId);
         if (itemData->isCustomized()) {
diff --git a/src/plugins/texteditor/generichighlighter/highlighter.h b/src/plugins/texteditor/generichighlighter/highlighter.h
index 470506fdf4a..968a48a6c12 100644
--- a/src/plugins/texteditor/generichighlighter/highlighter.h
+++ b/src/plugins/texteditor/generichighlighter/highlighter.h
@@ -30,12 +30,12 @@
 #ifndef HIGHLIGHTER_H
 #define HIGHLIGHTER_H
 
-#include <texteditor/basetextdocumentlayout.h>
-#include <texteditor/syntaxhighlighter.h>
-#include <texteditor/texteditor_global.h>
-
 #include "context.h"
 
+// Yes, this is correct. These are found somewhere else when building the autotest.
+#include <basetextdocumentlayout.h>
+#include <syntaxhighlighter.h>
+
 #include <QString>
 #include <QVector>
 #include <QStack>
@@ -55,7 +55,12 @@ class ProgressData;
 
 } // namespace Internal
 
-class TEXTEDITOR_EXPORT Highlighter : public TextEditor::SyntaxHighlighter
+/*
+  Warning: Due to a very ugly hack with generichighlighter test
+  you can't export this class, so that it would be used from
+  other plugins. That's why highlighterutils.h was introduced.
+*/
+class Highlighter : public TextEditor::SyntaxHighlighter
 {
     Q_OBJECT
 
@@ -129,14 +134,6 @@ private:
     void applyIndentationBasedFolding(const QString &text) const;
     int neighbouringNonEmptyBlockIndent(QTextBlock block, const bool previous) const;
 
-    // Mapping from Kate format strings to format ids.
-    struct KateFormatMap
-    {
-        KateFormatMap();
-        QHash<QString, TextFormatId> m_ids;
-    };
-    static const KateFormatMap m_kateFormats;
-
     struct BlockData : TextBlockUserData
     {
         BlockData();
diff --git a/src/plugins/texteditor/generichighlighter/highlighterutils.cpp b/src/plugins/texteditor/highlighterutils.cpp
similarity index 88%
rename from src/plugins/texteditor/generichighlighter/highlighterutils.cpp
rename to src/plugins/texteditor/highlighterutils.cpp
index 4ecd5b675cf..360bb7bb913 100644
--- a/src/plugins/texteditor/generichighlighter/highlighterutils.cpp
+++ b/src/plugins/texteditor/highlighterutils.cpp
@@ -28,9 +28,9 @@
 ****************************************************************************/
 
 #include "highlighterutils.h"
-#include "highlighter.h"
-#include "highlightdefinition.h"
-#include "manager.h"
+#include "generichighlighter/highlighter.h"
+#include "generichighlighter/highlightdefinition.h"
+#include "generichighlighter/manager.h"
 #include <coreplugin/icore.h>
 
 using namespace TextEditor;
@@ -66,5 +66,11 @@ void TextEditor::setMimeTypeForHighlighter(Highlighter *highlighter, const Core:
             highlighter->setDefaultContext(definition->initialContext());
         }
     }
+}
 
+SyntaxHighlighter *TextEditor::createGenericSyntaxHighlighter(const Core::MimeType &mimeType)
+{
+    TextEditor::Highlighter *highlighter = new TextEditor::Highlighter();
+    setMimeTypeForHighlighter(highlighter, mimeType);
+    return highlighter;
 }
diff --git a/src/plugins/texteditor/generichighlighter/highlighterutils.h b/src/plugins/texteditor/highlighterutils.h
similarity index 84%
rename from src/plugins/texteditor/generichighlighter/highlighterutils.h
rename to src/plugins/texteditor/highlighterutils.h
index a781ac7e177..dd6bc5343dc 100644
--- a/src/plugins/texteditor/generichighlighter/highlighterutils.h
+++ b/src/plugins/texteditor/highlighterutils.h
@@ -31,7 +31,7 @@
 #define HIGHLIGHTERUTILS_H
 
 #include <QString>
-#include <texteditor/texteditor_global.h>
+#include "texteditor_global.h"
 
 /* These methods were originally a part of TextEditor::Highlighter,
  * but due to a very hackish test of that generic highlighter,
@@ -44,9 +44,11 @@ class MimeType;
 namespace TextEditor {
 
 class Highlighter;
+class SyntaxHighlighter;
 
-void TEXTEDITOR_EXPORT setMimeTypeForHighlighter(Highlighter *highlighter, const Core::MimeType &mimeType);
-QString TEXTEDITOR_EXPORT findDefinitionId(const Core::MimeType &mimeType, bool considerParents);
+void setMimeTypeForHighlighter(Highlighter *highlighter, const Core::MimeType &mimeType);
+QString findDefinitionId(const Core::MimeType &mimeType, bool considerParents);
+TEXTEDITOR_EXPORT SyntaxHighlighter *createGenericSyntaxHighlighter(const Core::MimeType &mimeType);
 
 } // namespace TextEditor
 
diff --git a/src/plugins/texteditor/plaintexteditor.cpp b/src/plugins/texteditor/plaintexteditor.cpp
index 410032a6ac9..573961cc236 100644
--- a/src/plugins/texteditor/plaintexteditor.cpp
+++ b/src/plugins/texteditor/plaintexteditor.cpp
@@ -33,7 +33,7 @@
 #include "texteditorsettings.h"
 #include "basetextdocument.h"
 #include "normalindenter.h"
-#include "generichighlighter/highlighterutils.h"
+#include "highlighterutils.h"
 #include <texteditor/generichighlighter/context.h>
 #include <texteditor/generichighlighter/highlightdefinition.h>
 #include <texteditor/generichighlighter/highlighter.h>
diff --git a/src/plugins/texteditor/texteditor.pro b/src/plugins/texteditor/texteditor.pro
index 723dbda6134..2a449986b6c 100644
--- a/src/plugins/texteditor/texteditor.pro
+++ b/src/plugins/texteditor/texteditor.pro
@@ -38,6 +38,7 @@ SOURCES += texteditorplugin.cpp \
     indenter.cpp \
     quickfix.cpp \
     syntaxhighlighter.cpp \
+    highlighterutils.cpp \
     generichighlighter/itemdata.cpp \
     generichighlighter/specificrules.cpp \
     generichighlighter/rule.cpp \
@@ -54,7 +55,6 @@ SOURCES += texteditorplugin.cpp \
     generichighlighter/highlightersettings.cpp \
     generichighlighter/managedefinitionsdialog.cpp \
     generichighlighter/definitiondownloader.cpp \
-    generichighlighter/highlighterutils.cpp \
     refactoringchanges.cpp \
     refactoroverlay.cpp \
     outlinefactory.cpp \
@@ -146,6 +146,7 @@ HEADERS += texteditorplugin.h \
     quickfix.h \
     ihighlighterfactory.h \
     syntaxhighlighter.h \
+    highlighterutils.h \
     generichighlighter/reuse.h \
     generichighlighter/itemdata.h \
     generichighlighter/specificrules.h \
@@ -166,7 +167,6 @@ HEADERS += texteditorplugin.h \
     generichighlighter/managedefinitionsdialog.h \
     generichighlighter/highlightdefinitionmetadata.h \
     generichighlighter/definitiondownloader.h \
-    generichighlighter/highlighterutils.h \
     refactoringchanges.h \
     refactoroverlay.h \
     outlinefactory.h \
diff --git a/src/plugins/texteditor/texteditor.qbs b/src/plugins/texteditor/texteditor.qbs
index 637b756fbc0..cf5e4b68e62 100644
--- a/src/plugins/texteditor/texteditor.qbs
+++ b/src/plugins/texteditor/texteditor.qbs
@@ -10,6 +10,8 @@ QtcPlugin {
     Depends { name: "Find" }
     Depends { name: "Locator" }
 
+    cpp.includePaths: base.concat([path]) // Needed for the highlighterengine autotest.
+
     files: [
         "autocompleter.cpp",
         "autocompleter.h",
@@ -78,6 +80,8 @@ QtcPlugin {
         "fontsettingspage.ui",
         "helpitem.cpp",
         "helpitem.h",
+        "highlighterutils.cpp",
+        "highlighterutils.h",
         "icodestylepreferences.cpp",
         "icodestylepreferences.h",
         "icodestylepreferencesfactory.cpp",
@@ -216,8 +220,6 @@ QtcPlugin {
             "highlightersettingspage.cpp",
             "highlightersettingspage.h",
             "highlightersettingspage.ui",
-            "highlighterutils.cpp",
-            "highlighterutils.h",
             "includerulesinstruction.cpp",
             "includerulesinstruction.h",
             "itemdata.cpp",
diff --git a/tests/auto/generichighlighter/highlighterengine/texteditor/basetextdocumentlayout.h b/tests/auto/generichighlighter/highlighterengine/basetextdocumentlayout.h
similarity index 100%
rename from tests/auto/generichighlighter/highlighterengine/texteditor/basetextdocumentlayout.h
rename to tests/auto/generichighlighter/highlighterengine/basetextdocumentlayout.h
diff --git a/tests/auto/generichighlighter/highlighterengine/highlighterengine.pro b/tests/auto/generichighlighter/highlighterengine/highlighterengine.pro
index f222f2ff7b4..55d8711bbbc 100644
--- a/tests/auto/generichighlighter/highlighterengine/highlighterengine.pro
+++ b/tests/auto/generichighlighter/highlighterengine/highlighterengine.pro
@@ -7,7 +7,7 @@ SOURCES += \
     tst_highlighterengine.cpp \
     highlightermock.cpp \
     formats.cpp \
-    texteditor/syntaxhighlighter.cpp \
+    syntaxhighlighter.cpp \
     $$GENERICHIGHLIGHTERDIR/highlighter.cpp \
     $$GENERICHIGHLIGHTERDIR/context.cpp \
     $$GENERICHIGHLIGHTERDIR/dynamicrule.cpp \
@@ -21,9 +21,9 @@ SOURCES += \
 HEADERS += \
     highlightermock.h \
     formats.h \
-    texteditor/basetextdocumentlayout.h \
-    texteditor/syntaxhighlighter.h \
-    texteditor/tabsettings.h \
+    basetextdocumentlayout.h \
+    syntaxhighlighter.h \
+    tabsettings.h \
     $$GENERICHIGHLIGHTERDIR/highlighter.h \
     $$GENERICHIGHLIGHTERDIR/context.h \
     $$GENERICHIGHLIGHTERDIR/dynamicrule.h \
@@ -34,4 +34,4 @@ HEADERS += \
     $$GENERICHIGHLIGHTERDIR/keywordlist.h \
     $$GENERICHIGHLIGHTERDIR/itemdata.h
 
-INCLUDEPATH += $$PWD $$GENERICHIGHLIGHTERDIR
+INCLUDEPATH += $$PWD
diff --git a/tests/auto/generichighlighter/highlighterengine/highlighterengine.qbs b/tests/auto/generichighlighter/highlighterengine/highlighterengine.qbs
index af6def8e3d5..b8e214df86b 100644
--- a/tests/auto/generichighlighter/highlighterengine/highlighterengine.qbs
+++ b/tests/auto/generichighlighter/highlighterengine/highlighterengine.qbs
@@ -30,7 +30,6 @@ Autotest {
     }
     Group {
         name: "Drop-in sources for the plugin"
-        prefix: "texteditor/"
         files: [
             "basetextdocumentlayout.h",
             "syntaxhighlighter.h", "syntaxhighlighter.cpp",
@@ -41,7 +40,6 @@ Autotest {
     cpp.defines: base.concat(["TEXTEDITOR_LIBRARY"]) // For Windows
     cpp.includePaths: base.concat([
         path,
-        project.genericHighlighterDir,
         project.genericHighlighterDir + "/../..",
-        path])
+    ])
 }
diff --git a/tests/auto/generichighlighter/highlighterengine/highlightermock.cpp b/tests/auto/generichighlighter/highlighterengine/highlightermock.cpp
index 5785ba0b55d..79c0f57bec0 100644
--- a/tests/auto/generichighlighter/highlighterengine/highlightermock.cpp
+++ b/tests/auto/generichighlighter/highlighterengine/highlightermock.cpp
@@ -27,10 +27,11 @@
 **
 ****************************************************************************/
 
-#include "highlightermock.h"
-#include "context.h"
-#include "highlightdefinition.h"
 #include "formats.h"
+#include "highlightermock.h"
+
+#include <texteditor/generichighlighter/context.h>
+#include <texteditor/generichighlighter/highlightdefinition.h>
 
 #include <QDebug>
 #include <QtTest>
diff --git a/tests/auto/generichighlighter/highlighterengine/highlightermock.h b/tests/auto/generichighlighter/highlighterengine/highlightermock.h
index 1cbacc1cd91..cf0332d4f08 100644
--- a/tests/auto/generichighlighter/highlighterengine/highlightermock.h
+++ b/tests/auto/generichighlighter/highlighterengine/highlightermock.h
@@ -30,7 +30,7 @@
 #ifndef HIGHLIGHTERMOCK_H
 #define HIGHLIGHTERMOCK_H
 
-#include "highlighter.h"
+#include <texteditor/generichighlighter/highlighter.h>
 
 #include <QList>
 
diff --git a/tests/auto/generichighlighter/highlighterengine/texteditor/syntaxhighlighter.cpp b/tests/auto/generichighlighter/highlighterengine/syntaxhighlighter.cpp
similarity index 98%
rename from tests/auto/generichighlighter/highlighterengine/texteditor/syntaxhighlighter.cpp
rename to tests/auto/generichighlighter/highlighterengine/syntaxhighlighter.cpp
index 5d5c6c9abd8..11c886c042e 100644
--- a/tests/auto/generichighlighter/highlighterengine/texteditor/syntaxhighlighter.cpp
+++ b/tests/auto/generichighlighter/highlighterengine/syntaxhighlighter.cpp
@@ -28,9 +28,10 @@
 ****************************************************************************/
 
 #include "syntaxhighlighter.h"
-#include "highlighter.h"
 #include "formats.h"
 
+#include <texteditor/generichighlighter/highlighter.h>
+
 using namespace TextEditor;
 using namespace Internal;
 
diff --git a/tests/auto/generichighlighter/highlighterengine/texteditor/syntaxhighlighter.h b/tests/auto/generichighlighter/highlighterengine/syntaxhighlighter.h
similarity index 100%
rename from tests/auto/generichighlighter/highlighterengine/texteditor/syntaxhighlighter.h
rename to tests/auto/generichighlighter/highlighterengine/syntaxhighlighter.h
diff --git a/tests/auto/generichighlighter/highlighterengine/texteditor/tabsettings.h b/tests/auto/generichighlighter/highlighterengine/tabsettings.h
similarity index 100%
rename from tests/auto/generichighlighter/highlighterengine/texteditor/tabsettings.h
rename to tests/auto/generichighlighter/highlighterengine/tabsettings.h
diff --git a/tests/auto/generichighlighter/highlighterengine/tst_highlighterengine.cpp b/tests/auto/generichighlighter/highlighterengine/tst_highlighterengine.cpp
index 6d18ea18bcb..252e74c8038 100644
--- a/tests/auto/generichighlighter/highlighterengine/tst_highlighterengine.cpp
+++ b/tests/auto/generichighlighter/highlighterengine/tst_highlighterengine.cpp
@@ -27,13 +27,14 @@
 **
 ****************************************************************************/
 
-#include "highlightdefinition.h"
-#include "keywordlist.h"
-#include "itemdata.h"
-#include "context.h"
-#include "specificrules.h"
-#include "highlightermock.h"
 #include "formats.h"
+#include "highlightermock.h"
+
+#include <texteditor/generichighlighter/context.h>
+#include <texteditor/generichighlighter/highlightdefinition.h>
+#include <texteditor/generichighlighter/itemdata.h>
+#include <texteditor/generichighlighter/keywordlist.h>
+#include <texteditor/generichighlighter/specificrules.h>
 
 #include <QSharedPointer>
 #include <QScopedPointer>
-- 
GitLab