From 725ecc5f9179df92d4c26dbedea12028fa7d3ea1 Mon Sep 17 00:00:00 2001
From: Orgad Shaneh <orgad.shaneh@audiocodes.com>
Date: Thu, 17 Jan 2013 22:08:29 +0200
Subject: [PATCH] VCS: Refactor createDiffHighlighter

All plugins do the same...

Change-Id: I21e5a1d7507292add91199a3db75df74165b63b1
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 src/plugins/bazaar/bazaareditor.cpp         | 4 ++--
 src/plugins/bazaar/bazaareditor.h           | 2 +-
 src/plugins/clearcase/clearcaseeditor.cpp   | 6 ++----
 src/plugins/clearcase/clearcaseeditor.h     | 2 +-
 src/plugins/cvs/cvseditor.cpp               | 7 ++-----
 src/plugins/cvs/cvseditor.h                 | 2 +-
 src/plugins/git/giteditor.cpp               | 5 ++---
 src/plugins/git/giteditor.h                 | 2 +-
 src/plugins/mercurial/mercurialeditor.cpp   | 4 ++--
 src/plugins/mercurial/mercurialeditor.h     | 2 +-
 src/plugins/perforce/perforceeditor.cpp     | 5 ++---
 src/plugins/perforce/perforceeditor.h       | 2 +-
 src/plugins/subversion/subversioneditor.cpp | 7 ++-----
 src/plugins/subversion/subversioneditor.h   | 2 +-
 src/plugins/vcsbase/diffhighlighter.cpp     | 5 ++---
 src/plugins/vcsbase/diffhighlighter.h       | 3 +--
 src/plugins/vcsbase/vcsbaseeditor.cpp       | 4 ++--
 src/plugins/vcsbase/vcsbaseeditor.h         | 2 +-
 18 files changed, 27 insertions(+), 39 deletions(-)

diff --git a/src/plugins/bazaar/bazaareditor.cpp b/src/plugins/bazaar/bazaareditor.cpp
index aaa76f5861d..48a1687b8db 100644
--- a/src/plugins/bazaar/bazaareditor.cpp
+++ b/src/plugins/bazaar/bazaareditor.cpp
@@ -111,9 +111,9 @@ QString BazaarEditor::changeUnderCursor(const QTextCursor &cursorIn) const
     return QString();
 }
 
-VcsBase::DiffHighlighter *BazaarEditor::createDiffHighlighter() const
+QRegExp BazaarEditor::diffFilePattern() const
 {
-    return new VcsBase::DiffHighlighter(m_diffFileId);
+    return m_diffFileId;
 }
 
 VcsBase::BaseAnnotationHighlighter *BazaarEditor::createAnnotationHighlighter(const QSet<QString> &changes,
diff --git a/src/plugins/bazaar/bazaareditor.h b/src/plugins/bazaar/bazaareditor.h
index b82208aeb5c..b895fb6593b 100644
--- a/src/plugins/bazaar/bazaareditor.h
+++ b/src/plugins/bazaar/bazaareditor.h
@@ -46,7 +46,7 @@ public:
 private:
     QSet<QString> annotationChanges() const;
     QString changeUnderCursor(const QTextCursor &cursor) const;
-    VcsBase::DiffHighlighter *createDiffHighlighter() const;
+    QRegExp diffFilePattern() const;
     VcsBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes, const QColor &bg) const;
     QString fileNameFromDiffSpecification(const QTextBlock &diffFileSpec) const;
 
diff --git a/src/plugins/clearcase/clearcaseeditor.cpp b/src/plugins/clearcase/clearcaseeditor.cpp
index 853512f4fd6..c00a973b428 100644
--- a/src/plugins/clearcase/clearcaseeditor.cpp
+++ b/src/plugins/clearcase/clearcaseeditor.cpp
@@ -93,11 +93,9 @@ QString ClearCaseEditor::changeUnderCursor(const QTextCursor &c) const
 +++ main.cpp@@\main\1
 @@ -6,6 +6,5 @@
 */
