Class ProtoGenerator

java.lang.Object
io.github.anupambasak.gradle.plugins.pojo2proto.ProtoGenerator

public class ProtoGenerator extends Object
  • Constructor Details

    • ProtoGenerator

      public ProtoGenerator()
    • ProtoGenerator

      public ProtoGenerator(boolean prefixEnumNames)
    • ProtoGenerator

      public ProtoGenerator(ProtoGenerator.Options options)
  • Method Details

    • registerTypes

      public Map<String,String> registerTypes(List<com.github.javaparser.ast.CompilationUnit> cus)
      Registers every top-level type that will be generated and assigns its proto name.

      All generated types share one proto package, and generated file names and Java classes clash on case-insensitive file systems (Windows, macOS). So when two types have names that differ only in case (FareDetailDTO / FareDetailDto) or are equal (Status in two packages), each of them is renamed by prefixing its Java package's last segment in PascalCase (com.x.pricing.FareDetailDTO -> PricingFareDetailDTO). More segments are used if that is still ambiguous. Types without a clash keep their name. References, imports and file names follow the new names.

      Returns:
      renamed types, fully qualified Java name to proto name
    • protoName

      public String protoName(com.github.javaparser.ast.body.TypeDeclaration<?> type)
      The proto name of a top-level type: its Java name (unless registerTypes(List) renamed it) followed by the configured name suffix.
    • protoPackage

      public String protoPackage(com.github.javaparser.ast.Node node)
      The proto package a type (or the types of a compilation unit) is generated in: with ProtoGenerator.Options.usePojoPackages, its Java package followed by ProtoGenerator.Options.javaPackageSuffix (com.x.dtos -> com.x.dtos.proto; none for classes in the default package), so that it equals the generated java_package. Otherwise the ProtoGenerator.Options.sharedPackage.
    • protoFile

      public String protoFile(com.github.javaparser.ast.body.TypeDeclaration<?> type)
      Path of the .proto file declaring a top-level type, relative to the destination directory. It is also the path used to import it: Address.proto, or com/x/dtos/proto/Address.proto with usePojoPackages (and javaPackageSuffix ".proto").
    • registeredProtoNames

      public Set<String> registeredProtoNames()
      All proto names of the registered top-level types.
    • generateHeader

      public String generateHeader(String packageName, Set<String> imports)
    • generateMessages

      public String generateMessages(List<com.github.javaparser.ast.CompilationUnit> cus, List<com.github.javaparser.ast.body.EnumDeclaration> enumDeclarations)
    • generateMessage

      public String generateMessage(com.github.javaparser.ast.CompilationUnit cu, List<com.github.javaparser.ast.body.EnumDeclaration> enumDeclarations)
    • generateMessageWithNestedEnums

      public String generateMessageWithNestedEnums(com.github.javaparser.ast.CompilationUnit cu, List<com.github.javaparser.ast.body.EnumDeclaration> nestedEnums, List<com.github.javaparser.ast.body.EnumDeclaration> allEnums)
    • generateEnums

      public String generateEnums(List<com.github.javaparser.ast.body.EnumDeclaration> enumDeclarations)
    • generateEnum

      public String generateEnum(com.github.javaparser.ast.body.EnumDeclaration enumDeclaration)
    • getImports

      public Set<String> getImports(com.github.javaparser.ast.CompilationUnit cu, List<com.github.javaparser.ast.body.EnumDeclaration> enumDeclarations)
    • getTopLevelWrappers

      public List<ProtoGenerator.WrapperMessage> getTopLevelWrappers()
      The wrapper messages to generate as top-level messages (their own files in multi-file mode).
    • generateWrapperMessage

      public String generateWrapperMessage(ProtoGenerator.WrapperMessage wrapper)