Class LookupHelper
java.lang.Object
com.hedera.pbj.compiler.impl.LookupHelper
Class that manages packages and enum names that are used more than one place in code generation
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionLookupHelper(Map<Path, File> allSrcFiles, String javaPackageSuffix) Build a new lookup helper, root directory of protobuf files. -
Method Summary
Modifier and TypeMethodDescription(package private) static IntegerChecks if a msgDef is cacheable.Extract the set of fields that are comparable for a given message.(package private) StringformatCompleteClass(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.(package private) StringformatFileTypeName(String name, FileType fileType) getCacheableMessageCacheSize(String fullyQualifiedMessageOrEnumName) Check if the given fullyQualifiedMessageOrEnumName is cacheable.Get a list of fields that are comparable for a given message.(package private) StringgetCompleteClass(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.(package private) StringgetFullyQualifiedClass(File protoSrcFile, FileType fileType, org.antlr.v4.runtime.ParserRuleContext context) Get the fully qualified Java class name for given message/enum and file type.getFullyQualifiedProtoName(File protoSrcFile, org.antlr.v4.runtime.ParserRuleContext context) Get the fully qualified proto name for a message, enum or a message type.getFullyQualifiedProtoNameForContext(org.antlr.v4.runtime.ParserRuleContext ruleContext) Get part of the fully qualified protobuf message name for a ParserRuleContext.(package private) StringgetPackage(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.(package private) StringgetUnqualifiedClass(File protoSrcFile, FileType fileType, org.antlr.v4.runtime.ParserRuleContext context) Get the unqualified Java class name for given message or enum.getUnqualifiedProtoName(org.antlr.v4.runtime.ParserRuleContext context) Get the unqualified proto name for a message, enum or a message type.(package private) booleanisComparable(File protoSrcFile, Protobuf3Parser.MessageTypeContext messageType) Check if the given fullyQualifiedMessageOrEnumName is comparable(package private) booleanisEnum(File protoSrcFile, Protobuf3Parser.MessageTypeContext messageType) Check if the given fullyQualifiedMessageOrEnumName is a known enum(package private) static StringnormalizeFileName(String fileName)
-
Field Details
-
PROTO_EXTENSIION
-
-
Constructor Details
-
LookupHelper
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 filesjavaPackageSuffix- an optional, nullable suffix to add to the Java package name in generated classes, e.g. ".pbj"
-
-
Method Details
-
getUnqualifiedProtoName
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 incontext- 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 infileType- The type of file we want the package forcontext- Parser Context, a message or enum- Returns:
- java package to put model class in
-
formatFileTypeName
-
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 infileType- The type of file we want the package forcontext- 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 infileType- The type of file we want the class name forcontext- 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 infileType- The type of file we want the class name forcontext- Parser Context, a message or enum- Returns:
- fully qualified Java class name
-
getCompleteClass
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 incontext- Parser Context, a message- Returns:
- fully qualified Java class name, or null
-
isEnum
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
Check if the given fullyQualifiedMessageOrEnumName is comparable- Parameters:
messageType- field message type to check if enum- Returns:
- true if comparable
-
getCacheableMessageCacheSize
-
normalizeFileName
-
extractComparableFields
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
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
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
-