From ccbee9bf42a934a81ac06181e09a77b530ee765e Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Fri, 3 Feb 2023 12:36:49 +0100 Subject: [PATCH] qmldir parser: Handle internal types with versions There is no reason why internal types cannot have versions. Fixes: QTCREATORBUG-28755 Change-Id: I419f2e052634b603dfc5b2bfff155167cf6f9304 Reviewed-by: Semih Yavuz Reviewed-by: hjk Reviewed-by: Eike Ziller Reviewed-by: Fabian Kosmale --- src/libs/qmljs/parser/qmldirparser.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/libs/qmljs/parser/qmldirparser.cpp b/src/libs/qmljs/parser/qmldirparser.cpp index 31bf4b9ca95..cef756f1b9f 100644 --- a/src/libs/qmljs/parser/qmldirparser.cpp +++ b/src/libs/qmljs/parser/qmldirparser.cpp @@ -268,14 +268,28 @@ bool QmlDirParser::parse(const QString &source) _classNames.append(sections[1]); } else if (sections[0] == QLatin1String("internal")) { - if (sectionCount != 3) { + if (sectionCount == 3) { + Component entry(sections[1], sections[2], -1, -1); + entry.internal = true; + _components.insert(entry.typeName, entry); + } else if (sectionCount == 4) { + int major, minor; + if (parseVersion(sections[2], &major, &minor)) { + Component entry(sections[1], sections[3], major, minor); + entry.internal = true; + _components.insert(entry.typeName, entry); + } else { + reportError(lineNumber, 0, + QStringLiteral("invalid version %1, expected .") + .arg(sections[2])); + continue; + } + } else { reportError(lineNumber, 0, - QStringLiteral("internal types require 2 arguments, but %1 were provided").arg(sectionCount - 1)); + QStringLiteral("internal types require 2 or 3 arguments, " + "but %1 were provided").arg(sectionCount - 1)); continue; } - Component entry(sections[1], sections[2], -1, -1); - entry.internal = true; - _components.insert(entry.typeName, entry); } else if (sections[0] == QLatin1String("singleton")) { if (sectionCount < 3 || sectionCount > 4) { reportError(lineNumber, 0,