forked from qt-creator/qt-creator
CMake: Update qmljs codemodel
With this patch it is possible to specify QML_IMPORT_PATH in CMake projects and QtCreator will scan those paths. One only has to make sure that the variable which is set in the CMakeLists.txt is also added to the CMakeCache.txt Task-number: QTCREATORBUG-11328 Change-Id: I11c7694806664d3203d855983e7db4a89fac267d Reviewed-by: Thomas Hartmann <Thomas.Hartmann@theqtcompany.com> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -437,7 +437,8 @@ Import LinkPrivate::importNonFile(Document::Ptr doc, const ImportInfo &importInf
|
|||||||
"For qmake projects, use the QML_IMPORT_PATH variable to add import paths.\n"
|
"For qmake projects, use the QML_IMPORT_PATH variable to add import paths.\n"
|
||||||
"For Qbs projects, declare and set a qmlImportPaths property in your product "
|
"For Qbs projects, declare and set a qmlImportPaths property in your product "
|
||||||
"to add import paths.\n"
|
"to add import paths.\n"
|
||||||
"For qmlproject projects, use the importPaths property to add import paths.").arg(
|
"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").arg(
|
||||||
importPaths.join(QLatin1Char('\n'))));
|
importPaths.join(QLatin1Char('\n'))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -106,7 +106,7 @@ private:
|
|||||||
BuildDirManager *m_buildDirManager = nullptr;
|
BuildDirManager *m_buildDirManager = nullptr;
|
||||||
|
|
||||||
friend class CMakeBuildSettingsWidget;
|
friend class CMakeBuildSettingsWidget;
|
||||||
friend class CMakeProject;
|
friend class CMakeProjectManager::CMakeProject;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CMakeBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory
|
class CMakeBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory
|
||||||
|
@@ -57,6 +57,7 @@
|
|||||||
#include <cpptools/cppmodelmanager.h>
|
#include <cpptools/cppmodelmanager.h>
|
||||||
#include <cpptools/projectinfo.h>
|
#include <cpptools/projectinfo.h>
|
||||||
#include <cpptools/projectpartbuilder.h>
|
#include <cpptools/projectpartbuilder.h>
|
||||||
|
#include <qmljs/qmljsmodelmanagerinterface.h>
|
||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
@@ -264,12 +265,47 @@ void CMakeProject::parseCMakeOutput()
|
|||||||
pinfo.finish();
|
pinfo.finish();
|
||||||
m_codeModelFuture = modelmanager->updateProjectInfo(pinfo);
|
m_codeModelFuture = modelmanager->updateProjectInfo(pinfo);
|
||||||
|
|
||||||
|
updateQmlJSCodeModel();
|
||||||
|
|
||||||
emit displayNameChanged();
|
emit displayNameChanged();
|
||||||
emit fileListChanged();
|
emit fileListChanged();
|
||||||
|
|
||||||
emit cmakeBc->emitBuildTypeChanged();
|
emit cmakeBc->emitBuildTypeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CMakeProject::updateQmlJSCodeModel()
|
||||||
|
{
|
||||||
|
QmlJS::ModelManagerInterface *modelManager = QmlJS::ModelManagerInterface::instance();
|
||||||
|
QTC_ASSERT(modelManager, return);
|
||||||
|
|
||||||
|
if (!activeTarget() || !activeTarget()->activeBuildConfiguration())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QmlJS::ModelManagerInterface::ProjectInfo projectInfo =
|
||||||
|
modelManager->defaultProjectInfoForProject(this);
|
||||||
|
|
||||||
|
projectInfo.importPaths.clear();
|
||||||
|
|
||||||
|
QString cmakeImports;
|
||||||
|
CMakeBuildConfiguration *bc = qobject_cast<CMakeBuildConfiguration *>(activeTarget()->activeBuildConfiguration());
|
||||||
|
if (!bc)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const QList<ConfigModel::DataItem> &cm = bc->completeCMakeConfiguration();
|
||||||
|
foreach (const ConfigModel::DataItem &di, cm) {
|
||||||
|
if (di.key.contains(QStringLiteral("QML_IMPORT_PATH"))) {
|
||||||
|
cmakeImports = di.value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (const QString &cmakeImport, cmakeImports.split(QLatin1Char(';'))) {
|
||||||
|
projectInfo.importPaths.maybeInsert(FileName::fromString(cmakeImport),QmlJS::Dialect::Qml);
|
||||||
|
}
|
||||||
|
|
||||||
|
modelManager->updateProjectInfo(projectInfo, this);
|
||||||
|
}
|
||||||
|
|
||||||
bool CMakeProject::needsConfiguration() const
|
bool CMakeProject::needsConfiguration() const
|
||||||
{
|
{
|
||||||
return targets().isEmpty();
|
return targets().isEmpty();
|
||||||
|
@@ -124,6 +124,7 @@ private:
|
|||||||
void handleActiveBuildConfigurationChanged();
|
void handleActiveBuildConfigurationChanged();
|
||||||
void handleParsingStarted();
|
void handleParsingStarted();
|
||||||
void parseCMakeOutput();
|
void parseCMakeOutput();
|
||||||
|
void updateQmlJSCodeModel();
|
||||||
|
|
||||||
void buildTree(Internal::CMakeProjectNode *rootNode, QList<ProjectExplorer::FileNode *> list);
|
void buildTree(Internal::CMakeProjectNode *rootNode, QList<ProjectExplorer::FileNode *> list);
|
||||||
void gatherFileNodes(ProjectExplorer::FolderNode *parent, QList<ProjectExplorer::FileNode *> &list) const;
|
void gatherFileNodes(ProjectExplorer::FolderNode *parent, QList<ProjectExplorer::FileNode *> &list) const;
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
QTC_PLUGIN_NAME = CMakeProjectManager
|
QTC_PLUGIN_NAME = CMakeProjectManager
|
||||||
QTC_LIB_DEPENDS += \
|
QTC_LIB_DEPENDS += \
|
||||||
extensionsystem \
|
extensionsystem \
|
||||||
|
qmljs \
|
||||||
utils
|
utils
|
||||||
QTC_PLUGIN_DEPENDS += \
|
QTC_PLUGIN_DEPENDS += \
|
||||||
coreplugin \
|
coreplugin \
|
||||||
|
Reference in New Issue
Block a user