diff options
| author | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-07-25 10:26:18 +0200 |
|---|---|---|
| committer | Christian Kandeler <christian.kandeler@digia.com> | 2013-07-25 12:18:16 +0200 |
| commit | daabd183bfc32301bec50a40275152bba66d71da (patch) | |
| tree | 88a3fd066e874c897614ef9e763391483b165177 | |
| parent | da7c5375c92fc06eb45c3411a75e0e8dd31464df (diff) | |
| download | qbs-daabd183bfc32301bec50a40275152bba66d71da.tar.gz | |
set up declarations for every builtin item
Some builtin items that are injected after reading the project
did not have any property declarations. The declarations contain
the default values and we want to use the default values from the
declarations in the next commit.
Preparation for fixing QBS-341.
Change-Id: Ic82375b8bfd9f1c092d2b4d9aab54c70dc866272
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
| -rw-r--r-- | src/lib/language/builtindeclarations.cpp | 15 | ||||
| -rw-r--r-- | src/lib/language/builtindeclarations.h | 6 | ||||
| -rw-r--r-- | src/lib/language/item.h | 1 | ||||
| -rw-r--r-- | src/lib/language/itemreaderastvisitor.cpp | 12 | ||||
| -rw-r--r-- | src/lib/language/loader.cpp | 2 | ||||
| -rw-r--r-- | src/lib/language/moduleloader.cpp | 1 | ||||
| -rw-r--r-- | src/lib/language/moduleloader.h | 2 | ||||
| -rw-r--r-- | src/lib/language/projectresolver.cpp | 6 | ||||
| -rw-r--r-- | src/lib/language/projectresolver.h | 4 |
9 files changed, 33 insertions, 16 deletions
diff --git a/src/lib/language/builtindeclarations.cpp b/src/lib/language/builtindeclarations.cpp index 1df7649a9..5ea695924 100644 --- a/src/lib/language/builtindeclarations.cpp +++ b/src/lib/language/builtindeclarations.cpp @@ -128,6 +128,21 @@ QList<PropertyDeclaration> BuiltinDeclarations::declarationsForType(const QStrin return m_builtins.value(typeName); } +void BuiltinDeclarations::setupItemForBuiltinType(Item *item) const +{ + foreach (const PropertyDeclaration &pd, declarationsForType(item->typeName())) { + item->m_propertyDeclarations.insert(pd.name, pd); + ValuePtr &value = item->m_properties[pd.name]; + if (!value) { + JSSourceValuePtr sourceValue = JSSourceValue::create(); + sourceValue->setFile(item->file()); + sourceValue->setSourceCode(pd.initialValueSource.isEmpty() ? + "undefined" : pd.initialValueSource); + value = sourceValue; + } + } +} + static PropertyDeclaration conditionProperty() { return PropertyDeclaration(QLatin1String("condition"), PropertyDeclaration::Boolean); diff --git a/src/lib/language/builtindeclarations.h b/src/lib/language/builtindeclarations.h index 7f5ddeda6..1f0c26e69 100644 --- a/src/lib/language/builtindeclarations.h +++ b/src/lib/language/builtindeclarations.h @@ -30,13 +30,16 @@ #ifndef QBS_BUILTINDECLARATIONS_H #define QBS_BUILTINDECLARATIONS_H -#include <language/propertydeclaration.h> +#include "propertydeclaration.h" + #include <QByteArray> #include <QMap> namespace qbs { namespace Internal { +class Item; + class BuiltinDeclarations { public: @@ -45,6 +48,7 @@ public: QString languageVersion() const; QByteArray qmlTypeInfo() const; QList<PropertyDeclaration> declarationsForType(const QString &typeName) const; + void setupItemForBuiltinType(qbs::Internal::Item *item) const; private: void addArtifactItem(); diff --git a/src/lib/language/item.h b/src/lib/language/item.h index af59c0dbd..626d0e6cf 100644 --- a/src/lib/language/item.h +++ b/src/lib/language/item.h @@ -53,6 +53,7 @@ class ProjectFile; class Item : public QbsQmlJS::Managed { + friend class BuiltinDeclarations; friend class ItemPool; friend class ItemReaderASTVisitor; Q_DISABLE_COPY(Item) diff --git a/src/lib/language/itemreaderastvisitor.cpp b/src/lib/language/itemreaderastvisitor.cpp index b5a3ef846..cf02105ea 100644 --- a/src/lib/language/itemreaderastvisitor.cpp +++ b/src/lib/language/itemreaderastvisitor.cpp @@ -270,17 +270,7 @@ bool ItemReaderASTVisitor::visit(AST::UiObjectDefinition *ast) qSwap(m_item, item); } - foreach (const PropertyDeclaration &pd, m_reader->builtins()->declarationsForType(typeName)) { - item->m_propertyDeclarations.insert(pd.name, pd); - ValuePtr &value = item->m_properties[pd.name]; - if (!value) { - JSSourceValuePtr sourceValue = JSSourceValue::create(); - sourceValue->setFile(item->file()); - sourceValue->setSourceCode(pd.initialValueSource.isEmpty() ? - "undefined" : pd.initialValueSource); - value = sourceValue; - } - } + m_reader->m_builtins->setupItemForBuiltinType(item); if (item->typeName() != QLatin1String("Properties") && item->typeName() != QLatin1String("SubProject")) { diff --git a/src/lib/language/loader.cpp b/src/lib/language/loader.cpp index 2e3fd90a9..fa047942b 100644 --- a/src/lib/language/loader.cpp +++ b/src/lib/language/loader.cpp @@ -49,7 +49,7 @@ Loader::Loader(ScriptEngine *engine, const Logger &logger) , m_progressObserver(0) , m_builtins(new BuiltinDeclarations) , m_moduleLoader(new ModuleLoader(engine, m_builtins, logger)) - , m_projectResolver(new ProjectResolver(m_moduleLoader, logger)) + , m_projectResolver(new ProjectResolver(m_moduleLoader, m_builtins, logger)) , m_engine(engine) { } diff --git a/src/lib/language/moduleloader.cpp b/src/lib/language/moduleloader.cpp index 8d738123c..5cd040611 100644 --- a/src/lib/language/moduleloader.cpp +++ b/src/lib/language/moduleloader.cpp @@ -936,6 +936,7 @@ Item *ModuleLoader::wrapWithProject(Item *item) prj->setTypeName("Project"); prj->setFile(item->file()); prj->setLocation(item->location()); + m_reader->builtins()->setupItemForBuiltinType(prj); return prj; } diff --git a/src/lib/language/moduleloader.h b/src/lib/language/moduleloader.h index e30d6bd4f..426123489 100644 --- a/src/lib/language/moduleloader.h +++ b/src/lib/language/moduleloader.h @@ -177,7 +177,7 @@ private: bool checkItemCondition(Item *item); QStringList readExtraSearchPaths(Item *item); void copyProperties(const Item *sourceProject, Item *targetProject); - static Item *wrapWithProject(Item *item); + Item *wrapWithProject(Item *item); static QString findExistingModulePath(const QString &searchPath, const QStringList &moduleName); static void copyProperty(const QString &propertyName, const Item *source, Item *destination); diff --git a/src/lib/language/projectresolver.cpp b/src/lib/language/projectresolver.cpp index 1193627ab..d2ee70ae0 100644 --- a/src/lib/language/projectresolver.cpp +++ b/src/lib/language/projectresolver.cpp @@ -30,6 +30,7 @@ #include "projectresolver.h" #include "artifactproperties.h" +#include "builtindeclarations.h" #include "evaluator.h" #include "filecontext.h" #include "item.h" @@ -61,8 +62,10 @@ static const FileTag unknownFileTag() return tag; } -ProjectResolver::ProjectResolver(ModuleLoader *ldr, const Logger &logger) +ProjectResolver::ProjectResolver(ModuleLoader *ldr, const BuiltinDeclarations *builtins, + const Logger &logger) : m_evaluator(ldr->evaluator()) + , m_builtins(builtins) , m_logger(logger) , m_engine(m_evaluator->engine()) , m_progressObserver(0) @@ -282,6 +285,7 @@ void ProjectResolver::resolveProduct(Item *item, ProjectContext *projectContext) fakeGroup->setProperty(QLatin1String("excludeFiles"), item->property(QLatin1String("excludeFiles"))); fakeGroup->setProperty(QLatin1String("overrideTags"), VariantValue::create(false)); + m_builtins->setupItemForBuiltinType(fakeGroup); subItems.prepend(fakeGroup); } diff --git a/src/lib/language/projectresolver.h b/src/lib/language/projectresolver.h index d7d3fc4ab..dcbdbfb12 100644 --- a/src/lib/language/projectresolver.h +++ b/src/lib/language/projectresolver.h @@ -41,6 +41,7 @@ namespace qbs { namespace Internal { +class BuiltinDeclarations; class Evaluator; class Item; class ModuleLoader; @@ -52,7 +53,7 @@ struct ModuleLoaderResult; class ProjectResolver { public: - ProjectResolver(ModuleLoader *ldr, const Logger &logger); + ProjectResolver(ModuleLoader *ldr, const BuiltinDeclarations *builtins, const Logger &logger); ~ProjectResolver(); void setProgressObserver(ProgressObserver *observer); @@ -114,6 +115,7 @@ private: ProjectContext createProjectContext(ProjectContext *parentProjectContext) const; Evaluator *m_evaluator; + const BuiltinDeclarations *m_builtins; Logger m_logger; ScriptEngine *m_engine; ProgressObserver *m_progressObserver; |
