diff options
author | Christian Kandeler <christian.kandeler@theqtcompany.com> | 2015-07-29 09:47:07 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@theqtcompany.com> | 2015-07-29 10:35:33 +0000 |
commit | 4e68a684c6af02ff0885f845767fbff98b5ab106 (patch) | |
tree | 4a9de1c1f1b25ba67a8b23a3f5bcfce58973fcfe /src | |
parent | fae5a884f8c344cf69254890f7d61524d4473852 (diff) | |
download | qbs-4e68a684c6af02ff0885f845767fbff98b5ab106.tar.gz |
Move setupItemForBuiltinDeclarations() to Item class.
That's the correct place for this function. Lets us get rid of a friend
declaration as well.
Change-Id: I5769bb8fafde21258155bdde587044703b44a02d
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/corelib/language/builtindeclarations.cpp | 34 | ||||
-rw-r--r-- | src/lib/corelib/language/builtindeclarations.h | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/item.cpp | 42 | ||||
-rw-r--r-- | src/lib/corelib/language/item.h | 7 | ||||
-rw-r--r-- | src/lib/corelib/language/itemreaderastvisitor.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/itemreadervisitorstate.h | 1 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/projectresolver.cpp | 3 |
8 files changed, 47 insertions, 50 deletions
diff --git a/src/lib/corelib/language/builtindeclarations.cpp b/src/lib/corelib/language/builtindeclarations.cpp index fbdb20bc7..829477a44 100644 --- a/src/lib/corelib/language/builtindeclarations.cpp +++ b/src/lib/corelib/language/builtindeclarations.cpp @@ -89,40 +89,6 @@ ItemDeclaration BuiltinDeclarations::declarationsForType(const QString &typeName return m_builtins.value(typeName); } -void BuiltinDeclarations::setupItemForBuiltinType(Item *item, Logger logger) const -{ - foreach (const PropertyDeclaration &pd, declarationsForType(item->typeName()).properties()) { - item->m_propertyDeclarations.insert(pd.name(), pd); - ValuePtr &value = item->m_properties[pd.name()]; - if (!value) { - JSSourceValuePtr sourceValue = JSSourceValue::create(); - sourceValue->setFile(item->file()); - static const QString undefinedKeyword = QLatin1String("undefined"); - sourceValue->setSourceCode(pd.initialValueSource().isEmpty() - ? QStringRef(&undefinedKeyword) - : QStringRef(&pd.initialValueSource())); - value = sourceValue; - } else if (pd.isDeprecated()) { - const DeprecationInfo &di = pd.deprecationInfo(); - if (di.removalVersion() <= Version::qbsVersion()) { - QString message = Tr::tr("The property '%1' is no longer valid for %2 items. " - "It was removed in qbs %3.") - .arg(pd.name(), item->typeName(), di.removalVersion().toString()); - ErrorInfo error(message, value->location()); - if (!di.additionalUserInfo().isEmpty()) - error.append(di.additionalUserInfo()); - throw error; - } - QString warning = Tr::tr("The property '%1' is deprecated and will be removed in " - "qbs %2.").arg(pd.name(), di.removalVersion().toString()); - ErrorInfo error(warning, value->location()); - if (!di.additionalUserInfo().isEmpty()) - error.append(di.additionalUserInfo()); - logger.printWarning(error); - } - } -} - void BuiltinDeclarations::insert(const ItemDeclaration &decl) { m_builtins.insert(decl.typeName(), decl); diff --git a/src/lib/corelib/language/builtindeclarations.h b/src/lib/corelib/language/builtindeclarations.h index acad2d5ee..f4f9a9ff6 100644 --- a/src/lib/corelib/language/builtindeclarations.h +++ b/src/lib/corelib/language/builtindeclarations.h @@ -33,7 +33,6 @@ #include "itemdeclaration.h" -#include <logging/logger.h> #include <tools/version.h> #include <QByteArray> @@ -42,8 +41,6 @@ namespace qbs { namespace Internal { -class Item; - class BuiltinDeclarations { public: @@ -53,7 +50,6 @@ public: bool containsType(const QString &typeName) const; QStringList allTypeNames() const; ItemDeclaration declarationsForType(const QString &typeName) const; - void setupItemForBuiltinType(Item *item, Logger logger) const; protected: BuiltinDeclarations(); diff --git a/src/lib/corelib/language/item.cpp b/src/lib/corelib/language/item.cpp index e2df88925..fa2668078 100644 --- a/src/lib/corelib/language/item.cpp +++ b/src/lib/corelib/language/item.cpp @@ -29,8 +29,13 @@ ****************************************************************************/ #include "item.h" -#include "itempool.h" + +#include "builtindeclarations.h" +#include "deprecationinfo.h" #include "filecontext.h" +#include "itempool.h" + +#include <logging/logger.h> #include <logging/translator.h> #include <tools/error.h> #include <tools/qbsassert.h> @@ -175,6 +180,41 @@ bool Item::isPresentModule() const return v && v->type() == Value::JSSourceValueType; } +void Item::setupForBuiltinType(Logger &logger) +{ + const BuiltinDeclarations &builtins = BuiltinDeclarations::instance(); + foreach (const PropertyDeclaration &pd, builtins.declarationsForType(typeName()).properties()) { + m_propertyDeclarations.insert(pd.name(), pd); + ValuePtr &value = m_properties[pd.name()]; + if (!value) { + JSSourceValuePtr sourceValue = JSSourceValue::create(); + sourceValue->setFile(file()); + static const QString undefinedKeyword = QLatin1String("undefined"); + sourceValue->setSourceCode(pd.initialValueSource().isEmpty() + ? QStringRef(&undefinedKeyword) + : QStringRef(&pd.initialValueSource())); + value = sourceValue; + } else if (pd.isDeprecated()) { + const DeprecationInfo &di = pd.deprecationInfo(); + if (di.removalVersion() <= Version::qbsVersion()) { + QString message = Tr::tr("The property '%1' is no longer valid for %2 items. " + "It was removed in qbs %3.") + .arg(pd.name(), typeName(), di.removalVersion().toString()); + ErrorInfo error(message, value->location()); + if (!di.additionalUserInfo().isEmpty()) + error.append(di.additionalUserInfo()); + throw error; + } + QString warning = Tr::tr("The property '%1' is deprecated and will be removed in " + "qbs %2.").arg(pd.name(), di.removalVersion().toString()); + ErrorInfo error(warning, value->location()); + if (!di.additionalUserInfo().isEmpty()) + error.append(di.additionalUserInfo()); + logger.printWarning(error); + } + } +} + static const char *valueType(const Value *v) { switch (v->type()) { diff --git a/src/lib/corelib/language/item.h b/src/lib/corelib/language/item.h index cdf4905cd..708a92c82 100644 --- a/src/lib/corelib/language/item.h +++ b/src/lib/corelib/language/item.h @@ -40,22 +40,18 @@ #include <parser/qmljsmemorypool_p.h> #include <tools/codelocation.h> #include <tools/error.h> -#include <tools/weakpointer.h> #include <QList> #include <QMap> -#include <QSharedPointer> -#include <QStringList> namespace qbs { namespace Internal { class ItemPool; -class ProjectFile; +class Logger; class Item : public QbsQmlJS::Managed { - friend class BuiltinDeclarations; friend class ItemPool; friend class ItemReaderASTVisitor; Q_DISABLE_COPY(Item) @@ -125,6 +121,7 @@ public: static void addChild(Item *parent, Item *child); void dump() const; bool isPresentModule() const; + void setupForBuiltinType(Logger &logger); void setDelayedError(const ErrorInfo &e) { m_delayedError = e; } ErrorInfo delayedError() const { return m_delayedError; } diff --git a/src/lib/corelib/language/itemreaderastvisitor.cpp b/src/lib/corelib/language/itemreaderastvisitor.cpp index cf4686578..b507b729b 100644 --- a/src/lib/corelib/language/itemreaderastvisitor.cpp +++ b/src/lib/corelib/language/itemreaderastvisitor.cpp @@ -303,7 +303,7 @@ bool ItemReaderASTVisitor::visit(AST::UiObjectDefinition *ast) qSwap(m_item, item); } - BuiltinDeclarations::instance().setupItemForBuiltinType(item, m_logger); + item->setupForBuiltinType(m_logger); if (item->typeName() != QLatin1String("Properties") && item->typeName() != QLatin1String("SubProject")) { diff --git a/src/lib/corelib/language/itemreadervisitorstate.h b/src/lib/corelib/language/itemreadervisitorstate.h index 40c13c835..6f6934f3a 100644 --- a/src/lib/corelib/language/itemreadervisitorstate.h +++ b/src/lib/corelib/language/itemreadervisitorstate.h @@ -38,7 +38,6 @@ namespace qbs { namespace Internal { -class BuiltinDeclarations; class Item; class ItemPool; diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index 1c2810540..d45d1f669 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -641,7 +641,7 @@ Item *ModuleLoader::mergeExportItems(ModuleLoader::ProductContext *productContex } productContext->item->setChildren(children); Item::addChild(productContext->item, merged); - BuiltinDeclarations::instance().setupItemForBuiltinType(merged, m_logger); + merged->setupForBuiltinType(m_logger); return merged; } @@ -1520,7 +1520,7 @@ Item *ModuleLoader::wrapWithProject(Item *item) prj->setTypeName(QLatin1String("Project")); prj->setFile(item->file()); prj->setLocation(item->location()); - BuiltinDeclarations::instance().setupItemForBuiltinType(prj, m_logger); + prj->setupForBuiltinType(m_logger); return prj; } diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp index 13513f4c0..778962831 100644 --- a/src/lib/corelib/language/projectresolver.cpp +++ b/src/lib/corelib/language/projectresolver.cpp @@ -31,7 +31,6 @@ #include "projectresolver.h" #include "artifactproperties.h" -#include "builtindeclarations.h" #include "evaluator.h" #include "filecontext.h" #include "item.h" @@ -364,7 +363,7 @@ void ProjectResolver::resolveProduct(Item *item, ProjectContext *projectContext) fakeGroup->setProperty(QLatin1String("excludeFiles"), item->property(QLatin1String("excludeFiles"))); fakeGroup->setProperty(QLatin1String("overrideTags"), VariantValue::create(false)); - BuiltinDeclarations::instance().setupItemForBuiltinType(fakeGroup, m_logger); + fakeGroup->setupForBuiltinType(m_logger); subItems.prepend(fakeGroup); } |