From d115df6f054e2a84618bbfd4a39abe4210762bb3 Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Sat, 10 May 2014 17:03:14 -0400 Subject: [PATCH] starting to work on indentation --- src/compiler/capnpc-java.c++ | 65 ++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/src/compiler/capnpc-java.c++ b/src/compiler/capnpc-java.c++ index bb141e5..d0e63d0 100644 --- a/src/compiler/capnpc-java.c++ +++ b/src/compiler/capnpc-java.c++ @@ -42,6 +42,8 @@ #include #include +#include + #if HAVE_CONFIG_H #include "config.h" #endif @@ -164,6 +166,10 @@ kj::String safeIdentifier(kj::StringPtr identifier) { } } + kj::String spaces(int n) { + return kj::str(std::string(" ", n)); + } + // ======================================================================================= class CapnpcCppMain { @@ -1064,27 +1070,24 @@ private: }; kj::StringTree makeReaderDef(kj::StringPtr fullName, kj::StringPtr unqualifiedParentType, - bool isUnion, kj::Array&& methodDecls) { + bool isUnion, kj::Array&& methodDecls, + int indent) { return kj::strTree( - "public static class Reader {\n" - " public Reader(::capnp::_::StructReader base): _reader(base) {}\n" - "\n" - " inline ::capnp::MessageSize totalSize() const {\n" - " return _reader.totalSize().asPublic();\n" - " }\n" - "\n", - isUnion ? kj::strTree(" inline Which which() const;\n") : kj::strTree(), - kj::mv(methodDecls), - "private:\n" - " ::capnp::_::StructReader _reader;\n" - " template \n" - " friend struct ::capnp::ToDynamic_;\n" - " template \n" - " friend struct ::capnp::_::PointerHelpers;\n" - " template \n" - " friend struct ::capnp::List;\n" - "};\n" - "\n"); + spaces(indent), "public static class Reader {\n", + spaces(indent), " public Reader(::capnp::_::StructReader base): _reader(base) {}\n", + "\n", + spaces(indent), " inline ::capnp::MessageSize totalSize() const {\n", + spaces(indent), " return _reader.totalSize().asPublic();\n", + spaces(indent), " }\n", + "\n", + isUnion ? kj::strTree(spaces(indent), " inline Which which() const;\n") : kj::strTree(), + kj::mv(methodDecls), + spaces(indent), " ::capnp::_::StructReader _reader;\n", + spaces(indent), " template \n", + spaces(indent), " friend struct ::capnp::ToDynamic_;\n", + spaces(indent), " template \n", + spaces(indent), "};\n" + "\n"); } kj::StringTree makeBuilderDef(kj::StringPtr fullName, kj::StringPtr unqualifiedParentType, @@ -1104,7 +1107,7 @@ private: } StructText makeStructText(kj::StringPtr scope, kj::StringPtr name, StructSchema schema, - kj::Array nestedTypeDecls) { + kj::Array nestedTypeDecls, int indent) { auto proto = schema.getProto(); auto fullName = kj::str(scope, name); auto subScope = kj::str(fullName, "::"); @@ -1120,7 +1123,8 @@ private: kj::strTree( "public static class ", fullName, " {\n", kj::strTree(makeReaderDef(fullName, name, structNode.getDiscriminantCount() != 0, - KJ_MAP(f, fieldTexts) { return kj::mv(f.readerMethodDecls); })), + KJ_MAP(f, fieldTexts) { return kj::mv(f.readerMethodDecls); }, + indent)), " class Reader;\n" " class Builder;\n" " class Pipeline;\n", @@ -1274,7 +1278,8 @@ private: }; NodeText makeNodeText(kj::StringPtr namespace_, kj::StringPtr scope, - kj::StringPtr name, Schema schema) { + kj::StringPtr name, Schema schema, + int indent) { auto proto = schema.getProto(); auto fullName = kj::str(scope, name); auto subScope = kj::str(fullName, "::"); @@ -1284,7 +1289,8 @@ private: kj::Vector nestedTexts(proto.getNestedNodes().size()); for (auto nested: proto.getNestedNodes()) { nestedTexts.add(makeNodeText( - namespace_, subScope, nested.getName(), schemaLoader.get(nested.getId()))); + namespace_, + subScope, nested.getName(), schemaLoader.get(nested.getId()), indent + 1)); }; if (proto.isStruct()) { @@ -1292,7 +1298,7 @@ private: if (field.isGroup()) { nestedTexts.add(makeNodeText( namespace_, subScope, toTitleCase(field.getName()), - schemaLoader.get(field.getGroup().getTypeId()))); + schemaLoader.get(field.getGroup().getTypeId()), indent + 1)); } } } else if (proto.isInterface()) { @@ -1371,7 +1377,7 @@ private: NodeTextNoSchema top = makeNodeTextWithoutNested( namespace_, scope, name, schema, - KJ_MAP(n, nestedTexts) { return kj::mv(n.outerTypeDecl); }); + KJ_MAP(n, nestedTexts) { return kj::mv(n.outerTypeDecl); }, indent); return NodeText { kj::mv(top.outerTypeDecl), @@ -1412,7 +1418,8 @@ private: NodeTextNoSchema makeNodeTextWithoutNested(kj::StringPtr namespace_, kj::StringPtr scope, kj::StringPtr name, Schema schema, - kj::Array nestedTypeDecls) { + kj::Array nestedTypeDecls, + int indent) { auto proto = schema.getProto(); auto fullName = kj::str(scope, name); auto hexId = kj::hex(proto.getId()); @@ -1423,7 +1430,7 @@ private: case schema::Node::STRUCT: { StructText structText = - makeStructText(scope, name, schema.asStruct(), kj::mv(nestedTypeDecls)); + makeStructText(scope, name, schema.asStruct(), kj::mv(nestedTypeDecls), indent); auto structNode = proto.getStruct(); return NodeTextNoSchema { @@ -1562,7 +1569,7 @@ private: } auto nodeTexts = KJ_MAP(nested, node.getNestedNodes()) { - return makeNodeText(namespacePrefix, "", nested.getName(), schemaLoader.get(nested.getId())); + return makeNodeText(namespacePrefix, "", nested.getName(), schemaLoader.get(nested.getId()), 0); }; kj::String separator = kj::str("// ", kj::repeat('=', 87), "\n");