-VcsBase::DiffHighlighter *ClearCaseEditor::createDiffHighlighter() const
+QRegExp ClearCaseEditor::diffFilePattern() const
 {
-    const QRegExp filePattern(QLatin1String("^[-+][-+][-+] "));
-    QTC_CHECK(filePattern.isValid());
-    return new VcsBase::DiffHighlighter(filePattern);
+    return QRegExp(QLatin1String("^[-+][-+][-+] "));
 }
 
 VcsBase::BaseAnnotationHighlighter *ClearCaseEditor::createAnnotationHighlighter(const QSet<QString> &changes,
diff --git a/src/plugins/clearcase/clearcaseeditor.h b/src/plugins/clearcase/clearcaseeditor.h
index 2418a011571..afb79553666 100644
--- a/src/plugins/clearcase/clearcaseeditor.h
+++ b/src/plugins/clearcase/clearcaseeditor.h
@@ -49,7 +49,7 @@ public:
 private:
     QSet<QString> annotationChanges() const;
     QString changeUnderCursor(const QTextCursor &) const;
-    VcsBase::DiffHighlighter *createDiffHighlighter() const;
+    QRegExp diffFilePattern() const;
     VcsBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes, const QColor &bg) const;
     QString fileNameFromDiffSpecification(const QTextBlock &diffFileName) const;
 
diff --git a/src/plugins/cvs/cvseditor.cpp b/src/plugins/cvs/cvseditor.cpp
index fbc69bec1d1..f2624fb15f2 100644
--- a/src/plugins/cvs/cvseditor.cpp
+++ b/src/plugins/cvs/cvseditor.cpp
@@ -120,12 +120,9 @@ cvs diff -d -u -r1.1 -r1.2:
 @@ -6,6 +6,5 @@
 \endcode
 */
-
-VcsBase::DiffHighlighter *CvsEditor::createDiffHighlighter() const
+QRegExp CvsEditor::diffFilePattern() const
 {
-    const QRegExp filePattern(QLatin1String("^[-+][-+][-+] .*1\\.[\\d\\.]+$"));
-    QTC_CHECK(filePattern.isValid());
-    return new VcsBase::DiffHighlighter(filePattern);
+    return QRegExp(QLatin1String("^[-+][-+][-+] .*1\\.[\\d\\.]+$"));
 }
 
 VcsBase::BaseAnnotationHighlighter *CvsEditor::createAnnotationHighlighter(const QSet<QString> &changes,
diff --git a/src/plugins/cvs/cvseditor.h b/src/plugins/cvs/cvseditor.h
index dd18e2f4767..5e4a2fda980 100644
--- a/src/plugins/cvs/cvseditor.h
+++ b/src/plugins/cvs/cvseditor.h
@@ -48,7 +48,7 @@ public:
 private:
     QSet<QString> annotationChanges() const;
     QString changeUnderCursor(const QTextCursor &) const;
-    VcsBase::DiffHighlighter *createDiffHighlighter() const;
+    QRegExp diffFilePattern() const;
     VcsBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes, const QColor &bg) const;
     QString fileNameFromDiffSpecification(const QTextBlock &diffFileName) const;
     QStringList annotationPreviousVersions(const QString &revision) const;
diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp
index 27bed9a6bdc..40997ffcd6c 100644
--- a/src/plugins/git/giteditor.cpp
+++ b/src/plugins/git/giteditor.cpp
@@ -107,10 +107,9 @@ QString GitEditor::changeUnderCursor(const QTextCursor &c) const
     return QString();
 }
 
-VcsBase::DiffHighlighter *GitEditor::createDiffHighlighter() const
+QRegExp GitEditor::diffFilePattern() const
 {
-    const QRegExp filePattern(QLatin1String("^(diff --git a/|index |[+-][+-][+-] [ab/]).*$"));
-    return new VcsBase::DiffHighlighter(filePattern);
+    return QRegExp(QLatin1String("^(diff --git a/|index |[+-][+-][+-] [ab/]).*$"));
 }
 
 VcsBase::BaseAnnotationHighlighter *GitEditor::createAnnotationHighlighter(const QSet<QString> &changes,
diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h
index cbb5acf1fd0..5fc066c4cc7 100644
--- a/src/plugins/git/giteditor.h
+++ b/src/plugins/git/giteditor.h
@@ -57,7 +57,7 @@ public slots:
 private:
     QSet<QString> annotationChanges() const;
     QString changeUnderCursor(const QTextCursor &) const;
-    VcsBase::DiffHighlighter *createDiffHighlighter() const;
+    QRegExp diffFilePattern() const;
     VcsBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes, const QColor &bg) const;
     QString fileNameFromDiffSpecification(const QTextBlock &diffFileName) const;
     QString decorateVersion(const QString &revision) const;
