mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00

* See more about using [JavaScript on this page](https://wiki.gdevelop.io/gdevelop5/events/js-code/javascript-in-extensions/#experimental-new-option-javascript-files-in-your-project). Only show in developer changelog
119 lines
3.5 KiB
C++
119 lines
3.5 KiB
C++
/*
|
|
* GDevelop Core
|
|
* Copyright 2008-2016 Florian Rival (Florian.Rival@gmail.com). All rights
|
|
* reserved. This project is released under the MIT License.
|
|
*/
|
|
|
|
#ifndef GDCORE_USED_EXTENSIONS_FINDER_H
|
|
#define GDCORE_USED_EXTENSIONS_FINDER_H
|
|
#include <set>
|
|
|
|
#include "GDCore/Events/Parsers/ExpressionParser2NodeWorker.h"
|
|
#include "GDCore/Extensions/Metadata/SourceFileMetadata.h"
|
|
#include "GDCore/Extensions/PlatformExtension.h"
|
|
#include "GDCore/IDE/Events/ArbitraryEventsWorker.h"
|
|
#include "GDCore/IDE/Project/ArbitraryObjectsWorker.h"
|
|
#include "GDCore/String.h"
|
|
|
|
namespace gd {
|
|
class Project;
|
|
class Object;
|
|
class Behavior;
|
|
} // namespace gd
|
|
|
|
namespace gd {
|
|
|
|
class GD_CORE_API UsedExtensionsResult {
|
|
public:
|
|
/**
|
|
* The extensions used by the project (or part of it).
|
|
*/
|
|
const std::set<gd::String> &GetUsedExtensions() const {
|
|
return usedExtensions;
|
|
}
|
|
|
|
/**
|
|
* The include files used at runtime by the project (or part of it).
|
|
*/
|
|
const std::set<gd::String> &GetUsedIncludeFiles() const {
|
|
return usedIncludeFiles;
|
|
}
|
|
|
|
/**
|
|
* The additional files required at runtime by the project (or part of it).
|
|
*/
|
|
const std::set<gd::String> &GetUsedRequiredFiles() const {
|
|
return usedRequiredFiles;
|
|
}
|
|
|
|
const std::vector<gd::SourceFileMetadata>& GetUsedSourceFiles() const {
|
|
return usedSourceFiles;
|
|
}
|
|
|
|
/**
|
|
* \brief Return true when at least 1 object uses the 3D renderer.
|
|
*/
|
|
bool Has3DObjects() const {
|
|
return has3DObjects;
|
|
}
|
|
|
|
void AddUsedExtension(const gd::PlatformExtension& extension);
|
|
void AddUsedBuiltinExtension(const gd::String& extensionName);
|
|
void AddUsedIncludeFiles(const gd::String& includeFile) { usedIncludeFiles.insert(includeFile); }
|
|
void AddUsedRequiredFiles(const gd::String& requiredFile) { usedRequiredFiles.insert(requiredFile); }
|
|
|
|
void MarkAsHaving3DObjects() {
|
|
has3DObjects = true;
|
|
}
|
|
|
|
private:
|
|
std::set<gd::String> usedExtensions;
|
|
std::set<gd::String> usedIncludeFiles;
|
|
std::set<gd::String> usedRequiredFiles;
|
|
std::vector<gd::SourceFileMetadata> usedSourceFiles;
|
|
bool has3DObjects = false;
|
|
};
|
|
|
|
class GD_CORE_API UsedExtensionsFinder
|
|
: public ArbitraryObjectsWorker,
|
|
public ArbitraryEventsWorkerWithContext,
|
|
public ExpressionParser2NodeWorker {
|
|
public:
|
|
static const UsedExtensionsResult ScanProject(gd::Project& project);
|
|
|
|
private:
|
|
UsedExtensionsFinder(gd::Project& project_) : project(project_){};
|
|
gd::Project& project;
|
|
gd::String rootType;
|
|
UsedExtensionsResult result;
|
|
|
|
// Object Visitor
|
|
void DoVisitObject(gd::Object& object) override;
|
|
|
|
// Behavior Visitor
|
|
void DoVisitBehavior(gd::Behavior& behavior) override;
|
|
|
|
// Instructions Visitor
|
|
bool DoVisitInstruction(gd::Instruction& instruction,
|
|
bool isCondition) override;
|
|
|
|
// Expression Visitor
|
|
void OnVisitSubExpressionNode(SubExpressionNode& node) override;
|
|
void OnVisitOperatorNode(OperatorNode& node) override;
|
|
void OnVisitUnaryOperatorNode(UnaryOperatorNode& node) override;
|
|
void OnVisitNumberNode(NumberNode& node) override;
|
|
void OnVisitTextNode(TextNode& node) override;
|
|
void OnVisitVariableNode(VariableNode& node) override;
|
|
void OnVisitVariableAccessorNode(VariableAccessorNode& node) override;
|
|
void OnVisitVariableBracketAccessorNode(
|
|
VariableBracketAccessorNode& node) override;
|
|
void OnVisitIdentifierNode(IdentifierNode& node) override;
|
|
void OnVisitObjectFunctionNameNode(ObjectFunctionNameNode& node) override;
|
|
void OnVisitFunctionCallNode(FunctionCallNode& node) override;
|
|
void OnVisitEmptyNode(EmptyNode& node) override;
|
|
};
|
|
|
|
}; // namespace gd
|
|
|
|
#endif
|