aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Tillmanns <marcus.tillmanns@qt.io>2022-06-21 10:06:47 +0200
committerMarcus Tillmanns <marcus.tillmanns@qt.io>2022-06-21 13:33:19 +0000
commit627f6a2916f1a53cc2d5a775818b0d610d1dd9c0 (patch)
treea74dac7912d6e65c87ec42545c287106bdbc35ff
parentbbbae099a741ed1eaf305cae72452d1ae2ca0c4e (diff)
cppeditor: Show hints for qmlRegister... diagnostics
This fixes passing the hints from FindExportedCppTypes to the actual cppeditor so they can be displayed to the user. Fixes: QTCREATORBUG-27243 Change-Id: Ibcb68296f044a9c6a96f40945d8a0e964be7f042 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/libs/qmljs/qmljsfindexportedcpptypes.cpp2
-rw-r--r--src/libs/qmljs/qmljslink.cpp3
-rw-r--r--src/plugins/cppeditor/cppeditordocument.cpp51
-rw-r--r--src/plugins/cppeditor/cppeditordocument.h2
-rw-r--r--src/plugins/cppeditor/cppmodelmanager.cpp16
-rw-r--r--src/plugins/cppeditor/cppmodelmanager.h8
6 files changed, 80 insertions, 2 deletions
diff --git a/src/libs/qmljs/qmljsfindexportedcpptypes.cpp b/src/libs/qmljs/qmljsfindexportedcpptypes.cpp
index 40358b6c95..72a4cfad51 100644
--- a/src/libs/qmljs/qmljsfindexportedcpptypes.cpp
+++ b/src/libs/qmljs/qmljsfindexportedcpptypes.cpp
@@ -334,7 +334,7 @@ protected:
_doc->fileName(),
line, column,
QmlJS::FindExportedCppTypes::tr(
- "The module URI cannot be determined by static analysis. The type will be available\n"
+ "The module URI cannot be determined by static analysis. The type will not be available\n"
"globally in the QML editor. You can add a \"// @uri My.Module.Uri\" annotation to let\n"
"the QML editor know about a likely URI."));
}
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index fe3301db93..df881a09ab 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -465,7 +465,8 @@ Import LinkPrivate::importNonFile(const Document::Ptr &doc, const ImportInfo &im
"For Qbs projects, declare and set a qmlImportPaths property in your product "
"to add import paths.\n"
"For qmlproject projects, use the importPaths property to add import paths.\n"
- "For CMake projects, make sure QML_IMPORT_PATH variable is in CMakeCache.txt.\n")
+ "For CMake projects, make sure QML_IMPORT_PATH variable is in CMakeCache.txt.\n"
+ "For qmlRegister... calls, make sure that you define the Module URI as a string literal.\n")
.arg(importInfo.name(), m_importPaths.join(QLatin1Char('\n'))));
}
diff --git a/src/plugins/cppeditor/cppeditordocument.cpp b/src/plugins/cppeditor/cppeditordocument.cpp
index e7621e823e..80a8cce0bd 100644
--- a/src/plugins/cppeditor/cppeditordocument.cpp
+++ b/src/plugins/cppeditor/cppeditordocument.cpp
@@ -50,7 +50,9 @@
#include <utils/minimizableinfobars.h>
#include <utils/qtcassert.h>
#include <utils/runextensions.h>
+#include <utils/utilsicons.h>
+#include <QApplication>
#include <QTextDocument>
const char NO_PROJECT_CONFIGURATION[] = "NoProject";
@@ -121,6 +123,9 @@ CppEditorDocument::CppEditorDocument()
connect(this, &IDocument::filePathChanged,
this, &CppEditorDocument::onFilePathChanged);
+ connect(mm(), &CppModelManager::diagnosticsChanged,
+ this, &CppEditorDocument::onDiagnosticsChanged);
+
connect(&m_parseContextModel, &ParseContextModel::preferredParseContextChanged,
this, &CppEditorDocument::reparseWithPreferredParseContext);
@@ -483,5 +488,51 @@ bool CppEditorDocument::save(QString *errorString, const FilePath &filePath, boo
return TextEditor::TextDocument::save(errorString, filePath, autoSave);
}
+void CppEditorDocument::onDiagnosticsChanged(const QString &fileName, const QString &kind)
+{
+ if (FilePath::fromString(fileName) != filePath())
+ return;
+
+ TextMarks removedMarks = marks();
+
+ const Utils::Id category = Utils::Id::fromString(kind);
+
+ for (const auto &diagnostic : mm()->diagnosticMessages()) {
+ if (FilePath::fromString(diagnostic.fileName()) == filePath()) {
+ auto it = std::find_if(std::begin(removedMarks),
+ std::end(removedMarks),
+ [&category, &diagnostic](TextMark *existing) {
+ return (diagnostic.line() == existing->lineNumber()
+ && diagnostic.text() == existing->lineAnnotation()
+ && category == existing->category());
+ });
+
+ if (it != std::end(removedMarks)) {
+ removedMarks.erase(it);
+ continue;
+ }
+
+ auto mark = new TextMark(filePath(), diagnostic.line(), category);
+ mark->setLineAnnotation(diagnostic.text());
+ mark->setToolTip(diagnostic.text());
+
+ mark->setIcon(diagnostic.isWarning() ? Utils::Icons::CODEMODEL_WARNING.icon()
+ : Utils::Icons::CODEMODEL_ERROR.icon());
+ mark->setColor(diagnostic.isWarning() ? Utils::Theme::CodeModel_Warning_TextMarkColor
+ : Utils::Theme::CodeModel_Error_TextMarkColor);
+ mark->setPriority(diagnostic.isWarning() ? TextEditor::TextMark::NormalPriority
+ : TextEditor::TextMark::HighPriority);
+ addMark(mark);
+ }
+ }
+
+ for (auto it = removedMarks.begin(); it != removedMarks.end(); ++it) {
+ if ((*it)->category() == category) {
+ removeMark(*it);
+ delete *it;
+ }
+ }
+}
+
} // namespace Internal
} // namespace CppEditor
diff --git a/src/plugins/cppeditor/cppeditordocument.h b/src/plugins/cppeditor/cppeditordocument.h
index 54009a04eb..09d5ab96b6 100644
--- a/src/plugins/cppeditor/cppeditordocument.h
+++ b/src/plugins/cppeditor/cppeditordocument.h
@@ -94,6 +94,8 @@ private:
void onAboutToReload();
void onReloadFinished();
+ void onDiagnosticsChanged(const QString &fileName, const QString &kind);
+
void reparseWithPreferredParseContext(const QString &id);
diff --git a/src/plugins/cppeditor/cppmodelmanager.cpp b/src/plugins/cppeditor/cppmodelmanager.cpp
index f646631a90..7bbf588383 100644
--- a/src/plugins/cppeditor/cppmodelmanager.cpp
+++ b/src/plugins/cppeditor/cppmodelmanager.cpp
@@ -201,6 +201,8 @@ public:
std::unique_ptr<Core::ILocatorFilter> m_functionsFilter;
std::unique_ptr<Core::IFindFilter> m_symbolsFindFilter;
std::unique_ptr<Core::ILocatorFilter> m_currentDocumentFilter;
+
+ QList<Document::DiagnosticMessage> m_diagnosticMessages;
};
} // namespace Internal
@@ -1704,4 +1706,18 @@ QThreadPool *CppModelManager::sharedThreadPool()
return &d->m_threadPool;
}
+bool CppModelManager::setExtraDiagnostics(const QString &fileName,
+ const QString &kind,
+ const QList<Document::DiagnosticMessage> &diagnostics)
+{
+ d->m_diagnosticMessages = diagnostics;
+ emit diagnosticsChanged(fileName, kind);
+ return true;
+}
+
+const QList<Document::DiagnosticMessage> CppModelManager::diagnosticMessages()
+{
+ return d->m_diagnosticMessages;
+}
+
} // namespace CppEditor
diff --git a/src/plugins/cppeditor/cppmodelmanager.h b/src/plugins/cppeditor/cppmodelmanager.h
index 3526bb5fbe..efccd52119 100644
--- a/src/plugins/cppeditor/cppmodelmanager.h
+++ b/src/plugins/cppeditor/cppmodelmanager.h
@@ -104,6 +104,12 @@ public:
QByteArray codeModelConfiguration() const;
CppLocatorData *locatorData() const;
+ bool setExtraDiagnostics(const QString &fileName,
+ const QString &kind,
+ const QList<Document::DiagnosticMessage> &diagnostics) override;
+
+ const QList<Document::DiagnosticMessage> diagnosticMessages();
+
QList<ProjectInfo::ConstPtr> projectInfos() const;
ProjectInfo::ConstPtr projectInfo(ProjectExplorer::Project *project) const;
QFuture<void> updateProjectInfo(const ProjectInfo::ConstPtr &newProjectInfo,
@@ -256,6 +262,8 @@ signals:
void abstractEditorSupportRemoved(const QString &filePath);
void fallbackProjectPartUpdated();
+ void diagnosticsChanged(const QString &fileName, const QString &kind);
+
public slots:
void updateModifiedSourceFiles();
void GC();