Skip to content

Commit 055440f

Browse files
committed
handle proto files without multiple files flag
1 parent 66c85f3 commit 055440f

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

protoc-gen-java-optional/src/main/java/org/grpcmock/protoc/plugin/OptionalGenerator.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,10 @@ private Stream<File> handleProtoFile(FileDescriptorProto fileDescriptor) {
9494
: protoPackage;
9595

9696
return fileDescriptor.getMessageTypeList().stream()
97-
.flatMap(descriptor -> handleMessageProto(descriptor, descriptor.getName(), protoPackage, javaPackage));
97+
.flatMap(descriptor -> handleMessage(descriptor, getFileName(fileDescriptor, descriptor), protoPackage, javaPackage));
9898
}
9999

100-
private Stream<File> handleMessageProto(
100+
private Stream<File> handleMessage(
101101
DescriptorProto messageDescriptor,
102102
String fileName,
103103
String protoPackage,
@@ -107,13 +107,13 @@ private Stream<File> handleMessageProto(
107107
String fullMethodName = protoPackage + "." + messageDescriptor.getName();
108108

109109
return Stream.concat(
110-
handleMessage(messageDescriptor, filePath, fullMethodName),
110+
handleSingleMessage(messageDescriptor, filePath, fullMethodName),
111111
messageDescriptor.getNestedTypeList().stream()
112112
.filter(nestedDescriptor -> !nestedDescriptor.getOptions().getMapEntry())
113-
.flatMap(nestedDescriptor -> handleMessageProto(nestedDescriptor, fileName, fullMethodName, javaPackage)));
113+
.flatMap(nestedDescriptor -> handleMessage(nestedDescriptor, fileName, fullMethodName, javaPackage)));
114114
}
115115

116-
private Stream<File> handleMessage(DescriptorProto messageDescriptor, String filePath, String fullMethodName) {
116+
private Stream<File> handleSingleMessage(DescriptorProto messageDescriptor, String filePath, String fullMethodName) {
117117
return Stream.of(
118118
createFile(messageDescriptor, filePath, fullMethodName, BUILDER_SCOPE, this::createBuilderMethods),
119119
createFile(messageDescriptor, filePath, fullMethodName, CLASS_SCOPE, this::createClassMethods))
@@ -200,6 +200,21 @@ private Optional<String> optionalGet(FieldDescriptorProto fieldDescriptor) {
200200
return Optional.of(applyTemplate(templatePath("optionalGet.mustache"), context));
201201
}
202202

203+
private String getFileName(FileDescriptorProto fileDescriptor, DescriptorProto messageDescriptor) {
204+
if (fileDescriptor.getOptions().getJavaMultipleFiles()) {
205+
return messageDescriptor.getName();
206+
}
207+
if (fileDescriptor.getOptions().hasJavaOuterClassname()) {
208+
return fileDescriptor.getOptions().getJavaOuterClassname();
209+
}
210+
String protoPackage = fileDescriptor.hasPackage() ? "." + fileDescriptor.getPackage() : "";
211+
String protoTypeName = protoPackage + "." + messageDescriptor.getName();
212+
return Optional.ofNullable(protoTypeMap.toJavaTypeName(protoTypeName))
213+
.map(javaType -> javaType.substring(0, javaType.lastIndexOf('.')))
214+
.map(javaType -> javaType.substring(javaType.lastIndexOf('.') + 1))
215+
.orElseThrow(() -> new IllegalArgumentException("Failed to find filename for proto '" + fileDescriptor.getName() + "'"));
216+
}
217+
203218
private String getJavaMethodName(FieldDescriptorProto fieldDescriptor) {
204219
return fieldDescriptor.getJsonName().substring(0, 1).toUpperCase(Locale.ROOT) + fieldDescriptor.getJsonName().substring(1);
205220
}

0 commit comments

Comments
 (0)