aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/pythoneditor
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-03-05 10:22:45 +0100
committerEike Ziller <eike.ziller@qt.io>2019-03-05 10:22:45 +0100
commit0619de868110586e8a6561ecbc1d62c80da09501 (patch)
tree1a4364a3660f57d5f10ac5a7471d30e3f555c5f4 /src/plugins/pythoneditor
parent44886ad65a2226511a6b9a4383189e4ab804e47f (diff)
parent26f6cbf8b59dffa7f47b315031b7055ec3421315 (diff)
Merge remote-tracking branch 'origin/4.9'
Conflicts: qbs/modules/qtc/qtc.qbs qtcreator.pri src/tools/clangpchmanagerbackend/source/taskscheduler.h Change-Id: I518adaf647df412887c2a372416634359f09ad2a
Diffstat (limited to 'src/plugins/pythoneditor')
-rw-r--r--src/plugins/pythoneditor/pythoneditorplugin.cpp56
1 files changed, 40 insertions, 16 deletions
diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp
index 9de4989a936..f85d248a537 100644
--- a/src/plugins/pythoneditor/pythoneditorplugin.cpp
+++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp
@@ -33,6 +33,7 @@
#include <coreplugin/documentmanager.h>
#include <coreplugin/fileiconprovider.h>
#include <coreplugin/id.h>
+#include <coreplugin/messagemanager.h>
#include <coreplugin/editormanager/editormanager.h>
#include <projectexplorer/buildtargetinfo.h>
@@ -61,6 +62,7 @@
#include <QTextCursor>
#include <QJsonDocument>
#include <QJsonObject>
+#include <QJsonParseError>
#include <QJsonValue>
#include <QJsonArray>
@@ -342,30 +344,48 @@ static QStringList readLines(const Utils::FileName &projectFile)
return lines;
}
-static QStringList readLinesJson(const Utils::FileName &projectFile)
+static QStringList readLinesJson(const Utils::FileName &projectFile,
+ QString *errorMessage)
{
const QString projectFileName = projectFile.fileName();
QStringList lines = { projectFileName };
QFile file(projectFile.toString());
- if (!file.open(QFile::ReadOnly))
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ *errorMessage = PythonProject::tr("Unable to open \"%1\" for reading: %2")
+ .arg(projectFile.toUserOutput(), file.errorString());
return lines;
+ }
+
const QByteArray content = file.readAll();
// This assumes te project file is formed with only one field called
// 'files' that has a list associated of the files to include in the project.
- if (!content.isEmpty()) {
- const QJsonDocument doc = QJsonDocument::fromJson(content);
- const QJsonObject obj = doc.object();
- if (obj.contains("files")) {
- QJsonValue files = obj.value("files");
- QJsonArray files_array = files.toArray();
- QSet<QString> visited;
- for (const auto &file : files_array)
- visited.insert(file.toString());
-
- lines.append(visited.toList());
- }
+ if (content.isEmpty()) {
+ *errorMessage = PythonProject::tr("Unable read \"%1\": The file is empty.")
+ .arg(projectFile.toUserOutput());
+ return lines;
+ }
+
+ QJsonParseError error;
+ const QJsonDocument doc = QJsonDocument::fromJson(content, &error);
+ if (doc.isNull()) {
+ const int line = content.left(error.offset).count('\n') + 1;
+ *errorMessage = PythonProject::tr("Unable parse %1:%2: %3")
+ .arg(projectFile.toUserOutput()).arg(line)
+ .arg(error.errorString());
+ return lines;
+ }
+
+ const QJsonObject obj = doc.object();
+ if (obj.contains("files")) {
+ QJsonValue files = obj.value("files");
+ QJsonArray files_array = files.toArray();
+ QSet<QString> visited;
+ for (const auto &file : files_array)
+ visited.insert(file.toString());
+
+ lines.append(visited.toList());
}
return lines;
@@ -451,8 +471,12 @@ void PythonProject::parseProject()
m_rawListEntries.clear();
const Utils::FileName filePath = projectFilePath();
// The PySide project file is JSON based
- if (filePath.endsWith(".pyproject"))
- m_rawFileList = readLinesJson(filePath);
+ if (filePath.endsWith(".pyproject")) {
+ QString errorMessage;
+ m_rawFileList = readLinesJson(filePath, &errorMessage);
+ if (!errorMessage.isEmpty())
+ Core::MessageManager::write(errorMessage);
+ }
// To keep compatibility with PyQt we keep the compatibility with plain
// text files as project files.
else if (filePath.endsWith(".pyqtc"))