Merge branch 'master' of https://github.com/olonho/carkot
This commit is contained in:
+32
-7
@@ -31,8 +31,11 @@ void ClassGenerator::generateCode(io::Printer *printer, bool isBuilder) const {
|
|||||||
// Generate field for errors code
|
// Generate field for errors code
|
||||||
printer->Print("var errorCode: Int = 0\n\n");
|
printer->Print("var errorCode: Int = 0\n\n");
|
||||||
|
|
||||||
|
// Generate construction routines
|
||||||
generateInitSection(printer);
|
generateInitSection(printer);
|
||||||
printer->Print("\n");
|
printer->Print("\n");
|
||||||
|
generateConstructor(printer, isBuilder);
|
||||||
|
printer->Print("\n");
|
||||||
|
|
||||||
|
|
||||||
// enum declarations and nested classes declarations only for fair classes
|
// enum declarations and nested classes declarations only for fair classes
|
||||||
@@ -218,24 +221,45 @@ void ClassGenerator::generateWriteToMethod(io::Printer *printer) const {
|
|||||||
printer->Print("}\n");
|
printer->Print("}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClassGenerator::generateConstructor(io::Printer * printer, bool isBuilder) const {
|
||||||
|
|
||||||
void ClassGenerator::generateHeader(io::Printer * printer, bool isBuilder) const {
|
|
||||||
// build list of arguments like 'field1: Type1, field2: Type2, ... '
|
// build list of arguments like 'field1: Type1, field2: Type2, ... '
|
||||||
string argumentList = "";
|
string argumentList = "";
|
||||||
for (int i = 0; i < properties.size(); ++i) {
|
for (int i = 0; i < properties.size(); ++i) {
|
||||||
argumentList += properties[i]->simpleName + ": " + properties[i]->getFullType() + " = " + properties[i]->getInitValue();
|
argumentList += properties[i]->simpleName + ": " + properties[i]->getFullType();
|
||||||
if (i + 1 != properties.size()) {
|
if (i + 1 != properties.size()) {
|
||||||
argumentList += ", ";
|
argumentList += ", ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
map <string, string> vars;
|
||||||
|
vars["name"] = isBuilder ? getBuidlerSimpleType() : getSimpleType();
|
||||||
|
vars["private"] = isBuilder ? "" : "private ";
|
||||||
|
vars["arguments"] = argumentList;
|
||||||
|
printer->Print(vars, "$private$constructor ($arguments$) : this() {\n");
|
||||||
|
printer->Indent();
|
||||||
|
|
||||||
|
for (int i = 0; i < properties.size(); ++i) {
|
||||||
|
map <string, string> vars;
|
||||||
|
vars["name"] = properties[i]->simpleName;
|
||||||
|
vars["initVal"] = properties[i]->getInitValue();
|
||||||
|
printer->Print(vars,
|
||||||
|
"this.$name$ = $name$"
|
||||||
|
"\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
printer->Outdent();
|
||||||
|
printer->Print("}\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClassGenerator::generateHeader(io::Printer * printer, bool isBuilder) const {
|
||||||
|
|
||||||
|
|
||||||
map<string, string> vars;
|
map<string, string> vars;
|
||||||
vars["name"] = isBuilder? getBuidlerSimpleType() : getSimpleType();
|
vars["name"] = isBuilder? getBuidlerSimpleType() : getSimpleType();
|
||||||
vars["argumentList"] = argumentList;
|
|
||||||
vars["maybePrivate"] = isBuilder? "" : " private";
|
vars["maybePrivate"] = isBuilder? "" : " private";
|
||||||
printer->Print(vars,
|
printer->Print(vars,
|
||||||
"class $name$$maybePrivate$ constructor ($argumentList$) {"
|
"class $name$$maybePrivate$ constructor () {"
|
||||||
"\n"
|
"\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -268,8 +292,9 @@ void ClassGenerator::generateInitSection(io::Printer * printer) const {
|
|||||||
for (int i = 0; i < properties.size(); ++i) {
|
for (int i = 0; i < properties.size(); ++i) {
|
||||||
map <string, string> vars;
|
map <string, string> vars;
|
||||||
vars["name"] = properties[i]->simpleName;
|
vars["name"] = properties[i]->simpleName;
|
||||||
|
vars["initVal"] = properties[i]->getInitValue();
|
||||||
printer->Print(vars,
|
printer->Print(vars,
|
||||||
"this.$name$ = $name$"
|
"this.$name$ = $initVal$"
|
||||||
"\n"
|
"\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-11
@@ -37,23 +37,23 @@ public:
|
|||||||
|
|
||||||
void generateCode (io::Printer * printer, bool isBuilder = false) const;
|
void generateCode (io::Printer * printer, bool isBuilder = false) const;
|
||||||
private:
|
private:
|
||||||
Descriptor const * descriptor;
|
|
||||||
NameResolver * nameResolver;
|
|
||||||
void generateBuilder (io::Printer * printer) const;
|
|
||||||
void generateBuildMethod (io::Printer * printer) const;
|
|
||||||
void generateInitSection (io::Printer * printer) const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flag isBuilder used for reducing code repeating, as code for class itself
|
* Flag isBuilder used for reducing code repeating, as code for class itself
|
||||||
* and for its inner builder are structurally very alike and can be generated
|
* and for its inner builder are structurally very alike and can be generated
|
||||||
* with very little differences (like changing 'val's to 'var's and etc.)
|
* with very little differences (like changing 'val's to 'var's and etc.)
|
||||||
*/
|
*/
|
||||||
void generateHeader(io::Printer * printer, bool isBuilder = false) const;
|
Descriptor const * descriptor;
|
||||||
|
NameResolver * nameResolver;
|
||||||
|
|
||||||
void generateWriteToMethod(io::Printer *printer) const;
|
void generateHeader (io::Printer * printer, bool isBuilder = false) const;
|
||||||
void generateMergeMethods(io::Printer *printer) const;
|
void generateConstructor (io::Printer * printer, bool isBuilder = false) const;
|
||||||
void generateParseMethods(io::Printer * printer) const;
|
void generateBuilder (io::Printer * printer) const;
|
||||||
void generateGetSizeMethod(io::Printer * printer) const;
|
void generateBuildMethod (io::Printer * printer) const;
|
||||||
|
void generateInitSection (io::Printer * printer) const;
|
||||||
|
void generateWriteToMethod (io::Printer * printer) const;
|
||||||
|
void generateMergeMethods (io::Printer * printer) const;
|
||||||
|
void generateParseMethods (io::Printer * printer) const;
|
||||||
|
void generateGetSizeMethod (io::Printer * printer) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace kotlin
|
} // namespace kotlin
|
||||||
|
|||||||
Reference in New Issue
Block a user