MCPcopy Create free account
hub / github.com/chronoxor/FastBinaryEncoding / GenerateEnumClass

Method GenerateEnumClass

source/generator_kotlin.cpp:4896–5036  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4894}
4895
4896void GeneratorKotlin::GenerateEnumClass(const std::shared_ptr<Package>& p, const std::shared_ptr<EnumType>& e, const CppCommon::Path& path)
4897{
4898 std::string enum_name = *e->name;
4899 std::string enum_type_name = *e->name + "Enum";
4900
4901 // Generate the output file
4902 CppCommon::Path output = path / (enum_name + ".kt");
4903 WriteBegin();
4904
4905 // Generate enum class header
4906 GenerateHeader(CppCommon::Path(_input).filename().string());
4907 GenerateImports(p);
4908
4909 std::string enum_type = (e->base && !e->base->empty()) ? *e->base : "int32";
4910 std::string enum_base_type = ConvertEnumType(enum_type);
4911 std::string enum_to = ConvertEnumTo(enum_type);
4912
4913 // Generate enum class body
4914 WriteLine();
4915 WriteLineIndent("@Suppress(\"MemberVisibilityCanBePrivate\", \"RemoveRedundantCallsOfConversionMethods\")");
4916 WriteLineIndent("class " + enum_name + " : Comparable<" + enum_name + ">");
4917 WriteLineIndent("{");
4918 Indent(1);
4919 if (e->body)
4920 {
4921 WriteLineIndent("companion object");
4922 WriteLineIndent("{");
4923 Indent(1);
4924 for (const auto& value : e->body->values)
4925 WriteLineIndent("val " + *value->name + " = " + enum_name + "(" + enum_type_name + "." + *value->name + ")");
4926 Indent(-1);
4927 WriteLineIndent("}");
4928 WriteLine();
4929 }
4930
4931 // Generate enum class value
4932 WriteLineIndent("var value: " + enum_type_name + "?" + " = " + enum_type_name + ".values()[0]");
4933 Indent(1);
4934 WriteLineIndent("private set");
4935 Indent(-1);
4936 WriteLine();
4937
4938 // Generate enum raw value
4939 WriteLineIndent("val raw: " + enum_base_type);
4940 Indent(1);
4941 WriteLineIndent("get() = value!!.raw");
4942 Indent(-1);
4943 WriteLine();
4944
4945 // Generate enum class constructors
4946 WriteLineIndent("constructor()");
4947 WriteLineIndent("constructor(value: " + enum_base_type + ") { setEnum(value) }");
4948 WriteLineIndent("constructor(value: " + enum_type_name + ") { setEnum(value) }");
4949 WriteLineIndent("constructor(value: " + enum_name + ") { setEnum(value) }");
4950 WriteLine();
4951
4952 // Generate enum class setDefault() method
4953 WriteLineIndent("fun setDefault() { setEnum(0" + enum_to + ") }");

Callers

nothing calls this directly

Calls 2

stringMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected