// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "clangeditordocumentprocessor.h" #include "clangmodelmanagersupport.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace ClangCodeModel { namespace Internal { ClangEditorDocumentProcessor::ClangEditorDocumentProcessor(TextEditor::TextDocument *document) : BuiltinEditorDocumentProcessor(document), m_document(*document) { connect(parser().data(), &CppEditor::BaseEditorDocumentParser::projectPartInfoUpdated, this, &BaseEditorDocumentProcessor::projectPartInfoUpdated); connect(static_cast(parser().data()), &CppEditor::BuiltinEditorDocumentParser::finished, this, [this] { emit parserConfigChanged(filePath(), parserConfig()); }); setSemanticHighlightingChecker([this] { return !ClangModelManagerSupport::clientForFile(m_document.filePath()); }); } void ClangEditorDocumentProcessor::semanticRehighlight() { const auto matchesEditor = [this](const Core::IEditor *editor) { return editor->document()->filePath() == m_document.filePath(); }; if (!Utils::contains(Core::EditorManager::visibleEditors(), matchesEditor)) return; if (ClangModelManagerSupport::clientForFile(m_document.filePath())) return; BuiltinEditorDocumentProcessor::semanticRehighlight(); } bool ClangEditorDocumentProcessor::hasProjectPart() const { return !m_projectPart.isNull(); } CppEditor::ProjectPart::ConstPtr ClangEditorDocumentProcessor::projectPart() const { return m_projectPart; } void ClangEditorDocumentProcessor::clearProjectPart() { m_projectPart.clear(); } ::Utils::Id ClangEditorDocumentProcessor::diagnosticConfigId() const { return m_diagnosticConfigId; } void ClangEditorDocumentProcessor::setParserConfig( const CppEditor::BaseEditorDocumentParser::Configuration &config) { CppEditor::BuiltinEditorDocumentProcessor::setParserConfig(config); emit parserConfigChanged(filePath(), config); } CppEditor::BaseEditorDocumentParser::Configuration ClangEditorDocumentProcessor::parserConfig() { return parser()->configuration(); } ClangEditorDocumentProcessor *ClangEditorDocumentProcessor::get(const Utils::FilePath &filePath) { return qobject_cast( CppEditor::CppModelManager::cppEditorDocumentProcessor(filePath)); } } // namespace Internal } // namespace ClangCodeModel