diff --git a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp index a9f7332107ee4578215a09a915ee0eebec437423..8d938a4ab22ab36db9f4946990ad771b936be4b4 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp @@ -76,7 +76,7 @@ AutotoolsProject::AutotoolsProject(AutotoolsManager *manager, const QString &fil m_makefileParserThread(0) { setProjectContext(Core::Context(Constants::PROJECT_CONTEXT)); - setProjectLanguage(Core::Context(ProjectExplorer::Constants::LANG_CXX)); + setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX)); const QFileInfo fileInfo(m_fileName); m_projectName = fileInfo.absoluteDir().dirName(); diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 13085b37ce3415d598892571c47abddb7b7c21e3..da8094327f0097a3cb9b3f0414272ea718c0edb9 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -110,7 +110,7 @@ CMakeProject::CMakeProject(CMakeManager *manager, const QString &fileName) m_lastEditor(0) { setProjectContext(Core::Context(CMakeProjectManager::Constants::PROJECTCONTEXT)); - setProjectLanguage(Core::Context(ProjectExplorer::Constants::LANG_CXX)); + setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX)); m_file = new CMakeFile(this, fileName); diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index a1853024de967442c1d55c33a17cc3dfd7f7c8c5..6b77b46d573ac94eb2bfa3d6426cc4846336fc77 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -70,7 +70,7 @@ GenericProject::GenericProject(Manager *manager, const QString &fileName) m_fileName(fileName) { setProjectContext(Context(GenericProjectManager::Constants::PROJECTCONTEXT)); - setProjectLanguage(Context(ProjectExplorer::Constants::LANG_CXX)); + setProjectLanguages(Context(ProjectExplorer::Constants::LANG_CXX)); QFileInfo fileInfo(m_fileName); QDir dir = fileInfo.dir(); diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index faefbc44a7b0118ebbb6e82c5a7aa6e2affa6a14..d3ca4925dce3cf21635d02cbfc21d2898ace4ccd 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -92,7 +92,7 @@ public: Target *m_activeTarget; EditorConfiguration *m_editorConfiguration; Core::Context m_projectContext; - Core::Context m_projectLanguage; + Core::Context m_projectLanguages; QVariantMap m_pluginSettings; SettingsAccessor *m_accessor; }; @@ -400,9 +400,9 @@ void Project::setProjectContext(Core::Context context) d->m_projectContext = context; } -void Project::setProjectLanguage(Core::Context language) +void Project::setProjectLanguages(Core::Context language) { - d->m_projectLanguage = language; + d->m_projectLanguages = language; } Core::Context Project::projectContext() const @@ -410,9 +410,9 @@ Core::Context Project::projectContext() const return d->m_projectContext; } -Core::Context Project::projectLanguage() const +Core::Context Project::projectLanguages() const { - return d->m_projectLanguage; + return d->m_projectLanguages; } QVariant Project::namedSettings(const QString &name) const diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index a1cb6419f511cf2323620177b1d155c8325e2853..2795b62d68a6fb621196986ea9c04c9916ee391d 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -114,7 +114,7 @@ public: static QString projectDirectory(const QString &top); virtual Core::Context projectContext() const; - virtual Core::Context projectLanguage() const; + virtual Core::Context projectLanguages() const; QVariant namedSettings(const QString &name) const; void setNamedSettings(const QString &name, const QVariant &value); @@ -148,7 +148,7 @@ protected: virtual bool setupTarget(Target *t); virtual void setProjectContext(Core::Context context); - virtual void setProjectLanguage(Core::Context language); + virtual void setProjectLanguages(Core::Context language); private slots: void changeEnvironment(); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 47f28445879914ff0063617d5716f8548fea01c3..105e806996c87abf87100bd9db68b47aa8ae9b03 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1809,11 +1809,11 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node if (d->m_currentProject) { oldContext.add(d->m_currentProject->projectContext()); - oldContext.add(d->m_currentProject->projectLanguage()); + oldContext.add(d->m_currentProject->projectLanguages()); } if (project) { newContext.add(project->projectContext()); - newContext.add(project->projectLanguage()); + newContext.add(project->projectLanguages()); } Core::ICore::updateAdditionalContexts(oldContext, newContext); diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index aaf3d08e4821bc9860310f7b772f40dd3ddd7f76..99ea22ef1fe23f225327dc26c21885fed6aa0a30 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -157,23 +157,11 @@ bool DebuggerRunConfigurationAspect::useCppDebugger() const return m_useCppDebugger; } -static bool isQtQuickAppProject(Project *project) -{ - const QString projectDirectory = project->projectDirectory(); - // Qt Quick 1 wizard generated file - const QString qq1FilePath = projectDirectory - + QLatin1String("/qmlapplicationviewer/qmlapplicationviewer.pri"); - // Qt Quick 2 wizard generated file - const QString qq2FilePath = projectDirectory - + QLatin1String("/qtquick2applicationviewer/qtquick2applicationviewer.pri"); - const QStringList projectFiles = project->files(Project::ExcludeGeneratedFiles); - return projectFiles.contains(qq1FilePath) || projectFiles.contains(qq2FilePath); -} - bool DebuggerRunConfigurationAspect::useQmlDebugger() const { if (m_useQmlDebugger == DebuggerRunConfigurationAspect::AutoEnableQmlDebugger) - return isQtQuickAppProject(m_runConfiguration->target()->project()); + return m_runConfiguration->target()->project()->projectLanguages().contains( + ProjectExplorer::Constants::LANG_QMLJS); return m_useQmlDebugger == DebuggerRunConfigurationAspect::EnableQmlDebugger; } diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index fdaabe37d4cad9bff419f1e0b81ee7329e98dd10..7b0377d21af8ed4c833158f2e7473e778bd58191 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -64,7 +64,7 @@ QmlProject::QmlProject(Internal::Manager *manager, const QString &fileName) m_modelManager(QmlJS::ModelManagerInterface::instance()) { setProjectContext(Core::Context(QmlProjectManager::Constants::PROJECTCONTEXT)); - setProjectLanguage(Core::Context(QmlProjectManager::Constants::LANG_QML)); + setProjectLanguages(Core::Context(QmlProjectManager::Constants::LANG_QML)); QFileInfo fileInfo(m_fileName); m_projectName = fileInfo.completeBaseName(); diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 1945f54ebc572679b80fcca6196fbe9e94c041cd..2a630f96769f3d578364b55efb0d5527e22c3bcb 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -348,7 +348,7 @@ Qt4Project::Qt4Project(Qt4Manager *manager, const QString& fileName) : m_activeTarget(0) { setProjectContext(Core::Context(Qt4ProjectManager::Constants::PROJECT_ID)); - setProjectLanguage(Core::Context(ProjectExplorer::Constants::LANG_CXX)); + setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX)); m_asyncUpdateTimer.setSingleShot(true); m_asyncUpdateTimer.setInterval(3000); @@ -599,10 +599,27 @@ void Qt4Project::updateQmlJSCodeModel() QList<Qt4ProFileNode *> proFiles = findQt4ProFiles(rootProjectNode()); projectInfo.importPaths.clear(); + + bool hasQmlLib = false; foreach (Qt4ProFileNode *node, proFiles) { projectInfo.importPaths.append(node->variableValue(QmlImportPathVar)); + if (!hasQmlLib) { + QStringList qtLibs = node->variableValue(QtVar); + hasQmlLib = qtLibs.contains(QLatin1String("declarative")) || + qtLibs.contains(QLatin1String("qml")) || + qtLibs.contains(QLatin1String("quick")); + } } + // If the project directory has a pro/pri file that includes a qml or quick or declarative + // library then chances of the project being a QML project is quite high. + // This assumption fails when there are no QDeclarativeEngine/QDeclarativeView (QtQuick 1) + // or QQmlEngine/QQuickView (QtQuick 2) instances. + Core::Context pl(ProjectExplorer::Constants::LANG_CXX); + if (projectInfo.sourceFiles.count() && hasQmlLib) + pl.add(ProjectExplorer::Constants::LANG_QMLJS); + setProjectLanguages(pl); + bool preferDebugDump = false; projectInfo.tryQmlDump = false;