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 }