From 742c1a714de68e53f27a34bb18bc744176ccbb6b Mon Sep 17 00:00:00 2001
From: hjk <hjk121@nokiamail.com>
Date: Mon, 12 Aug 2013 15:21:22 +0200
Subject: [PATCH] ISettingsAspect: consolidate data copying in base
 implementation

Change-Id: I1eec0f54d05b3f7d8679060faccc14ec8a3777f6
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
---
 src/plugins/analyzerbase/analyzersettings.cpp |  9 +++++++++
 src/plugins/analyzerbase/analyzersettings.h   |  6 ++++--
 src/plugins/valgrind/valgrindsettings.cpp     | 18 ------------------
 src/plugins/valgrind/valgrindsettings.h       |  5 +++--
 4 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/src/plugins/analyzerbase/analyzersettings.cpp b/src/plugins/analyzerbase/analyzersettings.cpp
index 6244eda84ff..41cb7752c3a 100644
--- a/src/plugins/analyzerbase/analyzersettings.cpp
+++ b/src/plugins/analyzerbase/analyzersettings.cpp
@@ -46,6 +46,15 @@ static const char useGlobalC[] = "Analyzer.Project.UseGlobal";
 
 namespace Analyzer {
 
+ISettingsAspect *ISettingsAspect::clone() const
+{
+    ISettingsAspect *other = create();
+    QVariantMap data;
+    toMap(data);
+    other->fromMap(data);
+    return other;
+}
+
 AnalyzerRunConfigurationAspect::AnalyzerRunConfigurationAspect(ISettingsAspect *projectSettings,
     ISettingsAspect *globalSettings)
 {
diff --git a/src/plugins/analyzerbase/analyzersettings.h b/src/plugins/analyzerbase/analyzersettings.h
index 7b05bab8bd7..948701b186f 100644
--- a/src/plugins/analyzerbase/analyzersettings.h
+++ b/src/plugins/analyzerbase/analyzersettings.h
@@ -59,8 +59,10 @@ public:
 
     /// Create a configuration widget for this settings aspect.
     virtual QWidget *createConfigWidget(QWidget *parent) = 0;
-    /// Clones the object.
-    virtual ISettingsAspect *clone() = 0;
+    /// "Virtual default constructor"
+    virtual ISettingsAspect *create() const = 0;
+    /// "Virtual copy constructor"
+    ISettingsAspect *clone() const;
 };
 
 
diff --git a/src/plugins/valgrind/valgrindsettings.cpp b/src/plugins/valgrind/valgrindsettings.cpp
index 058a975d3ab..0756c561e64 100644
--- a/src/plugins/valgrind/valgrindsettings.cpp
+++ b/src/plugins/valgrind/valgrindsettings.cpp
@@ -282,15 +282,6 @@ void ValgrindGlobalSettings::fromMap(const QVariantMap &map)
     setIfPresent(map, QLatin1String(callgrindShortenTemplates), &m_shortenTemplates);
 }
 
-ISettingsAspect  *ValgrindGlobalSettings::clone()
-{
-    ValgrindGlobalSettings *other = new ValgrindGlobalSettings;
-    QVariantMap data;
-    toMap(data);
-    other->fromMap(data);
-    return other;
-}
-
 void ValgrindGlobalSettings::toMap(QVariantMap &map) const
 {
     ValgrindBaseSettings::toMap(map);
@@ -461,15 +452,6 @@ void ValgrindProjectSettings::fromMap(const QVariantMap &map)
     setIfPresent(map, QLatin1String(removedSuppressionFilesC), &m_disabledGlobalSuppressionFiles);
 }
 
-ISettingsAspect  *ValgrindProjectSettings::clone()
-{
-    ValgrindProjectSettings *other = new ValgrindProjectSettings;
-    QVariantMap data;
-    toMap(data);
-    other->fromMap(data);
-    return other;
-}
-
 void ValgrindProjectSettings::toMap(QVariantMap &map) const
 {
     ValgrindBaseSettings::toMap(map);
diff --git a/src/plugins/valgrind/valgrindsettings.h b/src/plugins/valgrind/valgrindsettings.h
index 22ff1f6248c..cd2494cced2 100644
--- a/src/plugins/valgrind/valgrindsettings.h
+++ b/src/plugins/valgrind/valgrindsettings.h
@@ -170,7 +170,8 @@ public:
     QWidget *createConfigWidget(QWidget *parent);
     void toMap(QVariantMap &map) const;
     void fromMap(const QVariantMap &map);
-    virtual ISettingsAspect  *clone();
+    ISettingsAspect *create() const { return new ValgrindGlobalSettings; }
+
 
     /*
      * Global memcheck settings
@@ -230,7 +231,7 @@ public:
     QWidget *createConfigWidget(QWidget *parent);
     void toMap(QVariantMap &map) const;
     void fromMap(const QVariantMap &map);
-    virtual ISettingsAspect  *clone();
+    ISettingsAspect *create() const { return new ValgrindProjectSettings; }
 
     /**
      * Per-project memcheck settings, saves a diff to the global suppression files list
-- 
GitLab