diff --git a/src/plugins/mercurial/mercurialeditor.cpp b/src/plugins/mercurial/mercurialeditor.cpp
index 60a86d4fd7c..4e775e6a935 100644
--- a/src/plugins/mercurial/mercurialeditor.cpp
+++ b/src/plugins/mercurial/mercurialeditor.cpp
@@ -88,9 +88,9 @@ QString MercurialEditor::changeUnderCursor(const QTextCursor &cursorIn) const
     return QString();
 }
 
-VcsBase::DiffHighlighter *MercurialEditor::createDiffHighlighter() const
+QRegExp MercurialEditor::diffFilePattern() const
 {
-    return new VcsBase::DiffHighlighter(diffIdentifier);
+    return diffIdentifier;
 }
 
 VcsBase::BaseAnnotationHighlighter *MercurialEditor::createAnnotationHighlighter(const QSet<QString> &changes,
diff --git a/src/plugins/mercurial/mercurialeditor.h b/src/plugins/mercurial/mercurialeditor.h
index cde52c086cc..da0d48789b4 100644
--- a/src/plugins/mercurial/mercurialeditor.h
+++ b/src/plugins/mercurial/mercurialeditor.h
@@ -46,7 +46,7 @@ public:
 private:
     QSet<QString> annotationChanges() const;
     QString changeUnderCursor(const QTextCursor &cursor) const;
-    VcsBase::DiffHighlighter *createDiffHighlighter() const;
+    QRegExp diffFilePattern() const;
     VcsBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes, const QColor &bg) const;
     QString fileNameFromDiffSpecification(const QTextBlock &diffFileSpec) const;
     QString decorateVersion(const QString &revision) const;
diff --git a/src/plugins/perforce/perforceeditor.cpp b/src/plugins/perforce/perforceeditor.cpp
index 271a612ff9c..aa925a86ec4 100644
--- a/src/plugins/perforce/perforceeditor.cpp
+++ b/src/plugins/perforce/perforceeditor.cpp
@@ -103,10 +103,9 @@ QString PerforceEditor::changeUnderCursor(const QTextCursor &c) const
     return m_changeNumberPattern.exactMatch(change) ? change : QString();
 }
 
-VcsBase::DiffHighlighter *PerforceEditor::createDiffHighlighter() const
+QRegExp PerforceEditor::diffFilePattern() const
 {
-    const QRegExp filePattern(QLatin1String("^====.*"));
-    return new VcsBase::DiffHighlighter(filePattern);
+    return QRegExp(QLatin1String("^====.*"));
 }
 
 VcsBase::BaseAnnotationHighlighter *PerforceEditor::createAnnotationHighlighter(const QSet<QString> &changes,
diff --git a/src/plugins/perforce/perforceeditor.h b/src/plugins/perforce/perforceeditor.h
index a9435eb6295..3a8791eb522 100644
--- a/src/plugins/perforce/perforceeditor.h
+++ b/src/plugins/perforce/perforceeditor.h
@@ -50,7 +50,7 @@ public:
 private:
     QSet<QString> annotationChanges() const;
     QString changeUnderCursor(const QTextCursor &) const;
-    VcsBase::DiffHighlighter *createDiffHighlighter() const;
+    QRegExp diffFilePattern() const;
     VcsBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes, const QColor &bg) const;
     QString fileNameFromDiffSpecification(const QTextBlock &diffFileName) const;
     QStringList annotationPreviousVersions(const QString &v) const;
diff --git a/src/plugins/subversion/subversioneditor.cpp b/src/plugins/subversion/subversioneditor.cpp
index 433d110a241..7a7b44424bf 100644
--- a/src/plugins/subversion/subversioneditor.cpp
+++ b/src/plugins/subversion/subversioneditor.cpp
@@ -106,12 +106,9 @@ QString SubversionEditor::changeUnderCursor(const QTextCursor &c) const
 @@ -6,6 +6,5 @@
 \endcode
 */
