Commit 6b5298fa authored by Nikolai Kosjar's avatar Nikolai Kosjar Committed by Erik Verbruggen

CppTools: Move Project{Part,Info} to new cppprojects.{h,cpp}

Change-Id: Ieff216017b9da1e6a12121688ea9572bdd81fd9b
Reviewed-by: default avatarErik Verbruggen <erik.verbruggen@digia.com>
parent b8a6a4dd
...@@ -410,7 +410,7 @@ void AutotoolsProject::updateCppCodeModel() ...@@ -410,7 +410,7 @@ void AutotoolsProject::updateCppCodeModel()
if (cxxflags.isEmpty()) if (cxxflags.isEmpty())
cxxflags = cflags; cxxflags = cflags;
CppTools::CppModelManagerInterface::ProjectInfo pinfo = modelManager->projectInfo(this); CppTools::ProjectInfo pinfo = modelManager->projectInfo(this);
pinfo.clearProjectParts(); pinfo.clearProjectParts();
CppTools::ProjectPart::Ptr part(new CppTools::ProjectPart); CppTools::ProjectPart::Ptr part(new CppTools::ProjectPart);
part->project = this; part->project = this;
......
...@@ -441,7 +441,7 @@ void PchManager::updateActivePchFiles() ...@@ -441,7 +441,7 @@ void PchManager::updateActivePchFiles()
QSet<ProjectPart::Ptr> activeParts; QSet<ProjectPart::Ptr> activeParts;
CppTools::CppModelManagerInterface *mmi = CppTools::CppModelManagerInterface::instance(); CppTools::CppModelManagerInterface *mmi = CppTools::CppModelManagerInterface::instance();
foreach (const CppTools::CppModelManagerInterface::ProjectInfo &pi, mmi->projectInfos()) foreach (const CppTools::ProjectInfo &pi, mmi->projectInfos())
activeParts.unite(QSet<ProjectPart::Ptr>::fromList(pi.projectParts())); activeParts.unite(QSet<ProjectPart::Ptr>::fromList(pi.projectParts()));
QList<ProjectPart::Ptr> partsWithPCHFiles = m_activePchFiles.keys(); QList<ProjectPart::Ptr> partsWithPCHFiles = m_activePchFiles.keys();
foreach (ProjectPart::Ptr pPart, partsWithPCHFiles) foreach (ProjectPart::Ptr pPart, partsWithPCHFiles)
......
...@@ -329,7 +329,7 @@ bool CMakeProject::parseCMakeLists() ...@@ -329,7 +329,7 @@ bool CMakeProject::parseCMakeLists()
CppTools::CppModelManagerInterface *modelmanager = CppTools::CppModelManagerInterface *modelmanager =
CppTools::CppModelManagerInterface::instance(); CppTools::CppModelManagerInterface::instance();
if (modelmanager) { if (modelmanager) {
CppTools::CppModelManagerInterface::ProjectInfo pinfo = modelmanager->projectInfo(this); CppTools::ProjectInfo pinfo = modelmanager->projectInfo(this);
pinfo.clearProjectParts(); pinfo.clearProjectParts();
foreach (const CMakeBuildTarget &cbt, m_buildTargets) { foreach (const CMakeBuildTarget &cbt, m_buildTargets) {
......
...@@ -949,7 +949,7 @@ class ProjectPartsModel : public QAbstractListModel ...@@ -949,7 +949,7 @@ class ProjectPartsModel : public QAbstractListModel
public: public:
ProjectPartsModel(QObject *parent); ProjectPartsModel(QObject *parent);
void configure(const QList<CppModelManagerInterface::ProjectInfo> &projectInfos, void configure(const QList<ProjectInfo> &projectInfos,
const ProjectPart::Ptr &currentEditorsProjectPart); const ProjectPart::Ptr &currentEditorsProjectPart);
QModelIndex indexForCurrentEditorsProjectPart() const; QModelIndex indexForCurrentEditorsProjectPart() const;
...@@ -972,12 +972,12 @@ ProjectPartsModel::ProjectPartsModel(QObject *parent) ...@@ -972,12 +972,12 @@ ProjectPartsModel::ProjectPartsModel(QObject *parent)
{ {
} }
void ProjectPartsModel::configure(const QList<CppModelManagerInterface::ProjectInfo> &projectInfos, void ProjectPartsModel::configure(const QList<ProjectInfo> &projectInfos,
const ProjectPart::Ptr &currentEditorsProjectPart) const ProjectPart::Ptr &currentEditorsProjectPart)
{ {
emit layoutAboutToBeChanged(); emit layoutAboutToBeChanged();
m_projectPartsList.clear(); m_projectPartsList.clear();
foreach (const CppModelManagerInterface::ProjectInfo &info, projectInfos) { foreach (const ProjectInfo &info, projectInfos) {
foreach (const ProjectPart::Ptr &projectPart, info.projectParts()) { foreach (const ProjectPart::Ptr &projectPart, info.projectParts()) {
if (!m_projectPartsList.contains(projectPart)) { if (!m_projectPartsList.contains(projectPart)) {
m_projectPartsList << projectPart; m_projectPartsList << projectPart;
...@@ -1416,7 +1416,7 @@ void CppCodeModelInspectorDialog::refresh() ...@@ -1416,7 +1416,7 @@ void CppCodeModelInspectorDialog::refresh()
? editorSupport->snapshotUpdater()->currentProjectPart() ? editorSupport->snapshotUpdater()->currentProjectPart()
: ProjectPart::Ptr(); : ProjectPart::Ptr();
const QList<CppModelManagerInterface::ProjectInfo> projectInfos = cmmi->projectInfos(); const QList<ProjectInfo> projectInfos = cmmi->projectInfos();
dumper.dumpProjectInfos(projectInfos); dumper.dumpProjectInfos(projectInfos);
m_projectPartsModel->configure(projectInfos, editorsProjectPart); m_projectPartsModel->configure(projectInfos, editorsProjectPart);
m_projectPartsView->resizeColumns(ProjectPartsModel::ColumnCount); m_projectPartsView->resizeColumns(ProjectPartsModel::ColumnCount);
......
...@@ -1903,9 +1903,9 @@ void AddIncludeForUndefinedIdentifier::match(const CppQuickFixInterface &interfa ...@@ -1903,9 +1903,9 @@ void AddIncludeForUndefinedIdentifier::match(const CppQuickFixInterface &interfa
// find the include paths // find the include paths
ProjectPart::HeaderPaths headerPaths; ProjectPart::HeaderPaths headerPaths;
CppModelManagerInterface *modelManager = CppModelManagerInterface::instance(); CppModelManagerInterface *modelManager = CppModelManagerInterface::instance();
QList<CppModelManagerInterface::ProjectInfo> projectInfos = modelManager->projectInfos(); QList<ProjectInfo> projectInfos = modelManager->projectInfos();
bool inProject = false; bool inProject = false;
foreach (const CppModelManagerInterface::ProjectInfo &info, projectInfos) { foreach (const ProjectInfo &info, projectInfos) {
foreach (ProjectPart::Ptr part, info.projectParts()) { foreach (ProjectPart::Ptr part, info.projectParts()) {
foreach (const ProjectFile &file, part->files) { foreach (const ProjectFile &file, part->files) {
if (file.path == doc->fileName()) { if (file.path == doc->fileName()) {
......
...@@ -150,12 +150,12 @@ TestActionsTestCase::TestActionsTestCase(const Actions &tokenActions, const Acti ...@@ -150,12 +150,12 @@ TestActionsTestCase::TestActionsTestCase(const Actions &tokenActions, const Acti
// Collect files to process // Collect files to process
QStringList filesToOpen; QStringList filesToOpen;
QList<QPointer<ProjectExplorer::Project> > projects; QList<QPointer<ProjectExplorer::Project> > projects;
const QList<CppModelManagerInterface::ProjectInfo> projectInfos const QList<ProjectInfo> projectInfos
= m_modelManager->projectInfos(); = m_modelManager->projectInfos();
if (projectInfos.isEmpty()) if (projectInfos.isEmpty())
MSKIP_SINGLE("No project(s) loaded. Test operates only on loaded projects."); MSKIP_SINGLE("No project(s) loaded. Test operates only on loaded projects.");
foreach (const CppModelManagerInterface::ProjectInfo &info, projectInfos) { foreach (const ProjectInfo &info, projectInfos) {
QPointer<ProjectExplorer::Project> project = info.project(); QPointer<ProjectExplorer::Project> project = info.project();
if (!projects.contains(project)) if (!projects.contains(project))
projects << project; projects << project;
......
...@@ -472,7 +472,7 @@ Dumper::~Dumper() ...@@ -472,7 +472,7 @@ Dumper::~Dumper()
m_out << "*** END Code Model Inspection Report\n"; m_out << "*** END Code Model Inspection Report\n";
} }
void Dumper::dumpProjectInfos( const QList<CppModelManagerInterface::ProjectInfo> &projectInfos) void Dumper::dumpProjectInfos( const QList<ProjectInfo> &projectInfos)
{ {
const QByteArray i1 = indent(1); const QByteArray i1 = indent(1);
const QByteArray i2 = indent(2); const QByteArray i2 = indent(2);
...@@ -480,7 +480,7 @@ void Dumper::dumpProjectInfos( const QList<CppModelManagerInterface::ProjectInfo ...@@ -480,7 +480,7 @@ void Dumper::dumpProjectInfos( const QList<CppModelManagerInterface::ProjectInfo
const QByteArray i4 = indent(4); const QByteArray i4 = indent(4);
m_out << "Projects loaded: " << projectInfos.size() << "{{{1\n"; m_out << "Projects loaded: " << projectInfos.size() << "{{{1\n";
foreach (const CppModelManagerInterface::ProjectInfo &info, projectInfos) { foreach (const ProjectInfo &info, projectInfos) {
const QPointer<ProjectExplorer::Project> project = info.project(); const QPointer<ProjectExplorer::Project> project = info.project();
m_out << i1 << "Project " << project->displayName() m_out << i1 << "Project " << project->displayName()
<< " (" << project->projectFilePath().toUserOutput() << "){{{2\n"; << " (" << project->projectFilePath().toUserOutput() << "){{{2\n";
......
...@@ -69,7 +69,7 @@ public: ...@@ -69,7 +69,7 @@ public:
const QString &logFileId = QString()); const QString &logFileId = QString());
~Dumper(); ~Dumper();
void dumpProjectInfos(const QList<CppTools::CppModelManagerInterface::ProjectInfo> &projectInfos); void dumpProjectInfos(const QList<CppTools::ProjectInfo> &projectInfos);
void dumpSnapshot(const CPlusPlus::Snapshot &snapshot, void dumpSnapshot(const CPlusPlus::Snapshot &snapshot,
const QString &title, const QString &title,
bool isGlobalSnapshot = false); bool isGlobalSnapshot = false);
......
...@@ -368,7 +368,7 @@ QByteArray CppModelManager::internalDefinedMacros() const ...@@ -368,7 +368,7 @@ QByteArray CppModelManager::internalDefinedMacros() const
addUnique(part->toolchainDefines.split('\n'), &macros, &alreadyIn); addUnique(part->toolchainDefines.split('\n'), &macros, &alreadyIn);
addUnique(part->projectDefines.split('\n'), &macros, &alreadyIn); addUnique(part->projectDefines.split('\n'), &macros, &alreadyIn);
if (!part->projectConfigFile.isEmpty()) if (!part->projectConfigFile.isEmpty())
macros += readProjectConfigFile(part); macros += ProjectPart::readProjectConfigFile(part);
} }
} }
return macros; return macros;
...@@ -523,13 +523,13 @@ QFuture<void> CppModelManager::updateSourceFiles(const QStringList &sourceFiles, ...@@ -523,13 +523,13 @@ QFuture<void> CppModelManager::updateSourceFiles(const QStringList &sourceFiles,
return m_internalIndexingSupport->refreshSourceFiles(sourceFiles, mode); return m_internalIndexingSupport->refreshSourceFiles(sourceFiles, mode);
} }
QList<CppModelManager::ProjectInfo> CppModelManager::projectInfos() const QList<ProjectInfo> CppModelManager::projectInfos() const
{ {
QMutexLocker locker(&m_projectMutex); QMutexLocker locker(&m_projectMutex);
return m_projectToProjectsInfo.values(); return m_projectToProjectsInfo.values();
} }
CppModelManager::ProjectInfo CppModelManager::projectInfo(ProjectExplorer::Project *project) const ProjectInfo CppModelManager::projectInfo(ProjectExplorer::Project *project) const
{ {
QMutexLocker locker(&m_projectMutex); QMutexLocker locker(&m_projectMutex);
return m_projectToProjectsInfo.value(project, ProjectInfo(project)); return m_projectToProjectsInfo.value(project, ProjectInfo(project));
...@@ -569,8 +569,8 @@ void CppModelManager::removeFilesFromSnapshot(const QSet<QString> &filesToRemove ...@@ -569,8 +569,8 @@ void CppModelManager::removeFilesFromSnapshot(const QSet<QString> &filesToRemove
class ProjectInfoComparer class ProjectInfoComparer
{ {
public: public:
ProjectInfoComparer(const CppModelManager::ProjectInfo &oldProjectInfo, ProjectInfoComparer(const ProjectInfo &oldProjectInfo,
const CppModelManager::ProjectInfo &newProjectInfo) const ProjectInfo &newProjectInfo)
: m_old(oldProjectInfo) : m_old(oldProjectInfo)
, m_oldSourceFiles(oldProjectInfo.sourceFiles().toSet()) , m_oldSourceFiles(oldProjectInfo.sourceFiles().toSet())
, m_new(newProjectInfo) , m_new(newProjectInfo)
...@@ -625,10 +625,10 @@ public: ...@@ -625,10 +625,10 @@ public:
} }
private: private:
const CppModelManager::ProjectInfo &m_old; const ProjectInfo &m_old;
const QSet<QString> m_oldSourceFiles; const QSet<QString> m_oldSourceFiles;
const CppModelManager::ProjectInfo &m_new; const ProjectInfo &m_new;
const QSet<QString> m_newSourceFiles; const QSet<QString> m_newSourceFiles;
}; };
......
...@@ -55,7 +55,7 @@ using namespace CppTools::Internal; ...@@ -55,7 +55,7 @@ using namespace CppTools::Internal;
using namespace ProjectExplorer; using namespace ProjectExplorer;
typedef CPlusPlus::Document Document; typedef CPlusPlus::Document Document;
typedef CppTools::CppModelManagerInterface::ProjectInfo ProjectInfo; typedef CppTools::ProjectInfo ProjectInfo;
typedef CppTools::ProjectPart ProjectPart; typedef CppTools::ProjectPart ProjectPart;
typedef CppTools::ProjectFile ProjectFile; typedef CppTools::ProjectFile ProjectFile;
......
...@@ -34,8 +34,6 @@ ...@@ -34,8 +34,6 @@
#include <projectexplorer/headerpath.h> #include <projectexplorer/headerpath.h>
#include <projectexplorer/toolchain.h> #include <projectexplorer/toolchain.h>
#include <QSet>
using namespace CppTools; using namespace CppTools;
using namespace ProjectExplorer; using namespace ProjectExplorer;
...@@ -99,71 +97,6 @@ using namespace ProjectExplorer; ...@@ -99,71 +97,6 @@ using namespace ProjectExplorer;
\sa CppTools::CppModelManagerInterface::updateProjectInfo() \sa CppTools::CppModelManagerInterface::updateProjectInfo()
*/ */
ProjectPart::ProjectPart()
: project(0)
, cVersion(C89)
, cxxVersion(CXX11)
, cxxExtensions(NoExtensions)
, qtVersion(UnknownQt)
, cWarningFlags(ProjectExplorer::ToolChain::WarningsDefault)
, cxxWarningFlags(ProjectExplorer::ToolChain::WarningsDefault)
{
}
/*!
\brief Retrieves info from concrete compiler using it's flags.
\param tc Either nullptr or toolchain for project's active target.
\param cxxflags C++ or Objective-C++ flags.
\param cflags C or ObjectiveC flags if possible, \a cxxflags otherwise.
*/
void ProjectPart::evaluateToolchain(const ToolChain *tc,
const QStringList &cxxflags,
const QStringList &cflags,
const Utils::FileName &sysRoot)
{
if (!tc)
return;
ToolChain::CompilerFlags cxx = tc->compilerFlags(cxxflags);
ToolChain::CompilerFlags c = (cxxflags == cflags)
? cxx : tc->compilerFlags(cflags);
if (c & ToolChain::StandardC11)
cVersion = C11;
else if (c & ToolChain::StandardC99)
cVersion = C99;
else
cVersion = C89;
if (cxx & ToolChain::StandardCxx11)
cxxVersion = CXX11;
else
cxxVersion = CXX98;
if (cxx & ToolChain::BorlandExtensions)
cxxExtensions |= BorlandExtensions;
if (cxx & ToolChain::GnuExtensions)
cxxExtensions |= GnuExtensions;
if (cxx & ToolChain::MicrosoftExtensions)
cxxExtensions |= MicrosoftExtensions;
if (cxx & ToolChain::OpenMP)
cxxExtensions |= OpenMPExtensions;
cWarningFlags = tc->warningFlags(cflags);
cxxWarningFlags = tc->warningFlags(cxxflags);
const QList<ProjectExplorer::HeaderPath> headers = tc->systemHeaderPaths(cxxflags, sysRoot);
foreach (const ProjectExplorer::HeaderPath &header, headers) {
headerPaths << HeaderPath(header.path(),
header.kind() == ProjectExplorer::HeaderPath::FrameworkHeaderPath
? HeaderPath::FrameworkPath : HeaderPath::IncludePath);
}
toolchainDefines = tc->predefinedMacros(cxxflags);
}
const QString CppModelManagerInterface::configurationFileName() const QString CppModelManagerInterface::configurationFileName()
{ return CPlusPlus::Preprocessor::configurationFileName; } { return CPlusPlus::Preprocessor::configurationFileName; }
...@@ -183,62 +116,3 @@ CppModelManagerInterface *CppModelManagerInterface::instance() ...@@ -183,62 +116,3 @@ CppModelManagerInterface *CppModelManagerInterface::instance()
{ {
return qobject_cast<CppModelManagerInterface *>(CPlusPlus::CppModelManagerBase::instance()); return qobject_cast<CppModelManagerInterface *>(CPlusPlus::CppModelManagerBase::instance());
} }
void CppModelManagerInterface::ProjectInfo::clearProjectParts()
{
m_projectParts.clear();
m_headerPaths.clear();
m_sourceFiles.clear();
m_defines.clear();
}
void CppModelManagerInterface::ProjectInfo::appendProjectPart(const ProjectPart::Ptr &part)
{
if (!part)
return;
m_projectParts.append(part);
typedef ProjectPart::HeaderPath HeaderPath;
// Update header paths
QSet<HeaderPath> incs = QSet<HeaderPath>::fromList(m_headerPaths);
foreach (const HeaderPath &hp, part->headerPaths) {
if (!incs.contains(hp)) {
incs.insert(hp);
m_headerPaths += hp;
}
}
// Update source files
QSet<QString> srcs = QSet<QString>::fromList(m_sourceFiles);
foreach (const ProjectFile &file, part->files)
srcs.insert(file.path);
m_sourceFiles = srcs.toList();
// Update defines
if (!m_defines.isEmpty())
m_defines.append('\n');
m_defines.append(part->toolchainDefines);
m_defines.append(part->projectDefines);
if (!part->projectConfigFile.isEmpty()) {
m_defines.append('\n');
m_defines += readProjectConfigFile(part);
m_defines.append('\n');
}
}
QByteArray CppModelManagerInterface::readProjectConfigFile(const ProjectPart::Ptr &part)
{
QByteArray result;
QFile f(part->projectConfigFile);
if (f.open(QIODevice::ReadOnly)) {
QTextStream is(&f);
result = is.readAll().toUtf8();
f.close();
}
return result;
}
...@@ -32,11 +32,10 @@ ...@@ -32,11 +32,10 @@
#include "cpptools_global.h" #include "cpptools_global.h"
#include "cppprojectfile.h" #include "cppprojects.h"
#include <cplusplus/CppDocument.h> #include <cplusplus/CppDocument.h>
#include <cplusplus/cppmodelmanagerbase.h> #include <cplusplus/cppmodelmanagerbase.h>
#include <projectexplorer/toolchain.h>
#include <QFuture> #include <QFuture>
#include <QHash> #include <QHash>
...@@ -53,97 +52,13 @@ namespace Utils { class FileName; } ...@@ -53,97 +52,13 @@ namespace Utils { class FileName; }
namespace CppTools { namespace CppTools {
class AbstractEditorSupport; class AbstractEditorSupport;
class ModelManagerSupport;
class CppCompletionAssistProvider; class CppCompletionAssistProvider;
class CppEditorSupport; class CppEditorSupport;
class CppHighlightingSupport; class CppHighlightingSupport;
class CppIndexingSupport; class CppIndexingSupport;
class ModelManagerSupport;
class WorkingCopy; class WorkingCopy;
class CPPTOOLS_EXPORT ProjectPart
{
public:
ProjectPart();
void evaluateToolchain(const ProjectExplorer::ToolChain *tc,
const QStringList &cxxflags,
const QStringList &cflags,
const Utils::FileName &sysRoot);
public:
enum CVersion {
C89,
C99,
C11
};
enum CXXVersion {
CXX98,
CXX11
};
enum CXXExtension {
NoExtensions = 0x0,
GnuExtensions = 0x1,
MicrosoftExtensions = 0x2,
BorlandExtensions = 0x4,
OpenMPExtensions = 0x8,
AllExtensions = GnuExtensions | MicrosoftExtensions | BorlandExtensions | OpenMPExtensions
};
Q_DECLARE_FLAGS(CXXExtensions, CXXExtension)
enum QtVersion {
UnknownQt = -1,
NoQt = 0,
Qt4 = 1,
Qt5 = 2
};
typedef QSharedPointer<ProjectPart> Ptr;
struct HeaderPath {
enum Type { InvalidPath, IncludePath, FrameworkPath };
public:
QString path;
Type type;
HeaderPath(): type(InvalidPath) {}
HeaderPath(const QString &path, Type type): path(path), type(type) {}
bool isValid() const { return type != InvalidPath; }
bool isFrameworkPath() const { return type == FrameworkPath; }
bool operator==(const HeaderPath &other) const
{ return path == other.path && type == other.type; }
bool operator!=(const HeaderPath &other) const
{ return !(*this == other); }
};
typedef QList<HeaderPath> HeaderPaths;
public:
QString displayName;
QString projectFile;
ProjectExplorer::Project *project;
QList<ProjectFile> files;
QString projectConfigFile; // currently only used by the Generic Project Manager
QByteArray projectDefines;
QByteArray toolchainDefines;
QList<HeaderPath> headerPaths;
QStringList precompiledHeaders;
CVersion cVersion;
CXXVersion cxxVersion;
CXXExtensions cxxExtensions;
QtVersion qtVersion;
ProjectExplorer::ToolChain::WarningFlags cWarningFlags;
ProjectExplorer::ToolChain::WarningFlags cxxWarningFlags;
};
inline uint qHash(const ProjectPart::HeaderPath &key, uint seed = 0)
{ return ((qHash(key.path) << 2) | key.type) ^ seed; }
class CPPTOOLS_EXPORT CppModelManagerInterface : public CPlusPlus::CppModelManagerBase class CPPTOOLS_EXPORT CppModelManagerInterface : public CPlusPlus::CppModelManagerBase
{ {
Q_OBJECT Q_OBJECT
...@@ -155,52 +70,6 @@ public: ...@@ -155,52 +70,6 @@ public:
ReservedProgressNotification ReservedProgressNotification
}; };
class CPPTOOLS_EXPORT ProjectInfo
{
public:
ProjectInfo()
{}
ProjectInfo(QPointer<ProjectExplorer::Project> project)
: m_project(project)
{}
operator bool() const
{ return !m_project.isNull(); }
bool isValid() const
{ return !m_project.isNull(); }
bool isNull() const
{ return m_project.isNull(); }
QPointer<ProjectExplorer::Project> project() const
{ return m_project; }
const QList<ProjectPart::Ptr> projectParts() const
{ return m_projectParts; }
void clearProjectParts();
void appendProjectPart(const ProjectPart::Ptr &part);
const ProjectPart::HeaderPaths headerPaths() const
{ return m_headerPaths; }
const QStringList sourceFiles() const
{ return m_sourceFiles; }
const QByteArray defines() const
{ return m_defines; }
private:
QPointer<ProjectExplorer::Project> m_project;
QList<ProjectPart::Ptr> m_projectParts;
// The members below are (re)calculated from the project parts once a part is appended.
ProjectPart::HeaderPaths m_headerPaths;
QStringList m_sourceFiles;
QByteArray m_defines;
};
public: public:
static const QString configurationFileName(); static const QString configurationFileName();
static const QString editorConfigurationFileName(); static const QString editorConfigurationFileName();
...@@ -278,9 +147,6 @@ public slots: ...@@ -278,9 +147,6 @@ public slots:
virtual void updateModifiedSourceFiles() = 0; virtual void updateModifiedSourceFiles() = 0;
virtual void GC() = 0; virtual void GC() = 0;