forked from qt-creator/qt-creator
QmlDesigner: Improve ownership of QmlProjectItem
Change-Id: Ibfe4b0b5314dada85a601a8f27003af135df78f1 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -15,8 +15,7 @@
|
||||
|
||||
namespace QmlProjectManager {
|
||||
|
||||
FileFilterBaseItem::FileFilterBaseItem(QObject *parent) :
|
||||
QmlProjectContentItem(parent)
|
||||
FileFilterBaseItem::FileFilterBaseItem()
|
||||
{
|
||||
m_updateFileListTimer.setSingleShot(true);
|
||||
m_updateFileListTimer.setInterval(50);
|
||||
@@ -271,8 +270,7 @@ QSet<QString> FileFilterBaseItem::filesInSubTree(const QDir &rootDir, const QDir
|
||||
return fileSet;
|
||||
}
|
||||
|
||||
ImageFileFilterItem::ImageFileFilterItem(QObject *parent)
|
||||
: FileFilterBaseItem(parent)
|
||||
ImageFileFilterItem::ImageFileFilterItem()
|
||||
{
|
||||
QString filter;
|
||||
// supported image formats according to
|
||||
@@ -284,8 +282,7 @@ ImageFileFilterItem::ImageFileFilterItem(QObject *parent)
|
||||
setFilter(filter);
|
||||
}
|
||||
|
||||
FileFilterItem::FileFilterItem(const QString &fileFilter, QObject *parent)
|
||||
: FileFilterBaseItem(parent)
|
||||
FileFilterItem::FileFilterItem(const QString &fileFilter)
|
||||
{
|
||||
setFilter(fileFilter);
|
||||
}
|
||||
|
||||
@@ -20,9 +20,7 @@ class QmlProjectContentItem : public QObject
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QmlProjectContentItem(QObject *parent = nullptr)
|
||||
: QObject(parent)
|
||||
{}
|
||||
QmlProjectContentItem() {}
|
||||
};
|
||||
|
||||
class FileFilterBaseItem : public QmlProjectContentItem {
|
||||
@@ -35,7 +33,7 @@ class FileFilterBaseItem : public QmlProjectContentItem {
|
||||
Q_PROPERTY(QStringList files READ files NOTIFY filesChanged DESIGNABLE false)
|
||||
|
||||
public:
|
||||
FileFilterBaseItem(QObject *parent = nullptr);
|
||||
FileFilterBaseItem();
|
||||
|
||||
QString directory() const;
|
||||
void setDirectory(const QString &directoryPath);
|
||||
@@ -99,12 +97,12 @@ private:
|
||||
|
||||
class FileFilterItem : public FileFilterBaseItem {
|
||||
public:
|
||||
FileFilterItem(const QString &fileFilter, QObject *parent = nullptr);
|
||||
FileFilterItem(const QString &fileFilter);
|
||||
};
|
||||
|
||||
class ImageFileFilterItem : public FileFilterBaseItem {
|
||||
public:
|
||||
ImageFileFilterItem(QObject *parent = nullptr);
|
||||
ImageFileFilterItem();
|
||||
};
|
||||
|
||||
} // namespace QmlProjectManager
|
||||
|
||||
@@ -52,7 +52,8 @@ std::unique_ptr<QmlProjectManager::FileFilterBaseItem> setupFileFilterItem(
|
||||
|
||||
namespace QmlProjectManager {
|
||||
|
||||
QmlProjectItem *QmlProjectFileFormat::parseProjectFile(const Utils::FilePath &fileName, QString *errorMessage)
|
||||
std::unique_ptr<QmlProjectItem> QmlProjectFileFormat::parseProjectFile(const Utils::FilePath &fileName,
|
||||
QString *errorMessage)
|
||||
{
|
||||
QmlJS::SimpleReader simpleQmlJSReader;
|
||||
|
||||
@@ -67,7 +68,7 @@ QmlProjectItem *QmlProjectFileFormat::parseProjectFile(const Utils::FilePath &fi
|
||||
}
|
||||
|
||||
if (rootNode->name() == QLatin1String("Project")) {
|
||||
auto projectItem = new QmlProjectItem;
|
||||
auto projectItem = std::make_unique<QmlProjectItem>();
|
||||
|
||||
const auto mainFileProperty = rootNode->property(QLatin1String("mainFile"));
|
||||
if (mainFileProperty.isValid())
|
||||
@@ -137,8 +138,7 @@ QmlProjectItem *QmlProjectFileFormat::parseProjectFile(const Utils::FilePath &fi
|
||||
setupFileFilterItem(std::make_unique<FileFilterItem>("*.js"), childNode));
|
||||
} else if (childNode->name() == QLatin1String("ImageFiles")) {
|
||||
projectItem->appendContent(
|
||||
setupFileFilterItem(std::make_unique<ImageFileFilterItem>(projectItem),
|
||||
childNode));
|
||||
setupFileFilterItem(std::make_unique<ImageFileFilterItem>(), childNode));
|
||||
} else if (childNode->name() == QLatin1String("CssFiles")) {
|
||||
projectItem->appendContent(
|
||||
setupFileFilterItem(std::make_unique<FileFilterItem>("*.css"), childNode));
|
||||
|
||||
@@ -17,8 +17,8 @@ class QmlProjectFileFormat
|
||||
Q_DECLARE_TR_FUNCTIONS(QmlProjectManager::QmlProjectFileFormat)
|
||||
|
||||
public:
|
||||
static QmlProjectItem *parseProjectFile(const Utils::FilePath &fileName,
|
||||
QString *errorMessage = nullptr);
|
||||
static std::unique_ptr<QmlProjectItem> parseProjectFile(const Utils::FilePath &fileName,
|
||||
QString *errorMessage = nullptr);
|
||||
};
|
||||
|
||||
} // namespace QmlProjectManager
|
||||
|
||||
@@ -191,8 +191,7 @@ void QmlBuildSystem::parseProject(RefreshOptions options)
|
||||
m_projectItem.reset();
|
||||
if (!m_projectItem) {
|
||||
QString errorMessage;
|
||||
m_projectItem.reset(
|
||||
QmlProjectFileFormat::parseProjectFile(projectFilePath(), &errorMessage));
|
||||
m_projectItem = QmlProjectFileFormat::parseProjectFile(projectFilePath(), &errorMessage);
|
||||
if (m_projectItem) {
|
||||
connect(m_projectItem.get(),
|
||||
&QmlProjectItem::qmlFilesChanged,
|
||||
|
||||
@@ -41,7 +41,7 @@ tst_FileFormat::tst_FileFormat()
|
||||
|
||||
static QString testDataDir = QLatin1String(SRCDIR "/data");
|
||||
|
||||
static QmlProjectItem *loadQmlProject(QString name, QString *error)
|
||||
static std::unique_ptr<QmlProjectItem> loadQmlProject(QString name, QString *error)
|
||||
{
|
||||
return QmlProjectFileFormat::parseProjectFile(
|
||||
Utils::FilePath::fromString(testDataDir).pathAppended(name + ".qmlproject"), error);
|
||||
@@ -54,7 +54,7 @@ void tst_FileFormat::testFileFilter()
|
||||
// Search for qml files in directory + subdirectories
|
||||
//
|
||||
{
|
||||
QmlProjectItem *project = loadQmlProject(QLatin1String("testFileFilter1"), &error);
|
||||
auto project = loadQmlProject(QLatin1String("testFileFilter1"), &error);
|
||||
QVERIFY(project);
|
||||
QVERIFY(error.isEmpty());
|
||||
|
||||
@@ -64,14 +64,13 @@ void tst_FileFormat::testFileFilter()
|
||||
<< testDataDir + "/file2.qml"
|
||||
<< testDataDir + "/subdir/file3.qml");
|
||||
COMPARE_AS_SETS(project->files(), expectedFiles);
|
||||
delete project;
|
||||
}
|
||||
|
||||
//
|
||||
// search for all qml files in directory
|
||||
//
|
||||
{
|
||||
QmlProjectItem *project = loadQmlProject(QLatin1String("testFileFilter2"), &error);
|
||||
auto project = loadQmlProject(QLatin1String("testFileFilter2"), &error);
|
||||
QVERIFY(project);
|
||||
QVERIFY(error.isEmpty());
|
||||
|
||||
@@ -80,14 +79,13 @@ void tst_FileFormat::testFileFilter()
|
||||
QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml"
|
||||
<< testDataDir + "/file2.qml");
|
||||
COMPARE_AS_SETS(project->files(), expectedFiles);
|
||||
delete project;
|
||||
}
|
||||
|
||||
//
|
||||
// search for all qml files in subdirectory
|
||||
//
|
||||
{
|
||||
QmlProjectItem *project = loadQmlProject(QLatin1String("testFileFilter3"), &error);
|
||||
auto project = loadQmlProject(QLatin1String("testFileFilter3"), &error);
|
||||
QVERIFY(project);
|
||||
QVERIFY(error.isEmpty());
|
||||
|
||||
@@ -95,14 +93,13 @@ void tst_FileFormat::testFileFilter()
|
||||
|
||||
QStringList expectedFiles(QStringList() << testDataDir + "/subdir/file3.qml");
|
||||
COMPARE_AS_SETS(project->files(), expectedFiles);
|
||||
delete project;
|
||||
}
|
||||
|
||||
//
|
||||
// multiple entries
|
||||
//
|
||||
{
|
||||
QmlProjectItem *project = loadQmlProject(QLatin1String("testFileFilter4"), &error);
|
||||
auto project = loadQmlProject(QLatin1String("testFileFilter4"), &error);
|
||||
QVERIFY(project);
|
||||
QVERIFY(error.isEmpty());
|
||||
|
||||
@@ -113,14 +110,13 @@ void tst_FileFormat::testFileFilter()
|
||||
<< testDataDir + "/subdir/file3.qml");
|
||||
QCOMPARE(project->files().size(), 3);
|
||||
COMPARE_AS_SETS(project->files(), expectedFiles);
|
||||
delete project;
|
||||
}
|
||||
|
||||
//
|
||||
// include specific list
|
||||
//
|
||||
{
|
||||
QmlProjectItem *project = loadQmlProject(QLatin1String("testFileFilter5"), &error);
|
||||
auto project = loadQmlProject(QLatin1String("testFileFilter5"), &error);
|
||||
QVERIFY(project);
|
||||
QVERIFY(error.isEmpty());
|
||||
|
||||
@@ -129,14 +125,13 @@ void tst_FileFormat::testFileFilter()
|
||||
QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml"
|
||||
<< testDataDir + "/file2.qml");
|
||||
COMPARE_AS_SETS(project->files(), expectedFiles);
|
||||
delete project;
|
||||
}
|
||||
|
||||
//
|
||||
// include specific list
|
||||
//
|
||||
{
|
||||
QmlProjectItem *project = loadQmlProject(QLatin1String("testFileFilter6"), &error);
|
||||
auto project = loadQmlProject(QLatin1String("testFileFilter6"), &error);
|
||||
QVERIFY(project);
|
||||
QVERIFY(error.isEmpty());
|
||||
|
||||
@@ -144,14 +139,13 @@ void tst_FileFormat::testFileFilter()
|
||||
|
||||
QStringList expectedFiles(QStringList() << testDataDir + "/image.gif");
|
||||
COMPARE_AS_SETS(project->files(), expectedFiles);
|
||||
delete project;
|
||||
}
|
||||
|
||||
//
|
||||
// use wildcards
|
||||
//
|
||||
{
|
||||
QmlProjectItem *project = loadQmlProject(QLatin1String("testFileFilter7"), &error);
|
||||
auto project = loadQmlProject(QLatin1String("testFileFilter7"), &error);
|
||||
QVERIFY(project);
|
||||
QVERIFY(error.isEmpty());
|
||||
|
||||
@@ -159,14 +153,13 @@ void tst_FileFormat::testFileFilter()
|
||||
|
||||
QStringList expectedFiles(QStringList() << testDataDir + "/image.gif");
|
||||
COMPARE_AS_SETS(project->files(), expectedFiles);
|
||||
delete project;
|
||||
}
|
||||
|
||||
//
|
||||
// use Files element (1.1)
|
||||
//
|
||||
{
|
||||
QmlProjectItem *project = loadQmlProject(QLatin1String("testFileFilter8"), &error);
|
||||
auto project = loadQmlProject(QLatin1String("testFileFilter8"), &error);
|
||||
QVERIFY(project);
|
||||
QVERIFY(error.isEmpty());
|
||||
|
||||
@@ -174,7 +167,6 @@ void tst_FileFormat::testFileFilter()
|
||||
|
||||
QStringList expectedFiles(QStringList() << testDataDir + "/image.gif");
|
||||
COMPARE_AS_SETS(project->files(), expectedFiles);
|
||||
delete project;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -184,7 +176,7 @@ void tst_FileFormat::testMatchesFile()
|
||||
//
|
||||
// search for qml files in local directory
|
||||
//
|
||||
QmlProjectItem *project = loadQmlProject(QLatin1String("testMatchesFile"), &error);
|
||||
auto project = loadQmlProject(QLatin1String("testMatchesFile"), &error);
|
||||
QVERIFY(project);
|
||||
QVERIFY(error.isEmpty());
|
||||
|
||||
@@ -195,7 +187,6 @@ void tst_FileFormat::testMatchesFile()
|
||||
QVERIFY(project->matchesFile(testDataDir + "/subdir/notyetexistingfile.qml"));
|
||||
QVERIFY(project->matchesFile(testDataDir + "/script.js"));
|
||||
QVERIFY(!project->matchesFile(testDataDir + "/script.css"));
|
||||
delete project;
|
||||
}
|
||||
|
||||
void tst_FileFormat::testLibraryPaths()
|
||||
@@ -204,7 +195,7 @@ void tst_FileFormat::testLibraryPaths()
|
||||
//
|
||||
// search for qml files in local directory
|
||||
//
|
||||
QmlProjectItem *project = loadQmlProject(QLatin1String("testLibraryPaths"), &error);
|
||||
auto project = loadQmlProject(QLatin1String("testLibraryPaths"), &error);
|
||||
QVERIFY(project);
|
||||
QVERIFY(error.isEmpty());
|
||||
|
||||
@@ -214,7 +205,6 @@ void tst_FileFormat::testLibraryPaths()
|
||||
const QStringList expectedPaths({base.relativeFilePath(SRCDIR "/otherLibrary"),
|
||||
base.relativeFilePath(SRCDIR "/data/library")});
|
||||
COMPARE_AS_SETS(project->importPaths(), expectedPaths);
|
||||
delete project;
|
||||
}
|
||||
|
||||
void tst_FileFormat::testMainFile()
|
||||
@@ -223,12 +213,11 @@ void tst_FileFormat::testMainFile()
|
||||
//
|
||||
// search for qml files in local directory
|
||||
//
|
||||
QmlProjectItem *project = loadQmlProject(QLatin1String("testMainFile"), &error);
|
||||
auto project = loadQmlProject(QLatin1String("testMainFile"), &error);
|
||||
QVERIFY(project);
|
||||
QVERIFY(error.isEmpty());
|
||||
|
||||
QCOMPARE(project->mainFile(), QString("file1.qml"));
|
||||
delete project;
|
||||
}
|
||||
|
||||
QTEST_GUILESS_MAIN(tst_FileFormat);
|
||||
|
||||
Reference in New Issue
Block a user