-
-VcsBase::DiffHighlighter *SubversionEditor::createDiffHighlighter() const
+QRegExp SubversionEditor::diffFilePattern() const
 {
-    const QRegExp filePattern(QLatin1String("^[-+][-+][-+] .*|^Index: .*|^==*$"));
-    QTC_CHECK(filePattern.isValid());
-    return new VcsBase::DiffHighlighter(filePattern);
+    return QRegExp(QLatin1String("^[-+][-+][-+] .*|^Index: .*|^==*$"));
 }
 
 VcsBase::BaseAnnotationHighlighter *SubversionEditor::createAnnotationHighlighter(const QSet<QString> &changes,
diff --git a/src/plugins/subversion/subversioneditor.h b/src/plugins/subversion/subversioneditor.h
index 96c139685de..f2ec7843677 100644
--- a/src/plugins/subversion/subversioneditor.h
+++ b/src/plugins/subversion/subversioneditor.h
@@ -48,7 +48,7 @@ public:
 private:
     QSet<QString> annotationChanges() const;
     QString changeUnderCursor(const QTextCursor &) const;
-    VcsBase::DiffHighlighter *createDiffHighlighter() const;
+    QRegExp diffFilePattern() const;
     VcsBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes, const QColor &bg) const;
     QString fileNameFromDiffSpecification(const QTextBlock &diffFileName) const;
     QStringList annotationPreviousVersions(const QString &) const;
diff --git a/src/plugins/vcsbase/diffhighlighter.cpp b/src/plugins/vcsbase/diffhighlighter.cpp
index 538a5a82f31..278b32a1388 100644
--- a/src/plugins/vcsbase/diffhighlighter.cpp
+++ b/src/plugins/vcsbase/diffhighlighter.cpp
@@ -130,9 +130,8 @@ DiffFormats DiffHighlighterPrivate::analyzeLine(const QString &text) const
 } // namespace Internal
 
 // --- DiffHighlighter
-DiffHighlighter::DiffHighlighter(const QRegExp &filePattern,
-                                 QTextDocument *document) :
-    TextEditor::SyntaxHighlighter(document),
+DiffHighlighter::DiffHighlighter(const QRegExp &filePattern) :
+    TextEditor::SyntaxHighlighter(static_cast<QTextDocument *>(0)),
     d(new Internal::DiffHighlighterPrivate(filePattern))
 {
 }
diff --git a/src/plugins/vcsbase/diffhighlighter.h b/src/plugins/vcsbase/diffhighlighter.h
index 1ca4adb9fd1..05ccce2b1f8 100644
--- a/src/plugins/vcsbase/diffhighlighter.h
+++ b/src/plugins/vcsbase/diffhighlighter.h
@@ -51,8 +51,7 @@ class VCSBASE_EXPORT DiffHighlighter : public TextEditor::SyntaxHighlighter
     Q_OBJECT
 
 public:
-    explicit DiffHighlighter(const QRegExp &filePattern,
-                             QTextDocument *document = 0);
+    explicit DiffHighlighter(const QRegExp &filePattern);
     ~DiffHighlighter();
 
     void highlightBlock(const QString &text);
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index 480295c59dc..1a25ad7a438 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -678,10 +678,10 @@ void VcsBaseEditorWidget::init()
         connect(this, SIGNAL(textChanged()), this, SLOT(slotActivateAnnotation()));
         break;
     case DiffOutput: {
-        DiffHighlighter *dh = createDiffHighlighter();
+        d->m_diffFilePattern = diffFilePattern();
+        DiffHighlighter *dh = new DiffHighlighter(d->m_diffFilePattern);
         setCodeFoldingSupported(true);
         baseTextDocument()->setSyntaxHighlighter(dh);
-        d->m_diffFilePattern = dh->filePattern();
         connect(this, SIGNAL(textChanged()), this, SLOT(slotPopulateDiffBrowser()));
         connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(slotDiffCursorPositionChanged()));
     }
diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h
index 6e15c9d9b82..88b61834ff7 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.h
+++ b/src/plugins/vcsbase/vcsbaseeditor.h
@@ -240,7 +240,7 @@ private:
     // Implement to identify a change number at the cursor position
     virtual QString changeUnderCursor(const QTextCursor &) const = 0;
     // Factory functions for highlighters
-    virtual DiffHighlighter *createDiffHighlighter() const = 0;
+    virtual QRegExp diffFilePattern() const = 0;
     virtual BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes,
                                                                    const QColor &bg) const = 0;
     // Implement to return a local file name from the diff file specification
-- 
GitLab