diff options
Diffstat (limited to 'src/plugins/cpptools')
48 files changed, 452 insertions, 183 deletions
diff --git a/src/plugins/cpptools/CMakeLists.txt b/src/plugins/cpptools/CMakeLists.txt new file mode 100644 index 0000000000..c99705cbc1 --- /dev/null +++ b/src/plugins/cpptools/CMakeLists.txt @@ -0,0 +1,131 @@ +add_qtc_plugin(CppTools + DEPENDS Qt5::Network Qt5::Xml + PUBLIC_DEPENDS CPlusPlus Qt5::Widgets + PLUGIN_DEPENDS Core ProjectExplorer TextEditor + SOURCES + abstracteditorsupport.cpp abstracteditorsupport.h + abstractoverviewmodel.h + baseeditordocumentparser.cpp baseeditordocumentparser.h + baseeditordocumentprocessor.cpp baseeditordocumentprocessor.h + builtincursorinfo.cpp builtincursorinfo.h + builtineditordocumentparser.cpp builtineditordocumentparser.h + builtineditordocumentprocessor.cpp builtineditordocumentprocessor.h + builtinindexingsupport.cpp builtinindexingsupport.h + clangbasechecks.ui + clangdiagnosticconfig.cpp clangdiagnosticconfig.h + clangdiagnosticconfigsmodel.cpp clangdiagnosticconfigsmodel.h + clangdiagnosticconfigsselectionwidget.cpp clangdiagnosticconfigsselectionwidget.h + clangdiagnosticconfigswidget.cpp clangdiagnosticconfigswidget.h clangdiagnosticconfigswidget.ui + clazychecks.ui + compileroptionsbuilder.cpp compileroptionsbuilder.h + cppbuiltinmodelmanagersupport.cpp cppbuiltinmodelmanagersupport.h + cppcanonicalsymbol.cpp cppcanonicalsymbol.h + cppchecksymbols.cpp cppchecksymbols.h + cppclassesfilter.cpp cppclassesfilter.h + cppcodeformatter.cpp cppcodeformatter.h + cppcodemodelinspectordumper.cpp cppcodemodelinspectordumper.h + cppcodemodelsettings.cpp cppcodemodelsettings.h + cppcodemodelsettingspage.cpp cppcodemodelsettingspage.h cppcodemodelsettingspage.ui + cppcodestylepreferences.cpp cppcodestylepreferences.h + cppcodestylepreferencesfactory.cpp cppcodestylepreferencesfactory.h + cppcodestylesettings.cpp cppcodestylesettings.h + cppcodestylesettingspage.cpp cppcodestylesettingspage.h cppcodestylesettingspage.ui + cppcodestylesnippets.h + cppcompletionassist.cpp cppcompletionassist.h + cppcompletionassistprocessor.cpp cppcompletionassistprocessor.h + cppcompletionassistprovider.cpp cppcompletionassistprovider.h + cppcurrentdocumentfilter.cpp cppcurrentdocumentfilter.h + cppcursorinfo.h + cppdoxygen.cpp cppdoxygen.h + cppeditoroutline.cpp cppeditoroutline.h + cppeditorwidgetinterface.h + cppelementevaluator.cpp cppelementevaluator.h + cppfileiterationorder.cpp cppfileiterationorder.h + cppfilesettingspage.cpp cppfilesettingspage.h cppfilesettingspage.ui + cppfindreferences.cpp cppfindreferences.h + cppfollowsymbolundercursor.cpp cppfollowsymbolundercursor.h + cppfunctionsfilter.cpp cppfunctionsfilter.h + cpphoverhandler.cpp cpphoverhandler.h + cppincludesfilter.cpp cppincludesfilter.h + cppindexingsupport.cpp cppindexingsupport.h + cppkitinfo.cpp cppkitinfo.h + cpplocalsymbols.cpp cpplocalsymbols.h + cpplocatordata.cpp cpplocatordata.h + cpplocatorfilter.cpp cpplocatorfilter.h + cppmodelmanager.cpp cppmodelmanager.h + cppmodelmanagerinterface.h + cppmodelmanagersupport.cpp cppmodelmanagersupport.h + cppoverviewmodel.cpp cppoverviewmodel.h + cpppointerdeclarationformatter.cpp cpppointerdeclarationformatter.h + cppprojectfile.cpp cppprojectfile.h + cppprojectfilecategorizer.cpp cppprojectfilecategorizer.h + cppprojectinfogenerator.cpp cppprojectinfogenerator.h + cppprojectpartchooser.cpp cppprojectpartchooser.h + cppprojectupdater.cpp cppprojectupdater.h + cppqtstyleindenter.cpp cppqtstyleindenter.h + cpprawprojectpart.cpp cpprawprojectpart.h + cpprefactoringchanges.cpp cpprefactoringchanges.h + cpprefactoringengine.cpp cpprefactoringengine.h + cppselectionchanger.cpp cppselectionchanger.h + cppsemanticinfo.h + cppsemanticinfoupdater.cpp cppsemanticinfoupdater.h + cppsourceprocessor.cpp cppsourceprocessor.h + cppsymbolinfo.h + cpptools.qrc + cpptools_clangtidychecks.h + cpptools_clazychecks.h + cpptools_global.h + cpptools_utils.h + cpptoolsbridge.cpp cpptoolsbridge.h + cpptoolsbridgeinterface.h + cpptoolsbridgeqtcreatorimplementation.cpp cpptoolsbridgeqtcreatorimplementation.h + cpptoolsconstants.h + cpptoolsjsextension.cpp cpptoolsjsextension.h + cpptoolsplugin.cpp cpptoolsplugin.h + cpptoolsreuse.cpp cpptoolsreuse.h + cpptoolssettings.cpp cpptoolssettings.h + cppvirtualfunctionassistprovider.cpp cppvirtualfunctionassistprovider.h + cppvirtualfunctionproposalitem.cpp cppvirtualfunctionproposalitem.h + cppworkingcopy.cpp cppworkingcopy.h + cursorineditor.h + doxygengenerator.cpp doxygengenerator.h + editordocumenthandle.cpp editordocumenthandle.h + followsymbolinterface.h + functionutils.cpp functionutils.h + generatedcodemodelsupport.cpp generatedcodemodelsupport.h + headerpathfilter.cpp headerpathfilter.h + includeutils.cpp includeutils.h + indexitem.cpp indexitem.h + insertionpointlocator.cpp insertionpointlocator.h + projectinfo.cpp projectinfo.h + projectpart.cpp projectpart.h + refactoringengineinterface.h + searchsymbols.cpp searchsymbols.h + semantichighlighter.cpp semantichighlighter.h + senddocumenttracker.cpp senddocumenttracker.h + stringtable.cpp stringtable.h + symbolfinder.cpp symbolfinder.h + symbolsfindfilter.cpp symbolsfindfilter.h + tidychecks.ui + typehierarchybuilder.cpp typehierarchybuilder.h + usages.h + wrappablelineedit.cpp wrappablelineedit.h +) + +extend_qtc_plugin(CppTools + CONDITION WITH_TESTS + SOURCES + cppcodegen_test.cpp + cppcompletion_test.cpp + cppheadersource_test.cpp + cpplocalsymbols_test.cpp + cpplocatorfilter_test.cpp + cppmodelmanager_test.cpp + cpppointerdeclarationformatter_test.cpp + cppsourceprocessertesthelper.cpp cppsourceprocessertesthelper.h + cppsourceprocessor_test.cpp + cpptoolstestcase.cpp cpptoolstestcase.h + modelmanagertesthelper.cpp modelmanagertesthelper.h + symbolsearcher_test.cpp + typehierarchybuilder_test.cpp +) diff --git a/src/plugins/cpptools/abstracteditorsupport.cpp b/src/plugins/cpptools/abstracteditorsupport.cpp index 8818c83efb..05c9112555 100644 --- a/src/plugins/cpptools/abstracteditorsupport.cpp +++ b/src/plugins/cpptools/abstracteditorsupport.cpp @@ -62,7 +62,7 @@ QString AbstractEditorSupport::licenseTemplate(const QString &file, const QStrin const QString license = Internal::CppFileSettings::licenseTemplate(); Utils::MacroExpander expander; expander.registerVariable("Cpp:License:FileName", tr("The file name."), - [file]() { return Utils::FileName::fromString(file).fileName(); }); + [file]() { return Utils::FilePath::fromString(file).fileName(); }); expander.registerVariable("Cpp:License:ClassName", tr("The class name."), [className]() { return className; }); diff --git a/src/plugins/cpptools/baseeditordocumentparser.cpp b/src/plugins/cpptools/baseeditordocumentparser.cpp index f0c7d9f680..91c6a3aa79 100644 --- a/src/plugins/cpptools/baseeditordocumentparser.cpp +++ b/src/plugins/cpptools/baseeditordocumentparser.cpp @@ -133,7 +133,7 @@ ProjectPartInfo BaseEditorDocumentParser::determineProjectPart( return CppModelManager::instance()->projectPart(filePath); }); chooser.setProjectPartsFromDependenciesForFile([&](const QString &filePath) { - const auto fileName = Utils::FileName::fromString(filePath); + const auto fileName = Utils::FilePath::fromString(filePath); return CppModelManager::instance()->projectPartFromDependencies(fileName); }); diff --git a/src/plugins/cpptools/builtineditordocumentparser.cpp b/src/plugins/cpptools/builtineditordocumentparser.cpp index d802e67250..a8f44e1e0c 100644 --- a/src/plugins/cpptools/builtineditordocumentparser.cpp +++ b/src/plugins/cpptools/builtineditordocumentparser.cpp @@ -145,9 +145,9 @@ void BuiltinEditorDocumentParser::updateImpl(const QFutureInterface<void> &futur state.snapshot = Snapshot(); } else { // Remove changed files from the snapshot - QSet<Utils::FileName> toRemove; + QSet<Utils::FilePath> toRemove; foreach (const Document::Ptr &doc, state.snapshot) { - const Utils::FileName fileName = Utils::FileName::fromString(doc->fileName()); + const Utils::FilePath fileName = Utils::FilePath::fromString(doc->fileName()); if (workingCopy.contains(fileName)) { if (workingCopy.get(fileName).second != doc->editorRevision()) addFileAndDependencies(&state.snapshot, &toRemove, fileName); @@ -160,7 +160,7 @@ void BuiltinEditorDocumentParser::updateImpl(const QFutureInterface<void> &futur if (!toRemove.isEmpty()) { invalidateSnapshot = true; - foreach (const Utils::FileName &fileName, toRemove) + foreach (const Utils::FilePath &fileName, toRemove) state.snapshot.remove(fileName); } } @@ -261,15 +261,15 @@ BuiltinEditorDocumentParser::Ptr BuiltinEditorDocumentParser::get(const QString } void BuiltinEditorDocumentParser::addFileAndDependencies(Snapshot *snapshot, - QSet<Utils::FileName> *toRemove, - const Utils::FileName &fileName) const + QSet<Utils::FilePath> *toRemove, + const Utils::FilePath &fileName) const { QTC_ASSERT(snapshot, return); toRemove->insert(fileName); - if (fileName != Utils::FileName::fromString(filePath())) { - Utils::FileNameList deps = snapshot->filesDependingOn(fileName); - toRemove->unite(QSet<Utils::FileName>::fromList(deps)); + if (fileName != Utils::FilePath::fromString(filePath())) { + Utils::FilePathList deps = snapshot->filesDependingOn(fileName); + toRemove->unite(QSet<Utils::FilePath>::fromList(deps)); } } diff --git a/src/plugins/cpptools/builtineditordocumentparser.h b/src/plugins/cpptools/builtineditordocumentparser.h index 3f53ae765e..7a1b9fd880 100644 --- a/src/plugins/cpptools/builtineditordocumentparser.h +++ b/src/plugins/cpptools/builtineditordocumentparser.h @@ -61,8 +61,8 @@ private: void updateImpl(const QFutureInterface<void> &future, const UpdateParams &updateParams) override; void addFileAndDependencies(CPlusPlus::Snapshot *snapshot, - QSet<Utils::FileName> *toRemove, - const Utils::FileName &fileName) const; + QSet<Utils::FilePath> *toRemove, + const Utils::FilePath &fileName) const; struct ExtraState { QByteArray configFile; diff --git a/src/plugins/cpptools/builtinindexingsupport.cpp b/src/plugins/cpptools/builtinindexingsupport.cpp index ff21e85500..3677cefc29 100644 --- a/src/plugins/cpptools/builtinindexingsupport.cpp +++ b/src/plugins/cpptools/builtinindexingsupport.cpp @@ -52,6 +52,7 @@ using namespace CppTools; using namespace CppTools::Internal; static const bool FindErrorsIndexing = qgetenv("QTC_FIND_ERRORS_INDEXING") == "1"; +static Q_LOGGING_CATEGORY(indexerLog, "qtc.cpptools.indexer", QtWarningMsg) namespace { @@ -205,6 +206,8 @@ void index(QFutureInterface<void> &indexingFuture, const ProjectExplorer::HeaderPaths fallbackHeaderPaths = cmm->headerPaths(); const CPlusPlus::LanguageFeatures defaultFeatures = CPlusPlus::LanguageFeatures::defaultFeatures(); + + qCDebug(indexerLog) << "About to index" << files.size() << "files."; for (int i = 0; i < files.size(); ++i) { if (indexingFuture.isCanceled() || superFuture.isCanceled()) break; @@ -225,6 +228,7 @@ void index(QFutureInterface<void> &indexingFuture, processingHeaders = true; } + qCDebug(indexerLog) << " Indexing" << i + 1 << "of" << files.size() << ":" << fileName; ProjectExplorer::HeaderPaths headerPaths = parts.isEmpty() ? fallbackHeaderPaths : parts.first()->headerPaths; @@ -236,6 +240,7 @@ void index(QFutureInterface<void> &indexingFuture, if (isSourceFile) sourceProcessor->resetEnvironment(); } + qCDebug(indexerLog) << "Indexing finished."; } void parse(QFutureInterface<void> &indexingFuture, @@ -310,7 +315,7 @@ public: item.path = scope.split(QLatin1String("::"), QString::SkipEmptyParts); item.text = text; item.icon = info->icon(); - item.userData = qVariantFromValue(info); + item.userData = QVariant::fromValue(info); resultItems << item; } diff --git a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp index eb89d7d87e..7899fcae4c 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp @@ -68,10 +68,8 @@ Core::Id ClangDiagnosticConfigsSelectionWidget::currentConfigId() const void ClangDiagnosticConfigsSelectionWidget::connectToCurrentIndexChanged() { m_currentIndexChangedConnection - = connect(m_selectionComboBox, - static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), - this, - [this]() { emit currentConfigChanged(currentConfigId()); }); + = connect(m_selectionComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), + this, [this]() { emit currentConfigChanged(currentConfigId()); }); } void ClangDiagnosticConfigsSelectionWidget::disconnectFromCurrentIndexChanged() diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp index ea0386239f..01164bfb1a 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp @@ -70,7 +70,7 @@ static void buildTree(ProjectExplorer::Tree *parent, current->fullPath = parent->fullPath + current->name; parent->childDirectories.push_back(current); } else { - current->fullPath = Utils::FileName::fromString(current->name); + current->fullPath = Utils::FilePath::fromString(current->name); } current->parent = parent; for (const Constants::TidyNode &nodeChild : node.children) @@ -910,7 +910,7 @@ void ClangDiagnosticConfigsWidget::updateValidityWidgets(const QString &errorMes void ClangDiagnosticConfigsWidget::connectClangTidyItemChanged() { connect(m_tidyChecks->tidyMode, - static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ClangDiagnosticConfigsWidget::onClangTidyModeChanged); connect(m_tidyTreeModel.get(), &TidyChecksTreeModel::dataChanged, @@ -920,7 +920,7 @@ void ClangDiagnosticConfigsWidget::connectClangTidyItemChanged() void ClangDiagnosticConfigsWidget::disconnectClangTidyItemChanged() { disconnect(m_tidyChecks->tidyMode, - static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ClangDiagnosticConfigsWidget::onClangTidyModeChanged); disconnect(m_tidyTreeModel.get(), &TidyChecksTreeModel::dataChanged, diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 8dfe0c7977..3d74ad8d32 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -455,6 +455,8 @@ void CompilerOptionsBuilder::addLanguageVersionAndExtensions() case LanguageVersion::CXX2a: option = (gnuExtensions ? QLatin1String("-std=gnu++2a") : QLatin1String("-std=c++2a")); break; + case LanguageVersion::None: + break; } add(option, /*gccOnlyOption=*/true); @@ -522,6 +524,7 @@ static QStringList languageFeatureMacros() "__cpp_guaranteed_copy_elision", "__cpp_hex_float", "__cpp_if_constexpr", + "__cpp_impl_destroying_delete", "__cpp_inheriting_constructors", "__cpp_init_captures", "__cpp_initializer_lists", @@ -706,6 +709,7 @@ void CompilerOptionsBuilder::evaluateCompilerFlags() qgetenv("QTC_CLANG_CMD_OPTIONS_BLACKLIST")) .split(';', QString::SkipEmptyParts); + const Core::Id &toolChain = m_projectPart.toolchainType; bool containsDriverMode = false; bool skipNext = false; for (const QString &option : m_projectPart.compilerFlags) { @@ -717,6 +721,13 @@ void CompilerOptionsBuilder::evaluateCompilerFlags() if (userBlackList.contains(option)) continue; + // TODO: Make it possible that the clang binary/driver ignores unknown options, + // as it is done for libclang/clangd (not checking for OPT_UNKNOWN). + if (toolChain == ProjectExplorer::Constants::MINGW_TOOLCHAIN_TYPEID) { + if (option == "-fkeep-inline-dllexport" || option == "-fno-keep-inline-dllexport") + continue; + } + // Ignore warning flags as these interfere with our user-configured diagnostics. // Note that once "-w" is provided, no warnings will be emitted, even if "-Wall" follows. if (m_useBuildSystemWarnings == UseBuildSystemWarnings::No @@ -752,7 +763,7 @@ void CompilerOptionsBuilder::evaluateCompilerFlags() // Check whether a language version is already used. QString theOption = option; - if (theOption.startsWith("-std=")) { + if (theOption.startsWith("-std=") || theOption.startsWith("--std=")) { m_compilerFlags.isLanguageVersionSpecified = true; theOption.replace("=c18", "=c17"); theOption.replace("=gnu18", "=gnu17"); @@ -769,7 +780,6 @@ void CompilerOptionsBuilder::evaluateCompilerFlags() m_compilerFlags.flags.append(theOption); } - const Core::Id &toolChain = m_projectPart.toolchainType; if (!containsDriverMode && (toolChain == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID || toolChain == ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID)) { diff --git a/src/plugins/cpptools/cppclassesfilter.cpp b/src/plugins/cpptools/cppclassesfilter.cpp index 1306a155a4..ee691ba98b 100644 --- a/src/plugins/cpptools/cppclassesfilter.cpp +++ b/src/plugins/cpptools/cppclassesfilter.cpp @@ -43,7 +43,7 @@ CppClassesFilter::~CppClassesFilter() = default; Core::LocatorFilterEntry CppClassesFilter::filterEntryFromIndexItem(IndexItem::Ptr info) { - const QVariant id = qVariantFromValue(info); + const QVariant id = QVariant::fromValue(info); Core::LocatorFilterEntry filterEntry(this, info->symbolName(), id, info->icon()); filterEntry.extraInfo = info->symbolScope().isEmpty() ? info->shortNativeFilePath() diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp index e05c6c5eb3..efde14abc4 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp @@ -107,17 +107,18 @@ QString Utils::toString(::Utils::LanguageVersion languageVersion) { #define CASE_LANGUAGEVERSION(x) case ::Utils::LanguageVersion::x: return QLatin1String(#x) switch (languageVersion) { - CASE_LANGUAGEVERSION(C89); - CASE_LANGUAGEVERSION(C99); - CASE_LANGUAGEVERSION(C11); - CASE_LANGUAGEVERSION(C18); - CASE_LANGUAGEVERSION(CXX98); - CASE_LANGUAGEVERSION(CXX03); - CASE_LANGUAGEVERSION(CXX11); - CASE_LANGUAGEVERSION(CXX14); - CASE_LANGUAGEVERSION(CXX17); - CASE_LANGUAGEVERSION(CXX2a); - // no default to get a compiler warning if anything is added + CASE_LANGUAGEVERSION(None); + CASE_LANGUAGEVERSION(C89); + CASE_LANGUAGEVERSION(C99); + CASE_LANGUAGEVERSION(C11); + CASE_LANGUAGEVERSION(C18); + CASE_LANGUAGEVERSION(CXX98); + CASE_LANGUAGEVERSION(CXX03); + CASE_LANGUAGEVERSION(CXX11); + CASE_LANGUAGEVERSION(CXX14); + CASE_LANGUAGEVERSION(CXX17); + CASE_LANGUAGEVERSION(CXX2a); + // no default to get a compiler warning if anything is added } #undef CASE_LANGUAGEVERSION return QString(); @@ -383,6 +384,17 @@ QString Utils::toString(CPlusPlus::Kind kind) return QString(); } +QString Utils::toString(ProjectPart::ToolChainWordWidth width) +{ + switch (width) { + case ProjectPart::ToolChainWordWidth::WordWidth32Bit: + return QString("32"); + case ProjectPart::ToolChainWordWidth::WordWidth64Bit: + return QString("64"); + } + return QString(); +} + QString Utils::partsForFile(const QString &fileName) { const QList<ProjectPart::Ptr> parts @@ -502,16 +514,20 @@ void Dumper::dumpProjectInfos( const QList<ProjectInfo> &projectInfos) if (!part->projectConfigFile.isEmpty()) m_out << i3 << "Project Config File: " << part->projectConfigFile << "\n"; m_out << i2 << "Project Part \"" << part->id() << "\"{{{3\n"; - m_out << i3 << "Project Part Name : " << part->displayName << "\n"; - m_out << i3 << "Project Name : " << projectName << "\n"; - m_out << i3 << "Project File : " << projectFilePath << "\n"; - m_out << i3 << "Compiler Flags : " << part->compilerFlags.join(", ") << "\n"; - m_out << i3 << "Selected For Building: " << part->selectedForBuilding << "\n"; - m_out << i3 << "Build Target Type : " << Utils::toString(part->buildTargetType) << "\n"; - m_out << i3 << "Lanugage Version : " << Utils::toString(part->languageVersion)<<"\n"; - m_out << i3 << "Lanugage Extensions : " << Utils::toString(part->languageExtensions) + m_out << i3 << "Project Part Name : " << part->displayName << "\n"; + m_out << i3 << "Project Name : " << projectName << "\n"; + m_out << i3 << "Project File : " << projectFilePath << "\n"; + m_out << i3 << "ToolChain Type : " << part->toolchainType.toString() << "\n"; + m_out << i3 << "ToolChain Target Triple: " << part->toolChainTargetTriple << "\n"; + m_out << i3 << "ToolChain Word Width : " << part->toolChainWordWidth << "\n"; + m_out << i3 << "Compiler Flags : " << part->compilerFlags.join(", ") << "\n"; + m_out << i3 << "Selected For Building : " << part->selectedForBuilding << "\n"; + m_out << i3 << "Build System Target : " << part->buildSystemTarget << "\n"; + m_out << i3 << "Build Target Type : " << Utils::toString(part->buildTargetType) << "\n"; + m_out << i3 << "Language Version : " << Utils::toString(part->languageVersion)<<"\n"; + m_out << i3 << "Language Extensions : " << Utils::toString(part->languageExtensions) << "\n"; - m_out << i3 << "Qt Version : " << Utils::toString(part->qtVersion) << "\n"; + m_out << i3 << "Qt Version : " << Utils::toString(part->qtVersion) << "\n"; if (!part->files.isEmpty()) { m_out << i3 << "Files:{{{4\n"; @@ -597,10 +613,10 @@ void Dumper::dumpWorkingCopy(const WorkingCopy &workingCopy) m_out << "Working Copy contains " << workingCopy.size() << " entries{{{1\n"; const QByteArray i1 = indent(1); - QHashIterator< ::Utils::FileName, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); + QHashIterator< ::Utils::FilePath, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); while (it.hasNext()) { it.next(); - const ::Utils::FileName &filePath = it.key(); + const ::Utils::FilePath &filePath = it.key(); unsigned sourcRevision = it.value().second; m_out << i1 << "rev=" << sourcRevision << ", " << filePath << "\n"; } diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.h b/src/plugins/cpptools/cppcodemodelinspectordumper.h index c3100d8b33..41d294e817 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.h +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.h @@ -54,6 +54,7 @@ struct CPPTOOLS_EXPORT Utils static QString toString(const QVector<CppTools::ProjectFile> &projectFiles); static QString toString(CppTools::ProjectFile::Kind kind); static QString toString(CPlusPlus::Kind kind); + static QString toString(ProjectPart::ToolChainWordWidth width); static QString partsForFile(const QString &fileName); static QString unresolvedFileNameWithDelimiters(const CPlusPlus::Document::Include &include); static QString pathListToString(const QStringList &pathList); diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp index 12b226f756..b51f833afe 100644 --- a/src/plugins/cpptools/cppcompletionassist.cpp +++ b/src/plugins/cpptools/cppcompletionassist.cpp @@ -92,7 +92,10 @@ public: void keepCompletionOperator(unsigned compOp) { m_completionOperator = compOp; } void keepTypeOfExpression(const QSharedPointer<TypeOfExpression> &typeOfExp) { m_typeOfExpression = typeOfExp; } - + bool isKeyword() const final + { return m_isKeyword; } + void setIsKeyword(bool isKeyword) + { m_isKeyword = isKeyword; } quint64 hash() const override; @@ -101,6 +104,7 @@ private: unsigned m_completionOperator = T_EOF_SYMBOL; mutable QChar m_typedChar; bool m_isOverloaded = false; + bool m_isKeyword = false; }; } // Internal @@ -1531,6 +1535,16 @@ bool InternalCppCompletionAssistProcessor::globalCompletion(Scope *currentScope) return !m_completions.isEmpty(); } +void InternalCppCompletionAssistProcessor::addKeywordCompletionItem(const QString &text) +{ + auto item = new CppAssistProposalItem; + item->setText(text); + item->setIcon(Icons::keywordIcon()); + item->setOrder(KeywordsOrder); + item->setIsKeyword(true); + m_completions.append(item); +} + bool InternalCppCompletionAssistProcessor::completeMember(const QList<LookupItem> &baseResults) { const LookupContext &context = m_model->m_typeOfExpression->context(); @@ -1859,16 +1873,16 @@ void InternalCppCompletionAssistProcessor::addKeywords() // keyword completion items. for (int i = T_FIRST_KEYWORD; i < keywordLimit; ++i) - addCompletionItem(QLatin1String(Token::name(i)), Icons::keywordIcon(), KeywordsOrder); + addKeywordCompletionItem(QLatin1String(Token::name(i))); // primitive type completion items. for (int i = T_FIRST_PRIMITIVE; i <= T_LAST_PRIMITIVE; ++i) - addCompletionItem(QLatin1String(Token::name(i)), Icons::keywordIcon(), KeywordsOrder); + addKeywordCompletionItem(QLatin1String(Token::name(i))); // "Identifiers with special meaning" if (m_interface->languageFeatures().cxx11Enabled) { - addCompletionItem(QLatin1String("override"), Icons::keywordIcon(), KeywordsOrder); - addCompletionItem(QLatin1String("final"), Icons::keywordIcon(), KeywordsOrder); + addKeywordCompletionItem(QLatin1String("override")); + addKeywordCompletionItem(QLatin1String("final")); } } diff --git a/src/plugins/cpptools/cppcompletionassist.h b/src/plugins/cpptools/cppcompletionassist.h index e22ea38607..7213271263 100644 --- a/src/plugins/cpptools/cppcompletionassist.h +++ b/src/plugins/cpptools/cppcompletionassist.h @@ -138,6 +138,7 @@ private: CPlusPlus::Scope *cursorScope); bool globalCompletion(CPlusPlus::Scope *scope); + void addKeywordCompletionItem(const QString &text); void addCompletionItem(const QString &text, const QIcon &icon = QIcon(), int order = 0, diff --git a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp index be1163d168..fdd4920504 100644 --- a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp +++ b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp @@ -83,7 +83,7 @@ QList<Core::LocatorFilterEntry> CppCurrentDocumentFilter::matchesFor( QRegularExpressionMatch match = regexp.match(matchString); if (match.hasMatch()) { const bool betterMatch = match.capturedStart() == 0; - QVariant id = qVariantFromValue(info); + QVariant id = QVariant::fromValue(info); QString name = matchString; QString extraInfo = info->symbolScope(); if (info->type() == IndexItem::Function) { diff --git a/src/plugins/cpptools/cppeditoroutline.cpp b/src/plugins/cpptools/cppeditoroutline.cpp index d7840016d5..627385f107 100644 --- a/src/plugins/cpptools/cppeditoroutline.cpp +++ b/src/plugins/cpptools/cppeditoroutline.cpp @@ -124,9 +124,9 @@ CppEditorOutline::CppEditorOutline(TextEditor::TextEditorWidget *editorWidget) &CppTools::CppToolsSettings::setSortedEditorDocumentOutline); m_combo->addAction(m_sortAction); - connect(m_combo, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), + connect(m_combo, QOverload<int>::of(&QComboBox::activated), this, &CppEditorOutline::gotoSymbolInEditor); - connect(m_combo, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + connect(m_combo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &CppEditorOutline::updateToolTip); // Set up timers diff --git a/src/plugins/cpptools/cppelementevaluator.cpp b/src/plugins/cpptools/cppelementevaluator.cpp index 949442c459..88ffc3c075 100644 --- a/src/plugins/cpptools/cppelementevaluator.cpp +++ b/src/plugins/cpptools/cppelementevaluator.cpp @@ -83,7 +83,7 @@ class CppInclude : public CppElement public: explicit CppInclude(const Document::Include &includeFile) : path(QDir::toNativeSeparators(includeFile.resolvedFileName())) - , fileName(Utils::FileName::fromString(includeFile.resolvedFileName()).fileName()) + , fileName(Utils::FilePath::fromString(includeFile.resolvedFileName()).fileName()) { helpCategory = Core::HelpItem::Brief; helpIdCandidates = QStringList(fileName); diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 867b3d395a..e277edeb4f 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -56,7 +56,7 @@ using namespace CppTools::Internal; using namespace CppTools; using namespace ProjectExplorer; -static QByteArray getSource(const Utils::FileName &fileName, +static QByteArray getSource(const Utils::FilePath &fileName, const WorkingCopy &workingCopy) { if (workingCopy.contains(fileName)) { @@ -178,7 +178,7 @@ class ProcessFile public: // needed by QtConcurrent - using argument_type = const Utils::FileName &; + using argument_type = const Utils::FilePath &; using result_type = QList<CPlusPlus::Usage>; ProcessFile(const WorkingCopy &workingCopy, @@ -193,7 +193,7 @@ public: future(future) { } - QList<CPlusPlus::Usage> operator()(const Utils::FileName &fileName) + QList<CPlusPlus::Usage> operator()(const Utils::FilePath &fileName) { QList<CPlusPlus::Usage> usages; if (future->isPaused()) @@ -210,7 +210,7 @@ public: CPlusPlus::Document::Ptr doc; const QByteArray unpreprocessedSource = getSource(fileName, workingCopy); - if (symbolDocument && fileName == Utils::FileName::fromString(symbolDocument->fileName())) { + if (symbolDocument && fileName == Utils::FilePath::fromString(symbolDocument->fileName())) { doc = symbolDocument; } else { doc = snapshot.preprocessedDocument(unpreprocessedSource, fileName); @@ -282,9 +282,9 @@ static void find_helper(QFutureInterface<CPlusPlus::Usage> &future, const CPlusPlus::Snapshot snapshot = context.snapshot(); - const Utils::FileName sourceFile = Utils::FileName::fromUtf8(symbol->fileName(), + const Utils::FilePath sourceFile = Utils::FilePath::fromUtf8(symbol->fileName(), symbol->fileNameLength()); - Utils::FileNameList files{sourceFile}; + Utils::FilePathList files{sourceFile}; if (symbol->isClass() || symbol->isForwardClassDeclaration() @@ -351,7 +351,7 @@ void CppFindReferences::findUsages(CPlusPlus::Symbol *symbol, parameters.prettySymbolName = overview.prettyName(context.path(symbol).constLast()); } - search->setUserData(qVariantFromValue(parameters)); + search->setUserData(QVariant::fromValue(parameters)); findAll_helper(search, symbol, context); } @@ -527,7 +527,7 @@ CPlusPlus::Symbol *CppFindReferences::findSymbol(const CppFindReferencesParamete CPlusPlus::Document::Ptr newSymbolDocument = snapshot.document(symbolFile); // document is not parsed and has no bindings yet, do it - QByteArray source = getSource(Utils::FileName::fromString(newSymbolDocument->fileName()), + QByteArray source = getSource(Utils::FilePath::fromString(newSymbolDocument->fileName()), m_modelManager->workingCopy()); CPlusPlus::Document::Ptr doc = snapshot.preprocessedDocument(source, newSymbolDocument->fileName()); @@ -571,7 +571,7 @@ static void displayResults(SearchResult *search, QFutureWatcher<CPlusPlus::Usage parameters.filesToRename.append(node); } - search->setUserData(qVariantFromValue(parameters)); + search->setUserData(QVariant::fromValue(parameters)); } static void searchFinished(SearchResult *search, QFutureWatcher<CPlusPlus::Usage> *watcher) @@ -607,7 +607,7 @@ class FindMacroUsesInFile public: // needed by QtConcurrent - using argument_type = const Utils::FileName &; + using argument_type = const Utils::FilePath &; using result_type = QList<CPlusPlus::Usage>; FindMacroUsesInFile(const WorkingCopy &workingCopy, @@ -617,7 +617,7 @@ public: : workingCopy(workingCopy), snapshot(snapshot), macro(macro), future(future) { } - QList<CPlusPlus::Usage> operator()(const Utils::FileName &fileName) + QList<CPlusPlus::Usage> operator()(const Utils::FilePath &fileName) { QList<CPlusPlus::Usage> usages; CPlusPlus::Document::Ptr doc = snapshot.document(fileName); @@ -688,8 +688,8 @@ static void findMacroUses_helper(QFutureInterface<CPlusPlus::Usage> &future, const CPlusPlus::Snapshot snapshot, const CPlusPlus::Macro macro) { - const Utils::FileName sourceFile = Utils::FileName::fromString(macro.fileName()); - Utils::FileNameList files{sourceFile}; + const Utils::FilePath sourceFile = Utils::FilePath::fromString(macro.fileName()); + Utils::FilePathList files{sourceFile}; files = Utils::filteredUnique(files + snapshot.filesDependingOn(sourceFile)); future.setProgressRange(0, files.size()); @@ -736,7 +736,7 @@ void CppFindReferences::findMacroUses(const CPlusPlus::Macro ¯o, const QStri // add the macro definition itself { - const QByteArray &source = getSource(Utils::FileName::fromString(macro.fileName()), + const QByteArray &source = getSource(Utils::FilePath::fromString(macro.fileName()), workingCopy); unsigned column; const QString line = FindMacroUsesInFile::matchingLine(macro.bytesOffset(), source, diff --git a/src/plugins/cpptools/cppfunctionsfilter.cpp b/src/plugins/cpptools/cppfunctionsfilter.cpp index f2897215df..597e0f4d03 100644 --- a/src/plugins/cpptools/cppfunctionsfilter.cpp +++ b/src/plugins/cpptools/cppfunctionsfilter.cpp @@ -45,7 +45,7 @@ CppFunctionsFilter::~CppFunctionsFilter() = default; Core::LocatorFilterEntry CppFunctionsFilter::filterEntryFromIndexItem(IndexItem::Ptr info) { - const QVariant id = qVariantFromValue(info); + const QVariant id = QVariant::fromValue(info); QString name = info->symbolName(); QString extraInfo = info->symbolScope(); @@ -53,7 +53,7 @@ Core::LocatorFilterEntry CppFunctionsFilter::filterEntryFromIndexItem(IndexItem: if (extraInfo.isEmpty()) { extraInfo = info->shortNativeFilePath(); } else { - extraInfo.append(" (" + Utils::FileName::fromString(info->fileName()).fileName() + ')'); + extraInfo.append(" (" + Utils::FilePath::fromString(info->fileName()).fileName() + ')'); } Core::LocatorFilterEntry filterEntry(this, name + info->symbolType(), id, info->icon()); diff --git a/src/plugins/cpptools/cppheadersource_test.cpp b/src/plugins/cpptools/cppheadersource_test.cpp index ba830cc491..46994ed1f7 100644 --- a/src/plugins/cpptools/cppheadersource_test.cpp +++ b/src/plugins/cpptools/cppheadersource_test.cpp @@ -99,7 +99,7 @@ void CppToolsPlugin::initTestCase() void CppToolsPlugin::cleanupTestCase() { - Utils::FileUtils::removeRecursively(Utils::FileName::fromString(baseTestDir())); + Utils::FileUtils::removeRecursively(Utils::FilePath::fromString(baseTestDir())); m_fileSettings->headerSearchPaths.removeLast(); m_fileSettings->headerSearchPaths.removeLast(); m_fileSettings->sourceSearchPaths.removeLast(); diff --git a/src/plugins/cpptools/cppincludesfilter.cpp b/src/plugins/cpptools/cppincludesfilter.cpp index 8675a9747a..8a852fb7a5 100644 --- a/src/plugins/cpptools/cppincludesfilter.cpp +++ b/src/plugins/cpptools/cppincludesfilter.cpp @@ -160,8 +160,8 @@ void CppIncludesFilter::prepareSearch(const QString &entry) m_needsUpdate = false; QSet<QString> seedPaths; for (Project *project : SessionManager::projects()) { - const Utils::FileNameList allFiles = project->files(Project::AllFiles); - for (const Utils::FileName &filePath : allFiles ) + const Utils::FilePathList allFiles = project->files(Project::AllFiles); + for (const Utils::FilePath &filePath : allFiles ) seedPaths.insert(filePath.toString()); } const QList<DocumentModel::Entry *> entries = DocumentModel::entries(); diff --git a/src/plugins/cpptools/cppkitinfo.cpp b/src/plugins/cpptools/cppkitinfo.cpp index 6cdf7d52df..e57a4dbd73 100644 --- a/src/plugins/cpptools/cppkitinfo.cpp +++ b/src/plugins/cpptools/cppkitinfo.cpp @@ -48,12 +48,12 @@ KitInfo::KitInfo(Project *project) // Toolchains if (kit) { - cToolChain = ToolChainKitInformation::toolChain(kit, Constants::C_LANGUAGE_ID); - cxxToolChain = ToolChainKitInformation::toolChain(kit, Constants::CXX_LANGUAGE_ID); + cToolChain = ToolChainKitAspect::toolChain(kit, Constants::C_LANGUAGE_ID); + cxxToolChain = ToolChainKitAspect::toolChain(kit, Constants::CXX_LANGUAGE_ID); } // Sysroot - sysRootPath = ProjectExplorer::SysRootKitInformation::sysRoot(kit).toString(); + sysRootPath = ProjectExplorer::SysRootKitAspect::sysRoot(kit).toString(); } bool KitInfo::isValid() const diff --git a/src/plugins/cpptools/cpplocatorfilter.cpp b/src/plugins/cpptools/cpplocatorfilter.cpp index 6865cbe5a2..aa85f8d33f 100644 --- a/src/plugins/cpptools/cpplocatorfilter.cpp +++ b/src/plugins/cpptools/cpplocatorfilter.cpp @@ -50,7 +50,7 @@ CppLocatorFilter::~CppLocatorFilter() = default; Core::LocatorFilterEntry CppLocatorFilter::filterEntryFromIndexItem(IndexItem::Ptr info) { - const QVariant id = qVariantFromValue(info); + const QVariant id = QVariant::fromValue(info); Core::LocatorFilterEntry filterEntry(this, info->scopedSymbolName(), id, info->icon()); if (info->type() == IndexItem::Class || info->type() == IndexItem::Enum) filterEntry.extraInfo = info->shortNativeFilePath(); diff --git a/src/plugins/cpptools/cpplocatorfilter_test.cpp b/src/plugins/cpptools/cpplocatorfilter_test.cpp index 8c6f50390f..0dd3470826 100644 --- a/src/plugins/cpptools/cpplocatorfilter_test.cpp +++ b/src/plugins/cpptools/cpplocatorfilter_test.cpp @@ -166,8 +166,8 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data() MyTestDataDir testDirectory("testdata_basic"); const QString testFile = testDirectory.file("file1.cpp"); const QString objTestFile = testDirectory.file("file1.mm"); - const QString testFileShort = FileUtils::shortNativePath(FileName::fromString(testFile)); - const QString objTestFileShort = FileUtils::shortNativePath(FileName::fromString(objTestFile)); + const QString testFileShort = FilePath::fromString(testFile).shortNativePath(); + const QString objTestFileShort = FilePath::fromString(objTestFile).shortNativePath(); QTest::newRow("CppFunctionsFilter") << testFile diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 5a43feb322..c82355b31b 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -62,6 +62,7 @@ #include <projectexplorer/projectmacro.h> #include <projectexplorer/session.h> #include <utils/fileutils.h> +#include <utils/hostosinfo.h> #include <utils/qtcassert.h> #include <QCoreApplication> @@ -146,7 +147,7 @@ public: mutable QMutex m_projectMutex; QMap<ProjectExplorer::Project *, ProjectInfo> m_projectToProjectsInfo; QHash<ProjectExplorer::Project *, bool> m_projectToIndexerCanceled; - QMap<Utils::FileName, QList<ProjectPart::Ptr> > m_fileToProjectParts; + QMap<Utils::FilePath, QList<ProjectPart::Ptr> > m_fileToProjectParts; QMap<QString, ProjectPart::Ptr> m_projectPartIdToProjectProjectPart; // The members below are cached/(re)calculated from the projects and/or their project parts bool m_dirty; @@ -513,6 +514,10 @@ CppModelManager::CppModelManager() d->m_indexingSupporter = nullptr; d->m_enableGC = true; + // Visual C++ has 1MiB, macOSX has 512KiB + if (Utils::HostOsInfo::isWindowsHost() || Utils::HostOsInfo::isMacHost()) + d->m_threadPool.setStackSize(2 * 1024 * 1024); + qRegisterMetaType<QSet<QString> >(); connect(this, &CppModelManager::sourceFilesRefreshed, this, &CppModelManager::onSourceFilesRefreshed); @@ -968,7 +973,7 @@ void CppModelManager::recalculateProjectPartMappings() foreach (const ProjectPart::Ptr &projectPart, projectInfo.projectParts()) { d->m_projectPartIdToProjectProjectPart[projectPart->id()] = projectPart; foreach (const ProjectFile &cxxFile, projectPart->files) - d->m_fileToProjectParts[Utils::FileName::fromString(cxxFile.path)].append( + d->m_fileToProjectParts[Utils::FilePath::fromString(cxxFile.path)].append( projectPart); } @@ -1132,20 +1137,20 @@ ProjectPart::Ptr CppModelManager::projectPartForId(const QString &projectPartId) return d->m_projectPartIdToProjectProjectPart.value(projectPartId); } -QList<ProjectPart::Ptr> CppModelManager::projectPart(const Utils::FileName &fileName) const +QList<ProjectPart::Ptr> CppModelManager::projectPart(const Utils::FilePath &fileName) const { QMutexLocker locker(&d->m_projectMutex); return d->m_fileToProjectParts.value(fileName); } QList<ProjectPart::Ptr> CppModelManager::projectPartFromDependencies( - const Utils::FileName &fileName) const + const Utils::FilePath &fileName) const { QSet<ProjectPart::Ptr> parts; - const Utils::FileNameList deps = snapshot().filesDependingOn(fileName); + const Utils::FilePathList deps = snapshot().filesDependingOn(fileName); QMutexLocker locker(&d->m_projectMutex); - foreach (const Utils::FileName &dep, deps) { + foreach (const Utils::FilePath &dep, deps) { parts.unite(QSet<ProjectPart::Ptr>::fromList(d->m_fileToProjectParts.value(dep))); } @@ -1338,7 +1343,7 @@ void CppModelManager::GC() filesInEditorSupports << abstractEditorSupport->fileName(); Snapshot currentSnapshot = snapshot(); - QSet<Utils::FileName> reachableFiles; + QSet<Utils::FilePath> reachableFiles; // The configuration file is part of the project files, which is just fine. // If single files are open, without any project, then there is no need to // keep the configuration file around. @@ -1349,7 +1354,7 @@ void CppModelManager::GC() const QString file = todo.last(); todo.removeLast(); - const Utils::FileName fileName = Utils::FileName::fromString(file); + const Utils::FilePath fileName = Utils::FilePath::fromString(file); if (reachableFiles.contains(fileName)) continue; reachableFiles.insert(fileName); @@ -1362,7 +1367,7 @@ void CppModelManager::GC() QStringList notReachableFiles; Snapshot newSnapshot; for (Snapshot::const_iterator it = currentSnapshot.begin(); it != currentSnapshot.end(); ++it) { - const Utils::FileName &fileName = it.key(); + const Utils::FilePath &fileName = it.key(); if (reachableFiles.contains(fileName)) newSnapshot.insert(it.value()); diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index 2c5fe960f2..9deaa2e392 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -121,12 +121,12 @@ public: /// \return The project part with the given project file ProjectPart::Ptr projectPartForId(const QString &projectPartId) const override; /// \return All project parts that mention the given file name as one of the sources/headers. - QList<ProjectPart::Ptr> projectPart(const Utils::FileName &fileName) const; + QList<ProjectPart::Ptr> projectPart(const Utils::FilePath &fileName) const; QList<ProjectPart::Ptr> projectPart(const QString &fileName) const - { return projectPart(Utils::FileName::fromString(fileName)); } + { return projectPart(Utils::FilePath::fromString(fileName)); } /// This is a fall-back function: find all files that includes the file directly or indirectly, /// and return its \c ProjectPart list for use with this file. - QList<ProjectPart::Ptr> projectPartFromDependencies(const Utils::FileName &fileName) const; + QList<ProjectPart::Ptr> projectPartFromDependencies(const Utils::FilePath &fileName) const; /// \return A synthetic \c ProjectPart which consists of all defines/includes/frameworks from /// all loaded projects. ProjectPart::Ptr fallbackProjectPart(); diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp index aac046745b..ceab10028e 100644 --- a/src/plugins/cpptools/cppmodelmanager_test.cpp +++ b/src/plugins/cpptools/cppmodelmanager_test.cpp @@ -618,10 +618,10 @@ void CppToolsPlugin::test_modelmanager_extraeditorsupport_uiFiles() QCOMPARE(workingCopy.size(), 2); // mm->configurationFileName() and "ui_*.h" QStringList fileNamesInWorkinCopy; - QHashIterator<Utils::FileName, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); + QHashIterator<Utils::FilePath, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); while (it.hasNext()) { it.next(); - fileNamesInWorkinCopy << Utils::FileName::fromString(it.key().toString()).fileName(); + fileNamesInWorkinCopy << Utils::FilePath::fromString(it.key().toString()).fileName(); } fileNamesInWorkinCopy.sort(); const QString expectedUiHeaderFileName = _("ui_mainwindow.h"); @@ -639,8 +639,8 @@ void CppToolsPlugin::test_modelmanager_extraeditorsupport_uiFiles() QVERIFY(document); const QStringList includedFiles = document->includedFiles(); QCOMPARE(includedFiles.size(), 2); - QCOMPARE(Utils::FileName::fromString(includedFiles.at(0)).fileName(), _("mainwindow.h")); - QCOMPARE(Utils::FileName::fromString(includedFiles.at(1)).fileName(), _("ui_mainwindow.h")); + QCOMPARE(Utils::FilePath::fromString(includedFiles.at(0)).fileName(), _("mainwindow.h")); + QCOMPARE(Utils::FilePath::fromString(includedFiles.at(1)).fileName(), _("ui_mainwindow.h")); } /// QTCREATORBUG-9828: Locator shows symbols of closed files diff --git a/src/plugins/cpptools/cppprojectinfogenerator.cpp b/src/plugins/cpptools/cppprojectinfogenerator.cpp index c177c7a7d9..18c7d4fb76 100644 --- a/src/plugins/cpptools/cppprojectinfogenerator.cpp +++ b/src/plugins/cpptools/cppprojectinfogenerator.cpp @@ -89,10 +89,13 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj rawProjectPart.files, rawProjectPart.fileClassifier); - if (cat.hasParts()) { - const ProjectPart::Ptr part = projectPartFromRawProjectPart(rawProjectPart, - m_projectUpdateInfo.project); + if (!cat.hasParts()) + return result; + const ProjectPart::Ptr part = projectPartFromRawProjectPart(rawProjectPart, + m_projectUpdateInfo.project); + + if (m_projectUpdateInfo.cxxToolChain) { if (cat.hasCxxSources()) { result << createProjectPart(rawProjectPart, part, @@ -101,7 +104,6 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj Language::Cxx, LanguageExtension::None); } - if (cat.hasObjcxxSources()) { result << createProjectPart(rawProjectPart, part, @@ -110,7 +112,9 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj Language::Cxx, LanguageExtension::ObjectiveC); } + } + if (m_projectUpdateInfo.cToolChain) { if (cat.hasCSources()) { result << createProjectPart(rawProjectPart, part, @@ -129,6 +133,7 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj LanguageExtension::ObjectiveC); } } + return result; } @@ -182,7 +187,9 @@ ProjectPart::Ptr ProjectInfoGenerator::createProjectPart( // Header paths if (tcInfo.headerPathsRunner) { const ProjectExplorer::HeaderPaths builtInHeaderPaths - = tcInfo.headerPathsRunner(flags.commandLineFlags, tcInfo.sysRootPath); + = tcInfo.headerPathsRunner(flags.commandLineFlags, + tcInfo.sysRootPath, + tcInfo.targetTriple); ProjectExplorer::HeaderPaths &headerPaths = part->headerPaths; for (const ProjectExplorer::HeaderPath &header : builtInHeaderPaths) { diff --git a/src/plugins/cpptools/cpptools_clangtidychecks.h b/src/plugins/cpptools/cpptools_clangtidychecks.h index 20dcbdf120..813e9b9ed5 100644 --- a/src/plugins/cpptools/cpptools_clangtidychecks.h +++ b/src/plugins/cpptools/cpptools_clangtidychecks.h @@ -50,7 +50,33 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "android-", { + { + "uration-", + { + "comparison", + "division", + { + "factory-", + { + "float", + "scale" + } + }, + "subtraction" + } + }, + "aster-strsplit-delimiter", + { + "o-", + { + "internal-dependencies", + "namespace" + } + }, + "edundant-strcat-calls", + "tr-cat-append", "tring-find-startswith", + "pgrade-duration-conversions", { "cloexec-", { @@ -149,6 +175,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "swapped-arguments", "terminating-continue", "throw-keyword-missing", + "too-small-loop-variable", "undefined-memory-manipulation", "undelegated-constructor", { @@ -166,6 +193,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "cert-", { "dcl03-c", + "dcl16-c", "dcl21-cpp", "dcl50-cpp", "dcl54-cpp", @@ -193,6 +221,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "apiModeling.", { + "StdCLibraryFunctions", "TrustNonnull", "google.GTest" } @@ -232,13 +261,13 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "cplusplus.", { "InnerPointer", + "Move", "NewDelete", "NewDeleteLeaks", "SelfAssignment" } }, "deadcode.DeadStores", - "llvm.Conventions", { "nullability.", { @@ -286,6 +315,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "API", "NumberObjectConversion", + "OSObjectRetainCount", "ObjCProperty", "SecKeychainAPI", { @@ -357,7 +387,6 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "Malloc", "MallocSizeof", "MismatchedDeallocator", - "StdCLibraryFunctions", "Vfork", { "cstring.", @@ -381,11 +410,20 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "cppcoreguidelines-", { - "avoid-goto", + { + "avoid-", + { + "c-arrays", + "goto", + "magic-numbers" + } + }, "c-copy-assignment-signature", "interfaces-global-init", + "macro-usage", "narrowing-conversions", "no-malloc", + "non-private-member-variables-in-classes", "owning-memory", { "pro-", @@ -447,6 +485,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "objc-", { "avoid-throwing-exception", + "function-naming", "global-variable-declaration" } }, @@ -473,7 +512,13 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "hicpp-", { - "avoid-goto", + { + "avoid-", + { + "c-arrays", + "goto" + } + }, "braces-around-statements", "deprecated-headers", "exception-baseclass", @@ -498,6 +543,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "special-member-functions", "static-assert", "undelegated-constructor", + "uppercase-literal-suffix", { "use-", { @@ -533,7 +579,13 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "definitions-in-headers", "misplaced-const", "new-delete-overloads", - "non-copyable-objects", + { + "non-", + { + "copyable-objects", + "private-member-variables-in-classes" + } + }, "redundant-expression", "static-assert", "throw-by-value-catch-by-reference", @@ -552,8 +604,21 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "modernize-", { - "avoid-bind", - "deprecated-headers", + { + "avoid-", + { + "bind", + "c-arrays" + } + }, + "concat-nested-namespaces", + { + "deprecated-", + { + "headers", + "ios-base-aliases" + } + }, "loop-convert", { "make-", @@ -589,6 +654,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "delete" } }, + "nodiscard", "noexcept", "nullptr", "override", @@ -658,6 +724,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "avoid-const-params-in-decls", "braces-around-statements", + "const-return-type", "container-size-empty", "delete-null-pointer", "deleted-default", @@ -666,6 +733,8 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "identifier-naming", "implicit-bool-conversion", "inconsistent-declaration-parameter-name", + "isolate-declaration", + "magic-numbers", "misleading-indentation", "misplaced-array-index", "named-parameter", @@ -677,6 +746,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "declaration", "function-ptr-dereference", "member-init", + "preprocessor", "smartptr-get", { "string-", @@ -703,6 +773,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT }, "string-compare", "uniqueptr-delete-release", + "uppercase-literal-suffix", "rary-objects" } } diff --git a/src/plugins/cpptools/cpptoolsconstants.h b/src/plugins/cpptools/cpptoolsconstants.h index 2e1aebfd43..8490f2ccf5 100644 --- a/src/plugins/cpptools/cpptoolsconstants.h +++ b/src/plugins/cpptools/cpptoolsconstants.h @@ -100,7 +100,7 @@ const char SYMBOLS_FIND_FILTER_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("CppTools", "C // CLANG_VERSION here because it might denote a version that was not yet // released (e.g. 6.0.1, but only 6.0.0 was released). constexpr const char TIDY_DOCUMENTATION_URL_TEMPLATE[] - = "https://releases.llvm.org/7.0.0/tools/clang/tools/extra/docs/clang-tidy/checks/%1.html"; + = "https://releases.llvm.org/8.0.0/tools/clang/tools/extra/docs/clang-tidy/checks/%1.html"; constexpr const char CLAZY_DOCUMENTATION_URL_TEMPLATE[] = "https://github.com/KDE/clazy/blob/master/docs/checks/README-%1.md"; diff --git a/src/plugins/cpptools/cpptoolsjsextension.cpp b/src/plugins/cpptools/cpptoolsjsextension.cpp index d5efc1db6d..4c283fc644 100644 --- a/src/plugins/cpptools/cpptoolsjsextension.cpp +++ b/src/plugins/cpptools/cpptoolsjsextension.cpp @@ -38,33 +38,16 @@ namespace CppTools { namespace Internal { -QString CppToolsJsExtension::headerGuard(const QString &in) const +static QString fileName(const QString &path, const QString &extension) { - return Utils::headerGuard(in); + return Utils::FilePath::fromStringWithExtension(path, extension).toString(); } -QString CppToolsJsExtension::fileName(const QString &path, const QString &extension) const +QString CppToolsJsExtension::headerGuard(const QString &in) const { - QString raw = Utils::FileName::fromString(path, extension).toString(); - CppFileSettings settings; - settings.fromSettings(Core::ICore::settings()); - if (!settings.lowerCaseFiles) - return raw; - - QFileInfo fi = QFileInfo(raw); - QString finalPath = fi.path(); - if (finalPath == QStringLiteral(".")) - finalPath.clear(); - if (!finalPath.isEmpty() && !finalPath.endsWith(QLatin1Char('/'))) - finalPath += QLatin1Char('/'); - QString name = fi.baseName().toLower(); - QString ext = fi.completeSuffix(); - if (!ext.isEmpty()) - ext = QString(QLatin1Char('.')) + ext; - return finalPath + name + ext; + return Utils::headerGuard(in); } - static QStringList parts(const QString &klass) { return klass.split(QStringLiteral("::")); @@ -77,6 +60,11 @@ QStringList CppToolsJsExtension::namespaces(const QString &klass) const return result; } +bool CppToolsJsExtension::hasNamespaces(const QString &klass) const +{ + return !namespaces(klass).empty(); +} + QString CppToolsJsExtension::className(const QString &klass) const { QStringList result = parts(klass); @@ -85,7 +73,23 @@ QString CppToolsJsExtension::className(const QString &klass) const QString CppToolsJsExtension::classToFileName(const QString &klass, const QString &extension) const { - return fileName(className(klass), extension); + const QString raw = fileName(className(klass), extension); + CppFileSettings settings; + settings.fromSettings(Core::ICore::settings()); + if (!settings.lowerCaseFiles) + return raw; + + QFileInfo fi = QFileInfo(raw); + QString finalPath = fi.path(); + if (finalPath == QStringLiteral(".")) + finalPath.clear(); + if (!finalPath.isEmpty() && !finalPath.endsWith(QLatin1Char('/'))) + finalPath += QLatin1Char('/'); + QString name = fi.baseName().toLower(); + QString ext = fi.completeSuffix(); + if (!ext.isEmpty()) + ext = QString(QLatin1Char('.')) + ext; + return finalPath + name + ext; } QString CppToolsJsExtension::classToHeaderGuard(const QString &klass, const QString &extension) const diff --git a/src/plugins/cpptools/cpptoolsjsextension.h b/src/plugins/cpptools/cpptoolsjsextension.h index 16a4010f78..b528191033 100644 --- a/src/plugins/cpptools/cpptoolsjsextension.h +++ b/src/plugins/cpptools/cpptoolsjsextension.h @@ -45,12 +45,11 @@ public: // Generate header guard: Q_INVOKABLE QString headerGuard(const QString &in) const; - // Fix the filename casing as configured in C++/File Naming: - Q_INVOKABLE QString fileName(const QString &path, const QString &extension) const; - // Work with classes: Q_INVOKABLE QStringList namespaces(const QString &klass) const; + Q_INVOKABLE bool hasNamespaces(const QString &klass) const; Q_INVOKABLE QString className(const QString &klass) const; + // Fix the filename casing as configured in C++/File Naming: Q_INVOKABLE QString classToFileName(const QString &klass, const QString &extension) const; Q_INVOKABLE QString classToHeaderGuard(const QString &klass, const QString &extension) const; diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp index d2ca6d5d0b..be52ced3f1 100644 --- a/src/plugins/cpptools/cpptoolsplugin.cpp +++ b/src/plugins/cpptools/cpptoolsplugin.cpp @@ -130,9 +130,9 @@ void CppToolsPlugin::clearHeaderSourceCache() m_headerSourceMapping.clear(); } -Utils::FileName CppToolsPlugin::licenseTemplatePath() +Utils::FilePath CppToolsPlugin::licenseTemplatePath() { - return Utils::FileName::fromString(m_instance->m_fileSettings->licenseTemplatePath); + return Utils::FilePath::fromString(m_instance->m_fileSettings->licenseTemplatePath); } QString CppToolsPlugin::licenseTemplate() @@ -172,7 +172,7 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error) d = new CppToolsPluginPrivate; - JsExpander::registerQObjectForJs(QLatin1String("Cpp"), new CppToolsJsExtension); + JsExpander::registerGlobalObject<CppToolsJsExtension>("Cpp"); // Menus ActionContainer *mtools = ActionManager::actionContainer(Core::Constants::M_TOOLS); @@ -256,7 +256,7 @@ static QStringList findFilesInProject(const QString &name, QString pattern = QString(1, QLatin1Char('/')); pattern += name; const QStringList projectFiles - = Utils::transform(project->files(ProjectExplorer::Project::AllFiles), &Utils::FileName::toString); + = Utils::transform(project->files(ProjectExplorer::Project::AllFiles), &Utils::FilePath::toString); const QStringList::const_iterator pcend = projectFiles.constEnd(); QStringList candidateList; for (QStringList::const_iterator it = projectFiles.constBegin(); it != pcend; ++it) { diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h index 84e43da383..d319c9eb1e 100644 --- a/src/plugins/cpptools/cpptoolsplugin.h +++ b/src/plugins/cpptools/cpptoolsplugin.h @@ -36,7 +36,7 @@ class QFileInfo; class QDir; QT_END_NAMESPACE -namespace Utils { class FileName; } +namespace Utils { class FilePath; } namespace CppTools { @@ -63,7 +63,7 @@ public: static const QStringList &headerPrefixes(); static const QStringList &sourcePrefixes(); static void clearHeaderSourceCache(); - static Utils::FileName licenseTemplatePath(); + static Utils::FilePath licenseTemplatePath(); static QString licenseTemplate(); static bool usePragmaOnce(); diff --git a/src/plugins/cpptools/cpptoolsreuse.cpp b/src/plugins/cpptools/cpptoolsreuse.cpp index 9bcf806b7d..0d186f8421 100644 --- a/src/plugins/cpptools/cpptoolsreuse.cpp +++ b/src/plugins/cpptools/cpptoolsreuse.cpp @@ -323,20 +323,10 @@ bool fileSizeExceedsLimit(const QFileInfo &fileInfo, int sizeLimitInMb) "C++ Indexer: Skipping file \"%1\" because it is too big.") .arg(absoluteFilePath); -#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) QMetaObject::invokeMethod(Core::MessageManager::instance(), [msg]() { Core::MessageManager::write(msg, Core::MessageManager::Silent); }); -#else - QMetaObject::invokeMethod(Core::MessageManager::instance(), - "write", - Qt::QueuedConnection, - Q_ARG(QString, msg), - Q_ARG(Core::MessageManager::PrintToOutputPaneFlags, - Core::MessageManager::Silent)); -#endif - - qWarning().noquote() << msg; + return true; } diff --git a/src/plugins/cpptools/cpptoolstestcase.cpp b/src/plugins/cpptools/cpptoolstestcase.cpp index 2b6d794955..5ed334b2e8 100644 --- a/src/plugins/cpptools/cpptoolstestcase.cpp +++ b/src/plugins/cpptools/cpptoolstestcase.cpp @@ -340,8 +340,8 @@ static bool copyRecursively(const QString &sourceDirPath, return file.setPermissions(file.permissions() | QFile::WriteUser); }; - return Utils::FileUtils::copyRecursively(Utils::FileName::fromString(sourceDirPath), - Utils::FileName::fromString(targetDirPath), + return Utils::FileUtils::copyRecursively(Utils::FilePath::fromString(sourceDirPath), + Utils::FilePath::fromString(targetDirPath), error, copyHelper); } diff --git a/src/plugins/cpptools/cppworkingcopy.h b/src/plugins/cpptools/cppworkingcopy.h index 6c9e74caa8..1477720553 100644 --- a/src/plugins/cpptools/cppworkingcopy.h +++ b/src/plugins/cpptools/cppworkingcopy.h @@ -41,43 +41,43 @@ public: WorkingCopy(); void insert(const QString &fileName, const QByteArray &source, unsigned revision = 0) - { insert(Utils::FileName::fromString(fileName), source, revision); } + { insert(Utils::FilePath::fromString(fileName), source, revision); } - void insert(const Utils::FileName &fileName, const QByteArray &source, unsigned revision = 0) + void insert(const Utils::FilePath &fileName, const QByteArray &source, unsigned revision = 0) { _elements.insert(fileName, qMakePair(source, revision)); } bool contains(const QString &fileName) const - { return contains(Utils::FileName::fromString(fileName)); } + { return contains(Utils::FilePath::fromString(fileName)); } - bool contains(const Utils::FileName &fileName) const + bool contains(const Utils::FilePath &fileName) const { return _elements.contains(fileName); } QByteArray source(const QString &fileName) const - { return source(Utils::FileName::fromString(fileName)); } + { return source(Utils::FilePath::fromString(fileName)); } - QByteArray source(const Utils::FileName &fileName) const + QByteArray source(const Utils::FilePath &fileName) const { return _elements.value(fileName).first; } unsigned revision(const QString &fileName) const - { return revision(Utils::FileName::fromString(fileName)); } + { return revision(Utils::FilePath::fromString(fileName)); } - unsigned revision(const Utils::FileName &fileName) const + unsigned revision(const Utils::FilePath &fileName) const { return _elements.value(fileName).second; } QPair<QByteArray, unsigned> get(const QString &fileName) const - { return get(Utils::FileName::fromString(fileName)); } + { return get(Utils::FilePath::fromString(fileName)); } - QPair<QByteArray, unsigned> get(const Utils::FileName &fileName) const + QPair<QByteArray, unsigned> get(const Utils::FilePath &fileName) const { return _elements.value(fileName); } - QHashIterator<Utils::FileName, QPair<QByteArray, unsigned> > iterator() const - { return QHashIterator<Utils::FileName, QPair<QByteArray, unsigned> >(_elements); } + QHashIterator<Utils::FilePath, QPair<QByteArray, unsigned> > iterator() const + { return QHashIterator<Utils::FilePath, QPair<QByteArray, unsigned> >(_elements); } int size() const { return _elements.size(); } private: - using Table = QHash<Utils::FileName, QPair<QByteArray, unsigned> >; + using Table = QHash<Utils::FilePath, QPair<QByteArray, unsigned> >; Table _elements; }; diff --git a/src/plugins/cpptools/cursorineditor.h b/src/plugins/cpptools/cursorineditor.h index 18097e5dbd..b84633d9bc 100644 --- a/src/plugins/cpptools/cursorineditor.h +++ b/src/plugins/cpptools/cursorineditor.h @@ -36,7 +36,7 @@ namespace CppTools { class CursorInEditor { public: - CursorInEditor(const QTextCursor &cursor, const Utils::FileName &filePath, + CursorInEditor(const QTextCursor &cursor, const Utils::FilePath &filePath, CppEditorWidgetInterface *editorWidget = nullptr) : m_cursor(cursor) , m_filePath(filePath) @@ -44,10 +44,10 @@ public: {} CppEditorWidgetInterface *editorWidget() const { return m_editorWidget; } const QTextCursor &cursor() const { return m_cursor; } - const Utils::FileName &filePath() const { return m_filePath; } + const Utils::FilePath &filePath() const { return m_filePath; } private: QTextCursor m_cursor; - Utils::FileName m_filePath; + Utils::FilePath m_filePath; CppEditorWidgetInterface *m_editorWidget = nullptr; }; diff --git a/src/plugins/cpptools/doxygengenerator.cpp b/src/plugins/cpptools/doxygengenerator.cpp index 764930cbc9..c11cb4d7cb 100644 --- a/src/plugins/cpptools/doxygengenerator.cpp +++ b/src/plugins/cpptools/doxygengenerator.cpp @@ -76,7 +76,7 @@ static int lineBeforeCursor(const QTextCursor &cursor) QString DoxygenGenerator::generate(QTextCursor cursor, const CPlusPlus::Snapshot &snapshot, - const Utils::FileName &documentFilePath) + const Utils::FilePath &documentFilePath) { const QTextCursor initialCursor = cursor; diff --git a/src/plugins/cpptools/doxygengenerator.h b/src/plugins/cpptools/doxygengenerator.h index 780525b65e..7448b12345 100644 --- a/src/plugins/cpptools/doxygengenerator.h +++ b/src/plugins/cpptools/doxygengenerator.h @@ -33,7 +33,7 @@ QT_FORWARD_DECLARE_CLASS(QTextCursor) namespace CPlusPlus { class DeclarationAST; } namespace CPlusPlus { class Snapshot; } -namespace Utils { class FileName; } +namespace Utils { class FilePath; } namespace CppTools { @@ -56,7 +56,7 @@ public: QString generate(QTextCursor cursor, const CPlusPlus::Snapshot &snapshot, - const Utils::FileName &documentFilePath); + const Utils::FilePath &documentFilePath); QString generate(QTextCursor cursor, CPlusPlus::DeclarationAST *decl); private: diff --git a/src/plugins/cpptools/generatedcodemodelsupport.cpp b/src/plugins/cpptools/generatedcodemodelsupport.cpp index a779e38718..85825ae9ef 100644 --- a/src/plugins/cpptools/generatedcodemodelsupport.cpp +++ b/src/plugins/cpptools/generatedcodemodelsupport.cpp @@ -69,7 +69,7 @@ private: GeneratedCodeModelSupport::GeneratedCodeModelSupport(CppModelManager *modelmanager, ProjectExplorer::ExtraCompiler *generator, - const Utils::FileName &generatedFile) : + const Utils::FilePath &generatedFile) : CppTools::AbstractEditorSupport(modelmanager, generator), m_generatedFileName(generatedFile), m_generator(generator) { @@ -90,7 +90,7 @@ GeneratedCodeModelSupport::~GeneratedCodeModelSupport() qCDebug(log) << "dtor ~generatedcodemodelsupport for" << m_generatedFileName; } -void GeneratedCodeModelSupport::onContentsChanged(const Utils::FileName &file) +void GeneratedCodeModelSupport::onContentsChanged(const Utils::FilePath &file) { if (file == m_generatedFileName) { notifyAboutUpdatedContents(); @@ -124,7 +124,7 @@ void GeneratedCodeModelSupport::update(const QList<ProjectExplorer::ExtraCompile continue; extraCompilerCache.insert(generator); - generator->forEachTarget([mm, generator](const Utils::FileName &generatedFile) { + generator->forEachTarget([mm, generator](const Utils::FilePath &generatedFile) { new GeneratedCodeModelSupport(mm, generator, generatedFile); }); } diff --git a/src/plugins/cpptools/generatedcodemodelsupport.h b/src/plugins/cpptools/generatedcodemodelsupport.h index 818d84e47c..0b471a1268 100644 --- a/src/plugins/cpptools/generatedcodemodelsupport.h +++ b/src/plugins/cpptools/generatedcodemodelsupport.h @@ -48,7 +48,7 @@ class CPPTOOLS_EXPORT GeneratedCodeModelSupport : public AbstractEditorSupport public: GeneratedCodeModelSupport(CppModelManager *modelmanager, ProjectExplorer::ExtraCompiler *generator, - const Utils::FileName &generatedFile); + const Utils::FilePath &generatedFile); ~GeneratedCodeModelSupport() override; /// \returns the contents encoded in UTF-8. @@ -59,8 +59,8 @@ public: static void update(const QList<ProjectExplorer::ExtraCompiler *> &generators); private: - void onContentsChanged(const Utils::FileName &file); - Utils::FileName m_generatedFileName; + void onContentsChanged(const Utils::FilePath &file); + Utils::FilePath m_generatedFileName; ProjectExplorer::ExtraCompiler *m_generator; }; diff --git a/src/plugins/cpptools/headerpathfilter.cpp b/src/plugins/cpptools/headerpathfilter.cpp index b514c468d7..e2d1e6a4ca 100644 --- a/src/plugins/cpptools/headerpathfilter.cpp +++ b/src/plugins/cpptools/headerpathfilter.cpp @@ -29,6 +29,8 @@ #include <coreplugin/icore.h> #endif +#include <projectexplorer/project.h> + #include <QRegularExpression> namespace CppTools { @@ -41,6 +43,8 @@ void HeaderPathFilter::process() { const HeaderPaths &headerPaths = projectPart.headerPaths; + addPreIncludesPath(); + for (const HeaderPath &headerPath : headerPaths) filterHeaderPath(headerPath); @@ -141,6 +145,17 @@ void HeaderPathFilter::tweakHeaderPaths() } } +void HeaderPathFilter::addPreIncludesPath() +{ + if (projectDirectory.size()) { + const Utils::FilePath rootProjectDirectory = Utils::FilePath::fromString(projectDirectory) + .pathAppended(".pre_includes"); + + systemHeaderPaths.push_back( + {rootProjectDirectory.toString(), ProjectExplorer::HeaderPathType::System}); + } +} + QString HeaderPathFilter::ensurePathWithSlashEnding(const QString &path) { QString pathWithSlashEnding = path; diff --git a/src/plugins/cpptools/headerpathfilter.h b/src/plugins/cpptools/headerpathfilter.h index 8b4e771994..20fbc020e8 100644 --- a/src/plugins/cpptools/headerpathfilter.h +++ b/src/plugins/cpptools/headerpathfilter.h @@ -53,6 +53,8 @@ private: void tweakHeaderPaths(); + void addPreIncludesPath(); + bool isProjectHeaderPath(const QString &path) const; static QString ensurePathWithSlashEnding(const QString &path); diff --git a/src/plugins/cpptools/indexitem.cpp b/src/plugins/cpptools/indexitem.cpp index 1a07d9eada..161a7555cd 100644 --- a/src/plugins/cpptools/indexitem.cpp +++ b/src/plugins/cpptools/indexitem.cpp @@ -88,7 +88,7 @@ QString IndexItem::representDeclaration() const QString IndexItem::shortNativeFilePath() const { - return Utils::FileUtils::shortNativePath(Utils::FileName::fromString(m_fileName)); + return Utils::FilePath::fromString(m_fileName).shortNativePath(); } void IndexItem::squeeze() diff --git a/src/plugins/cpptools/modelmanagertesthelper.cpp b/src/plugins/cpptools/modelmanagertesthelper.cpp index 83e27fb237..f1029be36b 100644 --- a/src/plugins/cpptools/modelmanagertesthelper.cpp +++ b/src/plugins/cpptools/modelmanagertesthelper.cpp @@ -37,7 +37,7 @@ using namespace CppTools::Internal; using namespace CppTools::Tests; TestProject::TestProject(const QString &name, QObject *parent) : - ProjectExplorer::Project("x-binary/foo", Utils::FileName()), + ProjectExplorer::Project("x-binary/foo", Utils::FilePath()), m_name(name) { setParent(parent); diff --git a/src/plugins/cpptools/symbolsfindfilter.cpp b/src/plugins/cpptools/symbolsfindfilter.cpp index f6bc1f52ba..93f4643587 100644 --- a/src/plugins/cpptools/symbolsfindfilter.cpp +++ b/src/plugins/cpptools/symbolsfindfilter.cpp @@ -119,7 +119,7 @@ void SymbolsFindFilter::findAll(const QString &txt, FindFlags findFlags) parameters.flags = findFlags; parameters.types = m_symbolsToSearch; parameters.scope = m_scope; - search->setUserData(qVariantFromValue(parameters)); + search->setUserData(QVariant::fromValue(parameters)); startSearch(search); } @@ -129,7 +129,7 @@ void SymbolsFindFilter::startSearch(SearchResult *search) QSet<QString> projectFileNames; if (parameters.scope == SymbolSearcher::SearchProjectsOnly) { for (ProjectExplorer::Project *project : ProjectExplorer::SessionManager::projects()) - projectFileNames += Utils::transform(project->files(ProjectExplorer::Project::AllFiles), &Utils::FileName::toString).toSet(); + projectFileNames += Utils::transform(project->files(ProjectExplorer::Project::AllFiles), &Utils::FilePath::toString).toSet(); } auto watcher = new QFutureWatcher<SearchResultItem>; diff --git a/src/plugins/cpptools/typehierarchybuilder.cpp b/src/plugins/cpptools/typehierarchybuilder.cpp index e54b546068..aee41076d7 100644 --- a/src/plugins/cpptools/typehierarchybuilder.cpp +++ b/src/plugins/cpptools/typehierarchybuilder.cpp @@ -193,9 +193,9 @@ QStringList TypeHierarchyBuilder::filesDependingOn(CPlusPlus::Symbol *symbol) co if (!symbol) return deps; - Utils::FileName file = Utils::FileName::fromUtf8(symbol->fileName(), symbol->fileNameLength()); + Utils::FilePath file = Utils::FilePath::fromUtf8(symbol->fileName(), symbol->fileNameLength()); deps << file.toString(); - foreach (const Utils::FileName &fileName, _snapshot.filesDependingOn(file)) + foreach (const Utils::FilePath &fileName, _snapshot.filesDependingOn(file)) deps.append(fileName.toString()); return deps; } |