diff options
author | Thomas Otto <totto@zbh.uni-hamburg.de> | 2019-05-01 16:59:52 +0200 |
---|---|---|
committer | Thomas Otto <totto@zbh.uni-hamburg.de> | 2019-05-02 14:09:00 +0000 |
commit | b32c1453b406f4ea4cb7ebe064c700d3e7501088 (patch) | |
tree | 154087d84f097a436d5f051b92a70afe467df3f8 /src/plugins/compilationdatabaseprojectmanager | |
parent | de8827b53fc94495b3d910c358aee86b70c8bd63 (diff) | |
download | qt-creator-b32c1453b406f4ea4cb7ebe064c700d3e7501088.tar.gz |
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>
Diffstat (limited to 'src/plugins/compilationdatabaseprojectmanager')
3 files changed, 56 insertions, 3 deletions
diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseconstants.h b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseconstants.h index 1cb47d5dfd..4fab0e4980 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseconstants.h +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseconstants.h @@ -30,6 +30,7 @@ namespace Constants { const char COMPILATIONDATABASEMIMETYPE[] = "text/x-compilation-database-project"; const char COMPILATIONDATABASEPROJECT_ID[] = "CompilationDatabase.CompilationDatabaseEditor"; +const char COMPILATIONDATABASEPROJECT_FILES_SUFFIX[] = ".files"; } // Constants } // CompilationDatabaseProjectManager diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp index a475007050..3f4ac7d8be 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp @@ -405,12 +405,38 @@ std::vector<Entry> readJsonObjects(const QString &filePath) 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 void CompilationDatabaseProject::buildTreeAndProjectParts(const Utils::FileName &projectFile) { 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); return; } @@ -448,6 +474,21 @@ void CompilationDatabaseProject::buildTreeAndProjectParts(const Utils::FileName 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(); QCoreApplication::processEvents(); @@ -458,6 +499,10 @@ void CompilationDatabaseProject::buildTreeAndProjectParts(const Utils::FileName 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)); m_cppCodeModelUpdater->update({this, kitInfo, rpps}); @@ -511,6 +556,8 @@ CompilationDatabaseProject::CompilationDatabaseProject(const Utils::FileName &pr &CompilationDatabaseProject::reparseProject); m_fileSystemWatcher.addFile(projectFile.toString(), Utils::FileSystemWatcher::WatchModifiedDate); + m_fileSystemWatcher.addFile(projectFile.toString() + Constants::COMPILATIONDATABASEPROJECT_FILES_SUFFIX, + Utils::FileSystemWatcher::WatchModifiedDate); connect(&m_fileSystemWatcher, &Utils::FileSystemWatcher::fileChanged, this, diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseprojectmanagerplugin.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseprojectmanagerplugin.cpp index 6ba1d6e425..031c98c03d 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseprojectmanagerplugin.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseprojectmanagerplugin.cpp @@ -43,13 +43,18 @@ namespace CompilationDatabaseProjectManager { namespace Internal { const char CHANGEROOTDIR[] = "CompilationDatabaseProjectManager.ChangeRootDirectory"; +const char COMPILE_COMMANDS_JSON[] = "compile_commands.json"; bool CompilationDatabaseProjectManagerPlugin::initialize(const QStringList &arguments, QString *errorMessage) { Q_UNUSED(arguments); Q_UNUSED(errorMessage); - Core::FileIconProvider::registerIconOverlayForFilename(Utils::Icons::PROJECT.imageFileName(), - "compile_commands.json"); + Core::FileIconProvider::registerIconOverlayForFilename( + 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>( Constants::COMPILATIONDATABASEMIMETYPE); |