diff options
author | Christian Kandeler <christian.kandeler@theqtcompany.com> | 2015-07-28 10:30:45 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@theqtcompany.com> | 2015-07-28 09:14:26 +0000 |
commit | 71a039a66a0aa40a17ca69dc72c2cc5093caa24c (patch) | |
tree | 2ef41c62d8d46da67f784a61c262dd62819fa759 | |
parent | 0f5db5d3bc06db891bbee3275ad409d41e9fcc8a (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.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/rulesapplicator.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/builtindeclarations.cpp | 8 | ||||
-rw-r--r-- | src/lib/corelib/language/builtindeclarations.h | 7 | ||||
-rw-r--r-- | src/lib/corelib/language/itemreader.cpp | 3 | ||||
-rw-r--r-- | src/lib/corelib/language/itemreader.h | 5 | ||||
-rw-r--r-- | src/lib/corelib/language/itemreaderastvisitor.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/language/loader.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/language/loader.h | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 17 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.h | 3 | ||||
-rw-r--r-- | src/lib/corelib/language/projectresolver.cpp | 5 | ||||
-rw-r--r-- | src/lib/corelib/language/projectresolver.h | 4 |
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; |