forked from qt-creator/qt-creator
QmlDesigner: NodeMetaInfo can now get exported type names
You can get all exported names. That can the C++ names too for C++ types. If you only want the types name which are imported in a document you can provide the source id for the document and get only that. If there are different version exports you get them too. Task-number: QDS-10274 Change-Id: Iefc0b68ebfd65998cf0481961f8c7643cdf9e5b9 Reviewed-by: Vikas Pachdha <vikas.pachdha@qt.io>
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
#include <documentmessage.h>
|
||||
#include <model/modelresourcemanagementinterface.h>
|
||||
#include <projectstorage/projectstoragefwd.h>
|
||||
#include <projectstorageids.h>
|
||||
|
||||
#include <QMimeData>
|
||||
#include <QObject>
|
||||
@@ -112,6 +113,7 @@ public:
|
||||
}
|
||||
|
||||
QUrl fileUrl() const;
|
||||
SourceId fileUrlSourceId() const;
|
||||
void setFileUrl(const QUrl &url);
|
||||
|
||||
const MetaInfo metaInfo() const;
|
||||
|
@@ -76,6 +76,9 @@ public:
|
||||
int majorVersion() const;
|
||||
int minorVersion() const;
|
||||
|
||||
Storage::Info::ExportedTypeNames allExportedTypeNames() const;
|
||||
Storage::Info::ExportedTypeNames exportedTypeNamesForSourceId(SourceId sourceId) const;
|
||||
|
||||
SourceId sourceId() const;
|
||||
QString componentFileName() const;
|
||||
|
||||
|
@@ -1688,6 +1688,28 @@ int NodeMetaInfo::minorVersion() const
|
||||
return -1;
|
||||
}
|
||||
|
||||
Storage::Info::ExportedTypeNames NodeMetaInfo::allExportedTypeNames() const
|
||||
{
|
||||
if constexpr (useProjectStorage()) {
|
||||
if (isValid()) {
|
||||
return m_projectStorage->exportedTypeNames(m_typeId);
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
Storage::Info::ExportedTypeNames NodeMetaInfo::exportedTypeNamesForSourceId(SourceId sourceId) const
|
||||
{
|
||||
if constexpr (useProjectStorage()) {
|
||||
if (isValid()) {
|
||||
return m_projectStorage->exportedTypeNames(m_typeId, sourceId);
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
SourceId NodeMetaInfo::sourceId() const
|
||||
{
|
||||
if constexpr (useProjectStorage()) {
|
||||
|
@@ -1970,6 +1970,11 @@ QUrl Model::fileUrl() const
|
||||
return d->fileUrl();
|
||||
}
|
||||
|
||||
SourceId Model::fileUrlSourceId() const
|
||||
{
|
||||
return d->m_sourceId;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Sets the URL against which relative URLs within the model should be resolved.
|
||||
\param url the base URL, i.e. the qml file path.
|
||||
|
@@ -133,20 +133,20 @@ namespace QmlDesigner::Storage::Info {
|
||||
class ExportedTypeName
|
||||
{
|
||||
public:
|
||||
explicit ExportedTypeName() = default;
|
||||
ExportedTypeName() = default;
|
||||
|
||||
explicit ExportedTypeName(ModuleId moduleId,
|
||||
::Utils::SmallStringView name,
|
||||
Storage::Version version = Storage::Version{})
|
||||
ExportedTypeName(ModuleId moduleId,
|
||||
::Utils::SmallStringView name,
|
||||
Storage::Version version = Storage::Version{})
|
||||
: name{name}
|
||||
, version{version}
|
||||
, moduleId{moduleId}
|
||||
{}
|
||||
|
||||
explicit ExportedTypeName(ModuleId moduleId,
|
||||
::Utils::SmallStringView name,
|
||||
int majorVersion,
|
||||
int minorVersion)
|
||||
ExportedTypeName(ModuleId moduleId,
|
||||
::Utils::SmallStringView name,
|
||||
int majorVersion,
|
||||
int minorVersion)
|
||||
: name{name}
|
||||
, version{majorVersion, minorVersion}
|
||||
, moduleId{moduleId}
|
||||
|
@@ -3,8 +3,9 @@
|
||||
|
||||
#include "../utils/googletest.h"
|
||||
|
||||
#include "../mocks/projectstoragemock.h"
|
||||
#include "../mocks/sourcepathcachemock.h"
|
||||
#include <matchers/info_exportedtypenames-matcher.h>
|
||||
#include <mocks/projectstoragemock.h>
|
||||
#include <mocks/sourcepathcachemock.h>
|
||||
|
||||
#include <designercore/include/model.h>
|
||||
#include <designercore/include/modelnode.h>
|
||||
@@ -2231,4 +2232,72 @@ TEST_F(NodeMetaInfo, default_is_not_enumeration)
|
||||
|
||||
ASSERT_THAT(isType, IsFalse());
|
||||
}
|
||||
|
||||
TEST_F(NodeMetaInfo, all_external_type_names)
|
||||
{
|
||||
QmlDesigner::Storage::Info::ExportedTypeNames names{{qmlModuleId, "Object", 2, -1},
|
||||
{qmlModuleId, "Obj", 2, 1}};
|
||||
auto metaInfo = createMetaInfo("QML", "Foo");
|
||||
ON_CALL(projectStorageMock, exportedTypeNames(metaInfo.id())).WillByDefault(Return(names));
|
||||
|
||||
auto exportedTypeNames = metaInfo.allExportedTypeNames();
|
||||
|
||||
ASSERT_THAT(exportedTypeNames,
|
||||
UnorderedElementsAre(IsInfoExportTypeNames(qmlModuleId, "Object", 2, -1),
|
||||
IsInfoExportTypeNames(qmlModuleId, "Obj", 2, 1)));
|
||||
}
|
||||
|
||||
TEST_F(NodeMetaInfo, default_has_no_external_type_names)
|
||||
{
|
||||
QmlDesigner::Storage::Info::ExportedTypeNames names{{qmlModuleId, "Object", 2, -1},
|
||||
{qmlModuleId, "Obj", 2, 1}};
|
||||
QmlDesigner::NodeMetaInfo metaInfo;
|
||||
ON_CALL(projectStorageMock, exportedTypeNames(_)).WillByDefault(Return(names));
|
||||
|
||||
auto exportedTypeNames = metaInfo.allExportedTypeNames();
|
||||
|
||||
ASSERT_THAT(exportedTypeNames, IsEmpty());
|
||||
}
|
||||
|
||||
TEST_F(NodeMetaInfo, external_type_names_for_source_id)
|
||||
{
|
||||
QmlDesigner::Storage::Info::ExportedTypeNames names{{qmlModuleId, "Object", 2, -1},
|
||||
{qmlModuleId, "Obj", 2, 1}};
|
||||
auto metaInfo = createMetaInfo("QML", "Foo");
|
||||
ON_CALL(projectStorageMock, exportedTypeNames(metaInfo.id(), model.fileUrlSourceId()))
|
||||
.WillByDefault(Return(names));
|
||||
|
||||
auto exportedTypeNames = metaInfo.exportedTypeNamesForSourceId(model.fileUrlSourceId());
|
||||
|
||||
ASSERT_THAT(exportedTypeNames,
|
||||
UnorderedElementsAre(IsInfoExportTypeNames(qmlModuleId, "Object", 2, -1),
|
||||
IsInfoExportTypeNames(qmlModuleId, "Obj", 2, 1)));
|
||||
}
|
||||
|
||||
TEST_F(NodeMetaInfo, default_has_no_external_type_names_for_source_id)
|
||||
{
|
||||
QmlDesigner::Storage::Info::ExportedTypeNames names{{qmlModuleId, "Object", 2, -1},
|
||||
{qmlModuleId, "Obj", 2, 1}};
|
||||
QmlDesigner::NodeMetaInfo metaInfo;
|
||||
ON_CALL(projectStorageMock, exportedTypeNames(metaInfo.id(), model.fileUrlSourceId()))
|
||||
.WillByDefault(Return(names));
|
||||
|
||||
auto exportedTypeNames = metaInfo.exportedTypeNamesForSourceId(model.fileUrlSourceId());
|
||||
|
||||
ASSERT_THAT(exportedTypeNames, IsEmpty());
|
||||
}
|
||||
|
||||
TEST_F(NodeMetaInfo, invalid_source_id_has_no_external_type_names_for_source_id)
|
||||
{
|
||||
QmlDesigner::Storage::Info::ExportedTypeNames names{{qmlModuleId, "Object", 2, -1},
|
||||
{qmlModuleId, "Obj", 2, 1}};
|
||||
auto metaInfo = createMetaInfo("QML", "Foo");
|
||||
ON_CALL(projectStorageMock, exportedTypeNames(metaInfo.id(), model.fileUrlSourceId()))
|
||||
.WillByDefault(Return(names));
|
||||
QmlDesigner::SourceId sourceId;
|
||||
|
||||
auto exportedTypeNames = metaInfo.exportedTypeNamesForSourceId(sourceId);
|
||||
|
||||
ASSERT_THAT(exportedTypeNames, IsEmpty());
|
||||
}
|
||||
} // namespace
|
||||
|
Reference in New Issue
Block a user