aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@theqtcompany.com>2015-07-28 10:30:45 +0200
committerChristian Kandeler <christian.kandeler@theqtcompany.com>2015-07-28 09:14:26 +0000
commit71a039a66a0aa40a17ca69dc72c2cc5093caa24c (patch)
tree2ef41c62d8d46da67f784a61c262dd62819fa759
parent0f5db5d3bc06db891bbee3275ad409d41e9fcc8a (diff)
Make BuiltinDeclarations a singleton.
It has no mutable state and does not depend on any input parameters. Change-Id: I5aa4841f9377769845e9f1f1315d78c89e7d544a Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
-rw-r--r--src/lib/corelib/api/languageinfo.cpp2
-rw-r--r--src/lib/corelib/buildgraph/rulesapplicator.cpp2
-rw-r--r--src/lib/corelib/language/builtindeclarations.cpp8
-rw-r--r--src/lib/corelib/language/builtindeclarations.h7
-rw-r--r--src/lib/corelib/language/itemreader.cpp3
-rw-r--r--src/lib/corelib/language/itemreader.h5
-rw-r--r--src/lib/corelib/language/itemreaderastvisitor.cpp6
-rw-r--r--src/lib/corelib/language/loader.cpp6
-rw-r--r--src/lib/corelib/language/loader.h2
-rw-r--r--src/lib/corelib/language/moduleloader.cpp17
-rw-r--r--src/lib/corelib/language/moduleloader.h3
-rw-r--r--src/lib/corelib/language/projectresolver.cpp5
-rw-r--r--src/lib/corelib/language/projectresolver.h4
13 files changed, 35 insertions, 35 deletions
diff --git a/src/lib/corelib/api/languageinfo.cpp b/src/lib/corelib/api/languageinfo.cpp
index c885a1917..66cb3e9ea 100644
--- a/src/lib/corelib/api/languageinfo.cpp
+++ b/src/lib/corelib/api/languageinfo.cpp
@@ -40,7 +40,7 @@ LanguageInfo::LanguageInfo()
QByteArray LanguageInfo::qmlTypeInfo()
{
- Internal::BuiltinDeclarations builtins;
+ const Internal::BuiltinDeclarations &builtins = Internal::BuiltinDeclarations::instance();
// Header:
QByteArray result;
diff --git a/src/lib/corelib/buildgraph/rulesapplicator.cpp b/src/lib/corelib/buildgraph/rulesapplicator.cpp
index 529a763a6..6edc8ee8f 100644
--- a/src/lib/corelib/buildgraph/rulesapplicator.cpp
+++ b/src/lib/corelib/buildgraph/rulesapplicator.cpp
@@ -386,7 +386,7 @@ class ArtifactBindingsExtractor
{
QSet<QString> s;
foreach (const PropertyDeclaration &pd,
- BuiltinDeclarations().declarationsForType(
+ BuiltinDeclarations::instance().declarationsForType(
QLatin1String("Artifact")).properties()) {
s.insert(pd.name());
}
diff --git a/src/lib/corelib/language/builtindeclarations.cpp b/src/lib/corelib/language/builtindeclarations.cpp
index 8eb8fc3b8..1185da584 100644
--- a/src/lib/corelib/language/builtindeclarations.cpp
+++ b/src/lib/corelib/language/builtindeclarations.cpp
@@ -39,6 +39,9 @@
namespace qbs {
namespace Internal {
+class AClassWithPublicConstructor : public BuiltinDeclarations { };
+Q_GLOBAL_STATIC(AClassWithPublicConstructor, theInstance)
+
const char QBS_LANGUAGE_VERSION[] = "1.0";
BuiltinDeclarations::BuiltinDeclarations()
@@ -61,6 +64,11 @@ BuiltinDeclarations::BuiltinDeclarations()
addScannerItem();
}
+const BuiltinDeclarations &BuiltinDeclarations::instance()
+{
+ return *theInstance;
+}
+
QString BuiltinDeclarations::languageVersion() const
{
return m_languageVersion;
diff --git a/src/lib/corelib/language/builtindeclarations.h b/src/lib/corelib/language/builtindeclarations.h
index 99b71c38a..f39255c8b 100644
--- a/src/lib/corelib/language/builtindeclarations.h
+++ b/src/lib/corelib/language/builtindeclarations.h
@@ -46,13 +46,16 @@ class Item;
class BuiltinDeclarations
{
public:
- BuiltinDeclarations();
+ static const BuiltinDeclarations &instance();
QString languageVersion() const;
bool containsType(const QString &typeName) const;
QStringList allTypeNames() const;
ItemDeclaration declarationsForType(const QString &typeName) const;
- void setupItemForBuiltinType(qbs::Internal::Item *item, Logger logger) const;
+ void setupItemForBuiltinType(Item *item, Logger logger) const;
+
+protected:
+ BuiltinDeclarations();
private:
void insert(const ItemDeclaration &decl);
diff --git a/src/lib/corelib/language/itemreader.cpp b/src/lib/corelib/language/itemreader.cpp
index f23b45cfd..4b1f970cc 100644
--- a/src/lib/corelib/language/itemreader.cpp
+++ b/src/lib/corelib/language/itemreader.cpp
@@ -93,9 +93,8 @@ private:
class ItemReader::ASTCache : public QHash<QString, ASTCacheValue> {};
-ItemReader::ItemReader(BuiltinDeclarations *builtins, const Logger &logger)
+ItemReader::ItemReader(const Logger &logger)
: m_pool(0)
- , m_builtins(builtins)
, m_logger(logger)
, m_astCache(new ASTCache)
{
diff --git a/src/lib/corelib/language/itemreader.h b/src/lib/corelib/language/itemreader.h
index de147ae9b..31963ee8b 100644
--- a/src/lib/corelib/language/itemreader.h
+++ b/src/lib/corelib/language/itemreader.h
@@ -42,7 +42,6 @@
namespace qbs {
namespace Internal {
-class BuiltinDeclarations;
class Item;
class ItemPool;
@@ -68,10 +67,9 @@ class ItemReader
{
friend class ItemReaderASTVisitor;
public:
- ItemReader(BuiltinDeclarations *builtins, const Logger &logger);
+ ItemReader(const Logger &logger);
~ItemReader();
- BuiltinDeclarations *builtins() const { return m_builtins; }
Logger logger() const { return m_logger; }
void setPool(ItemPool *pool) { m_pool = pool; }
@@ -94,7 +92,6 @@ private:
bool findDirectoryEntries(const QString &dirPath, QStringList *entries) const;
ItemPool *m_pool;
- BuiltinDeclarations *m_builtins;
Logger m_logger;
QStringList m_searchPaths;
QStack<QStringList> m_extraSearchPaths;
diff --git a/src/lib/corelib/language/itemreaderastvisitor.cpp b/src/lib/corelib/language/itemreaderastvisitor.cpp
index ff8f48e6f..c88340d3e 100644
--- a/src/lib/corelib/language/itemreaderastvisitor.cpp
+++ b/src/lib/corelib/language/itemreaderastvisitor.cpp
@@ -53,7 +53,7 @@ namespace Internal {
ItemReaderASTVisitor::ItemReaderASTVisitor(ItemReader *reader, ItemReaderResult *result)
: m_reader(reader)
, m_readerResult(result)
- , m_languageVersion(readImportVersion(reader->builtins()->languageVersion()))
+ , m_languageVersion(readImportVersion(BuiltinDeclarations::instance().languageVersion()))
, m_file(FileContext::create())
, m_item(0)
, m_sourceValue(0)
@@ -302,7 +302,7 @@ bool ItemReaderASTVisitor::visit(AST::UiObjectDefinition *ast)
qSwap(m_item, item);
}
- m_reader->m_builtins->setupItemForBuiltinType(item, m_reader->logger());
+ BuiltinDeclarations::instance().setupItemForBuiltinType(item, m_reader->logger());
if (item->typeName() != QLatin1String("Properties")
&& item->typeName() != QLatin1String("SubProject")) {
@@ -499,7 +499,7 @@ void ItemReaderASTVisitor::checkImportVersion(const AST::SourceLocation &version
toCodeLocation(versionToken));
if (Q_UNLIKELY(importVersion != m_languageVersion))
throw ErrorInfo(Tr::tr("Incompatible qbs language version %1. This is version %2.").arg(
- importVersionString, m_reader->builtins()->languageVersion()),
+ importVersionString, BuiltinDeclarations::instance().languageVersion()),
toCodeLocation(versionToken));
}
diff --git a/src/lib/corelib/language/loader.cpp b/src/lib/corelib/language/loader.cpp
index cb15c1ec8..94c7a55bd 100644
--- a/src/lib/corelib/language/loader.cpp
+++ b/src/lib/corelib/language/loader.cpp
@@ -49,9 +49,8 @@ namespace Internal {
Loader::Loader(ScriptEngine *engine, const Logger &logger)
: m_logger(logger)
, m_progressObserver(0)
- , m_builtins(new BuiltinDeclarations)
- , m_moduleLoader(new ModuleLoader(engine, m_builtins, logger))
- , m_projectResolver(new ProjectResolver(m_moduleLoader, m_builtins, logger))
+ , m_moduleLoader(new ModuleLoader(engine, logger))
+ , m_projectResolver(new ProjectResolver(m_moduleLoader, logger))
, m_engine(engine)
{
}
@@ -60,7 +59,6 @@ Loader::~Loader()
{
delete m_projectResolver;
delete m_moduleLoader;
- delete m_builtins;
}
void Loader::setProgressObserver(ProgressObserver *observer)
diff --git a/src/lib/corelib/language/loader.h b/src/lib/corelib/language/loader.h
index 827f9113e..ee08c7c26 100644
--- a/src/lib/corelib/language/loader.h
+++ b/src/lib/corelib/language/loader.h
@@ -40,7 +40,6 @@ namespace qbs {
class Settings;
class SetupProjectParameters;
namespace Internal {
-class BuiltinDeclarations;
class Logger;
class ModuleLoader;
class ProgressObserver;
@@ -64,7 +63,6 @@ private slots:
private:
Logger m_logger;
ProgressObserver *m_progressObserver;
- BuiltinDeclarations *m_builtins;
ModuleLoader *m_moduleLoader;
ProjectResolver *m_projectResolver;
ScriptEngine * const m_engine;
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index 77340d179..1c2810540 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -65,13 +65,13 @@ class ModuleLoader::ItemModuleList : public QList<Item::Module> {};
const QString moduleSearchSubDir = QLatin1String("modules");
-ModuleLoader::ModuleLoader(ScriptEngine *engine, BuiltinDeclarations *builtins,
+ModuleLoader::ModuleLoader(ScriptEngine *engine,
const Logger &logger)
: m_engine(engine)
, m_pool(0)
, m_logger(logger)
, m_progressObserver(0)
- , m_reader(new ItemReader(builtins, logger))
+ , m_reader(new ItemReader(logger))
, m_evaluator(new Evaluator(engine, logger))
{
}
@@ -641,7 +641,7 @@ Item *ModuleLoader::mergeExportItems(ModuleLoader::ProductContext *productContex
}
productContext->item->setChildren(children);
Item::addChild(productContext->item, merged);
- m_reader->builtins()->setupItemForBuiltinType(merged, m_logger);
+ BuiltinDeclarations::instance().setupItemForBuiltinType(merged, m_logger);
return merged;
}
@@ -1438,12 +1438,13 @@ bool ModuleLoader::checkItemCondition(Item *item)
void ModuleLoader::checkItemTypes(Item *item)
{
if (Q_UNLIKELY(!item->typeName().isEmpty()
- && !m_reader->builtins()->containsType(item->typeName()))) {
+ && !BuiltinDeclarations::instance().containsType(item->typeName()))) {
const QString msg = Tr::tr("Unexpected item type '%1'.");
throw ErrorInfo(msg.arg(item->typeName()), item->location());
}
- const ItemDeclaration decl = m_reader->builtins()->declarationsForType(item->typeName());
+ const ItemDeclaration decl
+ = BuiltinDeclarations::instance().declarationsForType(item->typeName());
foreach (Item *child, item->children()) {
if (child->typeName().isEmpty())
continue;
@@ -1477,8 +1478,8 @@ void ModuleLoader::copyProperties(const Item *sourceProject, Item *targetProject
{
if (!sourceProject)
return;
- const QList<PropertyDeclaration> &builtinProjectProperties
- = m_reader->builtins()->declarationsForType(QLatin1String("Project")).properties();
+ const QList<PropertyDeclaration> &builtinProjectProperties = BuiltinDeclarations::instance()
+ .declarationsForType(QLatin1String("Project")).properties();
QSet<QString> builtinProjectPropertyNames;
foreach (const PropertyDeclaration &p, builtinProjectProperties)
builtinProjectPropertyNames << p.name();
@@ -1519,7 +1520,7 @@ Item *ModuleLoader::wrapWithProject(Item *item)
prj->setTypeName(QLatin1String("Project"));
prj->setFile(item->file());
prj->setLocation(item->location());
- m_reader->builtins()->setupItemForBuiltinType(prj, m_logger);
+ BuiltinDeclarations::instance().setupItemForBuiltinType(prj, m_logger);
return prj;
}
diff --git a/src/lib/corelib/language/moduleloader.h b/src/lib/corelib/language/moduleloader.h
index 060335955..853a0d9ad 100644
--- a/src/lib/corelib/language/moduleloader.h
+++ b/src/lib/corelib/language/moduleloader.h
@@ -55,7 +55,6 @@ class CodeLocation;
namespace Internal {
-class BuiltinDeclarations;
class Evaluator;
class Item;
class ItemReader;
@@ -99,7 +98,7 @@ struct ModuleLoaderResult
class ModuleLoader
{
public:
- ModuleLoader(ScriptEngine *engine, BuiltinDeclarations *builtins, const Logger &logger);
+ ModuleLoader(ScriptEngine *engine, const Logger &logger);
~ModuleLoader();
void setProgressObserver(ProgressObserver *progressObserver);
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp
index f000df40b..13513f4c0 100644
--- a/src/lib/corelib/language/projectresolver.cpp
+++ b/src/lib/corelib/language/projectresolver.cpp
@@ -68,10 +68,9 @@ static const FileTag unknownFileTag()
return tag;
}
-ProjectResolver::ProjectResolver(ModuleLoader *ldr, const BuiltinDeclarations *builtins,
+ProjectResolver::ProjectResolver(ModuleLoader *ldr,
const Logger &logger)
: m_evaluator(ldr->evaluator())
- , m_builtins(builtins)
, m_logger(logger)
, m_engine(m_evaluator->engine())
, m_progressObserver(0)
@@ -365,7 +364,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, m_logger);
+ BuiltinDeclarations::instance().setupItemForBuiltinType(fakeGroup, m_logger);
subItems.prepend(fakeGroup);
}
diff --git a/src/lib/corelib/language/projectresolver.h b/src/lib/corelib/language/projectresolver.h
index 6787c459a..4057c35a4 100644
--- a/src/lib/corelib/language/projectresolver.h
+++ b/src/lib/corelib/language/projectresolver.h
@@ -45,7 +45,6 @@
namespace qbs {
namespace Internal {
-class BuiltinDeclarations;
class Evaluator;
class Item;
class ModuleLoader;
@@ -56,7 +55,7 @@ class QualifiedIdSet;
class ProjectResolver
{
public:
- ProjectResolver(ModuleLoader *ldr, const BuiltinDeclarations *builtins, const Logger &logger);
+ ProjectResolver(ModuleLoader *ldr, const Logger &logger);
~ProjectResolver();
void setProgressObserver(ProgressObserver *observer);
@@ -153,7 +152,6 @@ private:
const QList<SourceArtifactPtr> &artifacts);
Evaluator *m_evaluator;
- const BuiltinDeclarations *m_builtins;
Logger m_logger;
ScriptEngine *m_engine;
ProgressObserver *m_progressObserver;