56 const std::vector<std::filesystem::path>& mappings,
61 [[nodiscard]] std::map<const FomDocument*, std::unique_ptr<lang::TypeSet>>
computeTypeSets()
const;
64 [[nodiscard]] std::unique_ptr<lang::TypeSet>
getRootTypeSet() &&
noexcept {
return std::move(rootTypeSet_); }
67 [[nodiscard]] std::optional<std::pair<ConstTypeHandle<>,
ParsedDoc*>> searchTypeSenName(
68 const std::string& qualName)
const;
70 std::optional<std::pair<ConstTypeHandle<>,
ParsedDoc*>> searchTypeFromFomNameHelper(
const std::string& fomTypeName,
73 [[nodiscard]] std::optional<std::pair<ConstTypeHandle<>,
ParsedDoc*>> searchTypeFromFomName(
74 const std::string& fomTypeName,
77 [[nodiscard]]
FomDocument* searchDocByIdentification(
const std::string& identification);
80 enum class CallableEnum : uint8_t
86 struct FindInteractionResult
88 pugi::xpath_node node;
93 void readDocs(
const std::filesystem::path& path);
97 [[nodiscard]] ParsedDoc* toMutableParsedDoc(
const ParsedDoc* doc) {
return parsedDocs_.at(doc->doc).get(); }
99 [[nodiscard]] ParsedDoc* getParsedDoc(FomDocument* doc);
101 void populateTypes(ParsedDoc* result, FomDocument* doc);
105 void createRootTypeSet();
107 template <
typename F>
108 [[nodiscard]]
ConstTypeHandle<> processTypeSource(ParsedDoc* result,
const pugi::xpath_node& node, F func);
110 template <
typename F>
111 void processTypeSource(ParsedDoc* result,
const pugi::xpath_node_set& nodes, F func);
113 template <
typename F>
114 std::optional<ConstTypeHandle<>> processTypeQuery(ParsedDoc* result,
115 const std::string& query,
116 const std::string& queryPostFix,
119 std::pair<ConstTypeHandle<>, ParsedDoc*> getOrCreateTypeFromFomName(
const std::string& fomName, ParsedDoc* result);
122 [[nodiscard]]
ConstTypeHandle<> simpleData(
const pugi::xpath_node& node, ParsedDoc* doc);
124 [[nodiscard]]
ConstTypeHandle<> arrayType(
const pugi::xpath_node& node,
const ParsedDoc* doc);
126 [[nodiscard]]
ConstTypeHandle<> recordType(
const pugi::xpath_node& node, ParsedDoc* doc);
128 [[nodiscard]]
ConstTypeHandle<> variantRecord(
const pugi::xpath_node& node,
const ParsedDoc* doc);
130 [[nodiscard]]
ConstTypeHandle<> enumeration(
const pugi::xpath_node& node,
const ParsedDoc* doc);
132 [[nodiscard]]
ConstTypeHandle<> classNode(
const pugi::xpath_node& node, ParsedDoc* doc);
134 void basicDataRepresentation(
const pugi::xpath_node& node);
137 [[nodiscard]] std::string fomTypeNameToSenTypeNameUnequal(
const std::string& fomTypeName)
const;
139 [[nodiscard]] std::string fomTypeNameToSenTypeNameQual(
const FomDocument* doc,
const std::string& fomTypeName)
const;
141 [[nodiscard]]
ConstTypeHandle<> fomDataRepresentationToSenType(
const std::string& representation)
const;
143 [[nodiscard]] std::string prependSenPackageName(
const FomDocument* doc,
const std::string& str)
const;
145 [[nodiscard]] std::vector<Arg> collectArgsFromInteractionNode(
const pugi::xpath_node& interactionNode,
146 const std::vector<std::string>& ignoredParams,
149 [[nodiscard]]
ConstTypeHandle<> getOrMakeStructFromInteraction(
const pugi::xpath_node& node,
151 const std::vector<std::string>& ignoredParams);
153 [[nodiscard]] CallableSpec makeCallableSpec(
const pugi::xpath_node& interactionNode,
154 const std::vector<std::string>& ignoredParams,
156 CallableEnum callableEnum,
159 [[nodiscard]] EventSpec makeEventSpec(
const pugi::xpath_node& interactionNode,
160 const std::vector<std::string>& ignoredParams,
164 [[nodiscard]] MethodSpec makeMethodSpec(
const pugi::xpath_node& interactionNode,
165 const pugi::xpath_node& returnNode,
166 const std::vector<std::string>& ignoredParams,
170 const std::string& qualifiedClassName);
172 [[nodiscard]] FindInteractionResult findInteractionNode(
const std::string& path,
const ParsedDoc* doc);
174 [[nodiscard]] FindInteractionResult findInteractionNodeInAllDocs(
const std::string& path);
176 [[nodiscard]]
ConstTypeHandle<> getOptionalPropertyType(
const std::string fomElementTypeName, ParsedDoc* doc);
180 std::unordered_map<FomDocument*, std::shared_ptr<ParsedDoc>> parsedDocs_;
181 std::unordered_map<std::string, ConstTypeHandle<>> representationToTypeMap_;
182 std::unordered_map<std::string, std::string> stringToSenUnitAbbrMap_;
183 std::vector<pugi::xml_document> mappingsDocs_;
184 std::unique_ptr<lang::TypeSet> rootTypeSet_;
185 std::optional<TypeHandle<ClassType>> rootClass_;
186 TypeSettings settings_;