File indexing completed on 2024-05-12 04:37:48
0001 /* 0002 SPDX-FileCopyrightText: 2012 Milian Wolff <mail@milianw.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "templateengine.h" 0008 #include "templateengine_p.h" 0009 0010 #include "debug.h" 0011 0012 #include "codedescription.h" 0013 #include "codedescriptionmetatypes.h" 0014 #include "archivetemplateloader.h" 0015 0016 #include <interfaces/icore.h> 0017 #include <QStandardPaths> 0018 0019 using namespace KDevelop; 0020 using namespace Grantlee; 0021 0022 TemplateEngine* TemplateEngine::self() 0023 { 0024 static auto* engine = new TemplateEngine; 0025 return engine; 0026 } 0027 0028 TemplateEngine::TemplateEngine() 0029 : d_ptr(new TemplateEnginePrivate) 0030 { 0031 Q_D(TemplateEngine); 0032 0033 d->engine.setSmartTrimEnabled(true); 0034 0035 qCDebug(LANGUAGE) << "Generic data locations:" << QStandardPaths::standardLocations( 0036 QStandardPaths::GenericDataLocation); 0037 0038 const auto templateDirectories = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, 0039 QStringLiteral( 0040 "kdevcodegen/templates"), 0041 QStandardPaths::LocateDirectory); 0042 0043 if (!templateDirectories.isEmpty()) { 0044 qCDebug(LANGUAGE) << "Found template directories:" << templateDirectories; 0045 addTemplateDirectories(QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, 0046 QStringLiteral("kdevcodegen/templates"), 0047 QStandardPaths::LocateDirectory)); 0048 } else { 0049 qCWarning(LANGUAGE) << "No template directories found -- templating engine will not work!"; 0050 } 0051 0052 Grantlee::registerMetaType<KDevelop::VariableDescription>(); 0053 Grantlee::registerMetaType<KDevelop::FunctionDescription>(); 0054 Grantlee::registerMetaType<KDevelop::InheritanceDescription>(); 0055 Grantlee::registerMetaType<KDevelop::ClassDescription>(); 0056 0057 d->engine.addTemplateLoader(QSharedPointer<AbstractTemplateLoader>(ArchiveTemplateLoader::self())); 0058 } 0059 0060 TemplateEngine::~TemplateEngine() 0061 { 0062 } 0063 0064 void TemplateEngine::addTemplateDirectories(const QStringList& directories) 0065 { 0066 Q_D(TemplateEngine); 0067 0068 auto* loader = new FileSystemTemplateLoader; 0069 loader->setTemplateDirs(directories); 0070 d->engine.addTemplateLoader(QSharedPointer<AbstractTemplateLoader>(loader)); 0071 }