Class LookupHelper

java.lang.Object
com.hedera.pbj.compiler.impl.LookupHelper

public final class LookupHelper extends Object
Class that manages packages and enum names that are used more than one place in code generation
  • Field Details

  • Constructor Details

    • LookupHelper

      public LookupHelper(Map<Path,File> allSrcFiles, String javaPackageSuffix)
      Build a new lookup helper, root directory of protobuf files. This scans directory reading protobuf files extracting what is needed.
      Parameters:
      allSrcFiles - collection of all proto src files
      javaPackageSuffix - an optional, nullable suffix to add to the Java package name in generated classes, e.g. ".pbj"
  • Method Details

    • getUnqualifiedProtoName

      public String getUnqualifiedProtoName(org.antlr.v4.runtime.ParserRuleContext context)
      Get the unqualified proto name for a message, enum or a message type. For example "proto.GetAccountDetailsResponse.AccountDetails" would return "AccountDetails".
      Parameters:
      context - The parser context for a message, enum or a message type.
      Returns:
      unqualified proto name
    • getFullyQualifiedProtoName

      public String getFullyQualifiedProtoName(File protoSrcFile, org.antlr.v4.runtime.ParserRuleContext context)
      Get the fully qualified proto name for a message, enum or a message type. For example "proto.GetAccountDetailsResponse.AccountDetails" would return "proto.GetAccountDetailsResponse.AccountDetails".
      Parameters:
      protoSrcFile - the proto source file that the message or enum is in
      context - The parser context for a message, enum or a message type.
      Returns:
      fully qualified proto name
    • getUnqualifiedClass

      String getUnqualifiedClass(File protoSrcFile, FileType fileType, org.antlr.v4.runtime.ParserRuleContext context)
      Get the unqualified Java class name for given message or enum.
      Parameters:
      protoSrcFile - the proto source file that the message or enum is in
      fileType - The type of file we want the package for
      context - Parser Context, a message or enum
      Returns:
      java package to put model class in
    • formatFileTypeName

      String formatFileTypeName(String name, FileType fileType)
    • getPackage

      @Nullable String getPackage(File protoSrcFile, FileType fileType, org.antlr.v4.runtime.ParserRuleContext context)
      Get the Java package a class should be generated into for a given context and file type.
      Parameters:
      protoSrcFile - the proto source file that the message/enum/service is in
      fileType - The type of file we want the package for
      context - Parser Context, a message, or enum, or service
      Returns:
      java package to put model class in
    • getFullyQualifiedClass

      String getFullyQualifiedClass(File protoSrcFile, FileType fileType, org.antlr.v4.runtime.ParserRuleContext context)
      Get the fully qualified Java class name for given message/enum and file type.
      Parameters:
      protoSrcFile - the proto source file that the message or enum is in
      fileType - The type of file we want the class name for
      context - Parser Context, a message or enum
      Returns:
      fully qualified Java class name
    • formatCompleteClass

      String formatCompleteClass(File protoSrcFile, FileType fileType, org.antlr.v4.runtime.ParserRuleContext context)
      Format the complete Java class name for a given message/enum being parsed and file type, including outer classes names, but w/o the package name.
      Parameters:
      protoSrcFile - the proto source file that the message or enum is in
      fileType - The type of file we want the class name for
      context - Parser Context, a message or enum
      Returns:
      fully qualified Java class name
    • getCompleteClass

      String getCompleteClass(File protoSrcFile, org.antlr.v4.runtime.ParserRuleContext context)
      Get the complete Java class name for a given message, including outer classes names, but w/o the package name.
      Parameters:
      protoSrcFile - the proto source file that the message or enum is in
      context - Parser Context, a message
      Returns:
      fully qualified Java class name, or null
    • isEnum

      boolean isEnum(File protoSrcFile, Protobuf3Parser.MessageTypeContext messageType)
      Check if the given fullyQualifiedMessageOrEnumName is a known enum
      Parameters:
      messageType - field message type to check if enum
      Returns:
      true if known as an enum, recorded by addEnum()
    • isComparable

      boolean isComparable(File protoSrcFile, Protobuf3Parser.MessageTypeContext messageType)
      Check if the given fullyQualifiedMessageOrEnumName is comparable
      Parameters:
      messageType - field message type to check if enum
      Returns:
      true if comparable
    • getCacheableMessageCacheSize

      public Integer getCacheableMessageCacheSize(String fullyQualifiedMessageOrEnumName)
      Check if the given fullyQualifiedMessageOrEnumName is cacheable.
      Parameters:
      fullyQualifiedMessageOrEnumName - to check if cacheable
      Returns:
      the cache size if the message is cacheable, or null
    • normalizeFileName

      @NonNull static String normalizeFileName(String fileName)
    • extractComparableFields

      static List<String> extractComparableFields(Protobuf3Parser.MessageDefContext msgDef)
      Extract the set of fields that are comparable for a given message.
      Parameters:
      msgDef - The message definition to get comparable fields for
      Returns:
      a list of field names that are comparable
    • extractCacheSize

      static Integer extractCacheSize(Protobuf3Parser.MessageDefContext msgDef)
      Checks if a msgDef is cacheable.
      Parameters:
      msgDef - a message definition
      Returns:
      the cache size if the message is cacheable, or null
    • getFullyQualifiedProtoNameForContext

      public String getFullyQualifiedProtoNameForContext(org.antlr.v4.runtime.ParserRuleContext ruleContext)
      Get part of the fully qualified protobuf message name for a ParserRuleContext. This walks up parse tree and computes name. So = proto package + '.' + parent messages + '.' + message/enum name
      Parameters:
      ruleContext - The ParserRuleContext to compute qualified name for, can be MessageDefContext or EnumDefContext
      Returns:
      part of fully qualified protobuf name
    • getComparableFields

      List<String> getComparableFields(Protobuf3Parser.MessageDefContext message)
      Get a list of fields that are comparable for a given message.
      Parameters:
      message - The message to get comparable fields for
      Returns:
      a list of field names that are comparable