ClangStaticAnalyzer: Revert to DummyRunConfiguration

This reverts part of a1dd1e4c5b. We need
the dummy run configuration in order to be able to analyze C++ library
projects.

Change-Id: I927ba1a8944a1d9b437fb46e913ea235edcd3156
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: hjk <hjk@theqtcompany.com>
This commit is contained in:
Ulf Hermann
2016-04-21 15:31:10 +02:00
parent 862fd345fe
commit e3155cd049
2 changed files with 39 additions and 5 deletions

View File

@@ -60,6 +60,22 @@ using namespace Utils;
namespace ClangStaticAnalyzer { namespace ClangStaticAnalyzer {
namespace Internal { namespace Internal {
class DummyRunConfiguration : public RunConfiguration
{
Q_OBJECT
public:
DummyRunConfiguration(Target *parent)
: RunConfiguration(parent, "ClangStaticAnalyzer.DummyRunConfig")
{
setDefaultDisplayName(tr("Clang Static Analyzer"));
addExtraAspects();
}
private:
QWidget *createConfigurationWidget() override { return 0; }
};
ClangStaticAnalyzerTool::ClangStaticAnalyzerTool(QObject *parent) ClangStaticAnalyzerTool::ClangStaticAnalyzerTool(QObject *parent)
: QObject(parent) : QObject(parent)
, m_diagnosticModel(0) , m_diagnosticModel(0)
@@ -137,7 +153,8 @@ ClangStaticAnalyzerTool::ClangStaticAnalyzerTool(QObject *parent)
return createRunControl(runConfiguration, runMode); return createRunControl(runConfiguration, runMode);
}); });
desc.setCustomToolStarter([this](RunConfiguration *runConfiguration) { desc.setCustomToolStarter([this](RunConfiguration *runConfiguration) {
startTool(runConfiguration); Q_UNUSED(runConfiguration);
startTool();
}); });
desc.setMenuGroup(Debugger::Constants::G_ANALYZER_TOOLS); desc.setMenuGroup(Debugger::Constants::G_ANALYZER_TOOLS);
Debugger::registerAction(ClangStaticAnalyzerActionId, desc, m_startAction); Debugger::registerAction(ClangStaticAnalyzerActionId, desc, m_startAction);
@@ -220,7 +237,7 @@ static bool dontStartAfterHintForDebugMode(Project *project)
return false; return false;
} }
void ClangStaticAnalyzerTool::startTool(ProjectExplorer::RunConfiguration *runConfiguration) void ClangStaticAnalyzerTool::startTool()
{ {
Project *project = SessionManager::startupProject(); Project *project = SessionManager::startupProject();
QTC_ASSERT(project, emit finished(false); return); QTC_ASSERT(project, emit finished(false); return);
@@ -236,8 +253,21 @@ void ClangStaticAnalyzerTool::startTool(ProjectExplorer::RunConfiguration *runCo
m_running = true; m_running = true;
handleStateUpdate(); handleStateUpdate();
ProjectExplorerPlugin::runRunConfiguration(runConfiguration, Target * const target = project->activeTarget();
Constants::CLANGSTATICANALYZER_RUN_MODE); QTC_ASSERT(target, return);
DummyRunConfiguration *& rc = m_runConfigs[target];
if (!rc) {
rc = new DummyRunConfiguration(target);
connect(project, &Project::aboutToRemoveTarget, this,
[this](Target *t) { m_runConfigs.remove(t); });
const auto onProjectRemoved = [this](Project *p) {
foreach (Target * const t, p->targets())
m_runConfigs.remove(t);
};
connect(SessionManager::instance(), &SessionManager::aboutToRemoveProject, this,
onProjectRemoved, Qt::UniqueConnection);
}
ProjectExplorerPlugin::runRunConfiguration(rc, Constants::CLANGSTATICANALYZER_RUN_MODE);
} }
CppTools::ProjectInfo ClangStaticAnalyzerTool::projectInfoBeforeBuild() const CppTools::ProjectInfo ClangStaticAnalyzerTool::projectInfoBeforeBuild() const
@@ -325,3 +355,5 @@ void ClangStaticAnalyzerTool::handleStateUpdate()
} // namespace Internal } // namespace Internal
} // namespace ClangStaticAnalyzer } // namespace ClangStaticAnalyzer
#include "clangstaticanalyzertool.moc"

View File

@@ -38,6 +38,7 @@ class ClangStaticAnalyzerDiagnosticFilterModel;
class ClangStaticAnalyzerDiagnosticModel; class ClangStaticAnalyzerDiagnosticModel;
class ClangStaticAnalyzerDiagnosticView; class ClangStaticAnalyzerDiagnosticView;
class Diagnostic; class Diagnostic;
class DummyRunConfiguration;
const char ClangStaticAnalyzerPerspectiveId[] = "ClangStaticAnalyzer.Perspective"; const char ClangStaticAnalyzerPerspectiveId[] = "ClangStaticAnalyzer.Perspective";
const char ClangStaticAnalyzerActionId[] = "ClangStaticAnalyzer.Action"; const char ClangStaticAnalyzerActionId[] = "ClangStaticAnalyzer.Action";
@@ -58,7 +59,7 @@ public:
Debugger::AnalyzerRunControl *createRunControl(ProjectExplorer::RunConfiguration *runConfiguration, Debugger::AnalyzerRunControl *createRunControl(ProjectExplorer::RunConfiguration *runConfiguration,
Core::Id runMode); Core::Id runMode);
void startTool(ProjectExplorer::RunConfiguration *rc); void startTool();
signals: signals:
void finished(bool success); // For testing. void finished(bool success); // For testing.
@@ -83,6 +84,7 @@ private:
QAction *m_stopAction = 0; QAction *m_stopAction = 0;
QAction *m_goBack; QAction *m_goBack;
QAction *m_goNext; QAction *m_goNext;
QHash<ProjectExplorer::Target *, DummyRunConfiguration *> m_runConfigs;
bool m_running; bool m_running;
bool m_toolBusy = false; bool m_toolBusy = false;
}; };