forked from qt-creator/qt-creator
CompilationDatabase: enable the listing of non-cpp files
Files listed in an optional "compile_database.json.files" are also visible in the project, similar to the GenericProjectManager. Change-Id: I1250b674298079bab90a0ffe036107a09b4ac6e5 Reviewed-by: Thomas Otto <totto@zbh.uni-hamburg.de> Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -30,6 +30,7 @@ namespace Constants {
|
|||||||
|
|
||||||
const char COMPILATIONDATABASEMIMETYPE[] = "text/x-compilation-database-project";
|
const char COMPILATIONDATABASEMIMETYPE[] = "text/x-compilation-database-project";
|
||||||
const char COMPILATIONDATABASEPROJECT_ID[] = "CompilationDatabase.CompilationDatabaseEditor";
|
const char COMPILATIONDATABASEPROJECT_ID[] = "CompilationDatabase.CompilationDatabaseEditor";
|
||||||
|
const char COMPILATIONDATABASEPROJECT_FILES_SUFFIX[] = ".files";
|
||||||
|
|
||||||
} // Constants
|
} // Constants
|
||||||
} // CompilationDatabaseProjectManager
|
} // CompilationDatabaseProjectManager
|
||||||
|
@@ -405,12 +405,38 @@ std::vector<Entry> readJsonObjects(const QString &filePath)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList readExtraFiles(const QString &filePath)
|
||||||
|
{
|
||||||
|
QStringList result;
|
||||||
|
|
||||||
|
QFile file(filePath);
|
||||||
|
if (file.open(QFile::ReadOnly)) {
|
||||||
|
QTextStream stream(&file);
|
||||||
|
|
||||||
|
while (!stream.atEnd()) {
|
||||||
|
QString line = stream.readLine();
|
||||||
|
line = line.trimmed();
|
||||||
|
|
||||||
|
if (line.isEmpty() || line.startsWith('#'))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
result.push_back(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
||||||
void CompilationDatabaseProject::buildTreeAndProjectParts(const Utils::FileName &projectFile)
|
void CompilationDatabaseProject::buildTreeAndProjectParts(const Utils::FileName &projectFile)
|
||||||
{
|
{
|
||||||
std::vector<Entry> array = readJsonObjects(projectFilePath().toString());
|
std::vector<Entry> array = readJsonObjects(projectFilePath().toString());
|
||||||
if (array.empty()) {
|
const QString jsonExtraFilename = projectFilePath().toString() +
|
||||||
|
Constants::COMPILATIONDATABASEPROJECT_FILES_SUFFIX;
|
||||||
|
const QStringList &extras = readExtraFiles(jsonExtraFilename);
|
||||||
|
|
||||||
|
if (array.empty() && extras.empty()) {
|
||||||
emitParsingFinished(false);
|
emitParsingFinished(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -448,6 +474,21 @@ void CompilationDatabaseProject::buildTreeAndProjectParts(const Utils::FileName
|
|||||||
rpps.append(rpp);
|
rpps.append(rpp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!extras.empty()) {
|
||||||
|
const QString baseDir = projectFile.parentDir().toString();
|
||||||
|
|
||||||
|
QStringList extraFiles;
|
||||||
|
for (const QString &extra : extras) {
|
||||||
|
auto extraFile = Utils::FileName::fromString(baseDir);
|
||||||
|
extraFile.appendPath(extra);
|
||||||
|
extraFiles.append(extraFile.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
CppTools::RawProjectPart rppExtra;
|
||||||
|
rppExtra.setFiles(extraFiles);
|
||||||
|
rpps.append(rppExtra);
|
||||||
|
}
|
||||||
|
|
||||||
m_treeScanner.future().waitForFinished();
|
m_treeScanner.future().waitForFinished();
|
||||||
QCoreApplication::processEvents();
|
QCoreApplication::processEvents();
|
||||||
|
|
||||||
@@ -458,6 +499,10 @@ void CompilationDatabaseProject::buildTreeAndProjectParts(const Utils::FileName
|
|||||||
|
|
||||||
root->addNode(std::make_unique<FileNode>(projectFile, FileType::Project));
|
root->addNode(std::make_unique<FileNode>(projectFile, FileType::Project));
|
||||||
|
|
||||||
|
if (QFile::exists(jsonExtraFilename))
|
||||||
|
root->addNode(std::make_unique<FileNode>(Utils::FileName::fromString(jsonExtraFilename),
|
||||||
|
FileType::Project));
|
||||||
|
|
||||||
setRootProjectNode(std::move(root));
|
setRootProjectNode(std::move(root));
|
||||||
|
|
||||||
m_cppCodeModelUpdater->update({this, kitInfo, rpps});
|
m_cppCodeModelUpdater->update({this, kitInfo, rpps});
|
||||||
@@ -511,6 +556,8 @@ CompilationDatabaseProject::CompilationDatabaseProject(const Utils::FileName &pr
|
|||||||
&CompilationDatabaseProject::reparseProject);
|
&CompilationDatabaseProject::reparseProject);
|
||||||
|
|
||||||
m_fileSystemWatcher.addFile(projectFile.toString(), Utils::FileSystemWatcher::WatchModifiedDate);
|
m_fileSystemWatcher.addFile(projectFile.toString(), Utils::FileSystemWatcher::WatchModifiedDate);
|
||||||
|
m_fileSystemWatcher.addFile(projectFile.toString() + Constants::COMPILATIONDATABASEPROJECT_FILES_SUFFIX,
|
||||||
|
Utils::FileSystemWatcher::WatchModifiedDate);
|
||||||
connect(&m_fileSystemWatcher,
|
connect(&m_fileSystemWatcher,
|
||||||
&Utils::FileSystemWatcher::fileChanged,
|
&Utils::FileSystemWatcher::fileChanged,
|
||||||
this,
|
this,
|
||||||
|
@@ -43,13 +43,18 @@ namespace CompilationDatabaseProjectManager {
|
|||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
const char CHANGEROOTDIR[] = "CompilationDatabaseProjectManager.ChangeRootDirectory";
|
const char CHANGEROOTDIR[] = "CompilationDatabaseProjectManager.ChangeRootDirectory";
|
||||||
|
const char COMPILE_COMMANDS_JSON[] = "compile_commands.json";
|
||||||
|
|
||||||
bool CompilationDatabaseProjectManagerPlugin::initialize(const QStringList &arguments, QString *errorMessage)
|
bool CompilationDatabaseProjectManagerPlugin::initialize(const QStringList &arguments, QString *errorMessage)
|
||||||
{
|
{
|
||||||
Q_UNUSED(arguments);
|
Q_UNUSED(arguments);
|
||||||
Q_UNUSED(errorMessage);
|
Q_UNUSED(errorMessage);
|
||||||
Core::FileIconProvider::registerIconOverlayForFilename(Utils::Icons::PROJECT.imageFileName(),
|
Core::FileIconProvider::registerIconOverlayForFilename(
|
||||||
"compile_commands.json");
|
Utils::Icons::PROJECT.imageFileName(),
|
||||||
|
COMPILE_COMMANDS_JSON);
|
||||||
|
Core::FileIconProvider::registerIconOverlayForFilename(
|
||||||
|
Utils::Icons::PROJECT.imageFileName(),
|
||||||
|
QString(COMPILE_COMMANDS_JSON) + Constants::COMPILATIONDATABASEPROJECT_FILES_SUFFIX);
|
||||||
|
|
||||||
ProjectExplorer::ProjectManager::registerProjectType<CompilationDatabaseProject>(
|
ProjectExplorer::ProjectManager::registerProjectType<CompilationDatabaseProject>(
|
||||||
Constants::COMPILATIONDATABASEMIMETYPE);
|
Constants::COMPILATIONDATABASEMIMETYPE);
|
||||||
|
Reference in New Issue
Block a user