summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@theqtcompany.com>2015-07-29 09:47:07 +0200
committerChristian Kandeler <christian.kandeler@theqtcompany.com>2015-07-29 10:35:33 +0000
commit4e68a684c6af02ff0885f845767fbff98b5ab106 (patch)
tree4a9de1c1f1b25ba67a8b23a3f5bcfce58973fcfe /src
parentfae5a884f8c344cf69254890f7d61524d4473852 (diff)
downloadqbs-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.cpp34
-rw-r--r--src/lib/corelib/language/builtindeclarations.h4
-rw-r--r--src/lib/corelib/language/item.cpp42
-rw-r--r--src/lib/corelib/language/item.h7
-rw-r--r--src/lib/corelib/language/itemreaderastvisitor.cpp2
-rw-r--r--src/lib/corelib/language/itemreadervisitorstate.h1
-rw-r--r--src/lib/corelib/language/moduleloader.cpp4
-rw-r--r--src/lib/corelib/language/projectresolver.cpp3
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);
}