GDevelop Core
Core library for developing platforms and tools compatible with GDevelop.
DiagnosticReport.h
1 /*
2  * GDevelop Core
3  * Copyright 2008-present Florian Rival ([email protected]). All rights
4  * reserved. This project is released under the MIT License.
5  */
6 #pragma once
7 
8 #include <memory>
9 #include <vector>
10 
11 #include "GDCore/String.h"
12 #include "GDCore/Tools/MakeUnique.h"
13 
14 namespace gd {
15 
19 class GD_CORE_API ProjectDiagnostic {
20 public:
21  enum ErrorType {
22  UndeclaredVariable,
23  MissingBehavior,
24  UnknownObject,
25  MismatchedObjectType,
26  };
27 
28  ProjectDiagnostic(ErrorType type_, const gd::String &message_,
29  const gd::String &actualValue_,
30  const gd::String &expectedValue_, const gd::String &objectName_ = "")
31  : type(type_), message(message_), actualValue(actualValue_), expectedValue(expectedValue_),
32  objectName(objectName_){};
33  virtual ~ProjectDiagnostic(){};
34 
35  ErrorType GetType() const { return type; };
36  const gd::String &GetMessage() const { return message; }
37  const gd::String &GetObjectName() const { return objectName; }
38  const gd::String &GetActualValue() const { return actualValue; }
39  const gd::String &GetExpectedValue() const { return expectedValue; }
40 
41 private:
42  ErrorType type;
43  gd::String message;
44  gd::String objectName;
45  gd::String actualValue;
46  gd::String expectedValue;
47 };
48 
52 class GD_CORE_API DiagnosticReport {
53 public:
54  DiagnosticReport(){};
55  virtual ~DiagnosticReport(){};
56 
57  void Add(const gd::ProjectDiagnostic &projectDiagnostic) {
58  projectDiagnostics.push_back(
59  gd::make_unique<gd::ProjectDiagnostic>(projectDiagnostic));
60  };
61 
62  const ProjectDiagnostic &Get(std::size_t index) const {
63  return *projectDiagnostics[index].get();
64  };
65 
66  std::size_t Count() const { return projectDiagnostics.size(); };
67 
68  const gd::String &GetSceneName() const { return sceneName; }
69 
70  void SetSceneName(const gd::String &sceneName_) {
71  sceneName = sceneName_;
72  }
73 
74 private:
75  std::vector<std::unique_ptr<gd::ProjectDiagnostic>> projectDiagnostics;
76  gd::String sceneName;
77 };
78 
82 class GD_CORE_API WholeProjectDiagnosticReport {
83 public:
85  virtual ~WholeProjectDiagnosticReport(){};
86 
87  const DiagnosticReport &Get(std::size_t index) const {
88  return *diagnosticReports[index].get();
89  };
90 
91  void Clear() {
92  diagnosticReports.clear();
93  };
94 
95  DiagnosticReport& AddNewDiagnosticReportForScene(const gd::String &sceneName) {
96  auto diagnosticReport = gd::make_unique<gd::DiagnosticReport>();
97  diagnosticReport->SetSceneName(sceneName);
98  diagnosticReports.push_back(std::move(diagnosticReport));
99  return *diagnosticReports[diagnosticReports.size() - 1].get();
100  };
101 
102  std::size_t Count() const { return diagnosticReports.size(); };
103 
104  bool HasAnyIssue() {
105  for (auto& diagnosticReport : diagnosticReports) {
106  if (diagnosticReport->Count() > 0) {
107  return true;
108  }
109  }
110  return false;
111  }
112 
113 private:
114  std::vector<std::unique_ptr<gd::DiagnosticReport>> diagnosticReports;
115 };
116 
117 } // namespace gd
Definition: DiagnosticReport.h:52
Definition: DiagnosticReport.h:19
String represents an UTF8 encoded string.
Definition: String.h:31
Definition: DiagnosticReport.h:82
Definition: CommonTools.h:24