[3.0-compiler] proto3 support optional (#9688)
* proto3 support optional * fix grpc compiler error * update grpc version * Compatible with grpc
This commit is contained in:
parent
1add77ed6e
commit
8f9d0eebd7
|
|
@ -26,11 +26,13 @@
|
|||
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-compiler</artifactId>
|
||||
<version>0.0.3</version>
|
||||
<version>0.0.4-SNAPSHOT</version>
|
||||
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<grpc.verison>1.44.0</grpc.verison>
|
||||
<jprotoc.version>1.2.1</jprotoc.version>
|
||||
<maven_compiler_version>3.6.0</maven_compiler_version>
|
||||
<maven_jar_version>3.0.2</maven_jar_version>
|
||||
<maven_source_version>3.0.1</maven_source_version>
|
||||
|
|
@ -41,6 +43,26 @@
|
|||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.grpc</groupId>
|
||||
<artifactId>grpc-core</artifactId>
|
||||
<version>${grpc.verison}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.grpc</groupId>
|
||||
<artifactId>grpc-stub</artifactId>
|
||||
<version>${grpc.verison}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.grpc</groupId>
|
||||
<artifactId>grpc-protobuf</artifactId>
|
||||
<version>${grpc.verison}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.grpc</groupId>
|
||||
<artifactId>grpc-context</artifactId>
|
||||
<version>${grpc.verison}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.salesforce.servicelibs</groupId>
|
||||
<artifactId>grpc-contrib</artifactId>
|
||||
|
|
@ -49,7 +71,7 @@
|
|||
<dependency>
|
||||
<groupId>com.salesforce.servicelibs</groupId>
|
||||
<artifactId>jprotoc</artifactId>
|
||||
<version>0.9.1</version>
|
||||
<version>${jprotoc.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import com.google.protobuf.DescriptorProtos.FileOptions;
|
|||
import com.google.protobuf.DescriptorProtos.MethodDescriptorProto;
|
||||
import com.google.protobuf.DescriptorProtos.ServiceDescriptorProto;
|
||||
import com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location;
|
||||
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse.Feature;
|
||||
import com.google.protobuf.compiler.PluginProtos;
|
||||
import com.salesforce.jprotoc.Generator;
|
||||
import com.salesforce.jprotoc.GeneratorException;
|
||||
|
|
@ -30,6 +31,7 @@ import com.salesforce.jprotoc.ProtoTypeMap;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
|
@ -44,18 +46,23 @@ public abstract class AbstractGenerator extends Generator {
|
|||
|
||||
protected abstract String getClassSuffix();
|
||||
|
||||
protected String getSingleTemplateFileName () {
|
||||
protected String getSingleTemplateFileName() {
|
||||
return getTemplateFileName();
|
||||
}
|
||||
|
||||
protected String getTemplateFileName () {
|
||||
protected String getTemplateFileName() {
|
||||
return getClassPrefix() + getClassSuffix() + "Stub.mustache";
|
||||
}
|
||||
|
||||
protected String getInterfaceTemplateFileName () {
|
||||
protected String getInterfaceTemplateFileName() {
|
||||
return getClassPrefix() + getClassSuffix() + "InterfaceStub.mustache";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<Feature> supportedFeatures() {
|
||||
return Collections.singletonList(Feature.FEATURE_PROTO3_OPTIONAL);
|
||||
}
|
||||
|
||||
private String getServiceJavaDocPrefix() {
|
||||
return " ";
|
||||
}
|
||||
|
|
@ -119,23 +126,23 @@ public abstract class AbstractGenerator extends Generator {
|
|||
serviceContext.fileName = getClassPrefix() + serviceProto.getName() + getClassSuffix() + ".java";
|
||||
serviceContext.className = getClassPrefix() + serviceProto.getName() + getClassSuffix();
|
||||
|
||||
serviceContext.interfaceFileName = serviceProto.getName()+ ".java";
|
||||
serviceContext.interfaceFileName = serviceProto.getName() + ".java";
|
||||
serviceContext.interfaceClassName = serviceProto.getName();
|
||||
serviceContext.serviceName = serviceProto.getName();
|
||||
serviceContext.deprecated = serviceProto.getOptions() != null && serviceProto.getOptions().getDeprecated();
|
||||
|
||||
List<Location> allLocationsForService = locations.stream()
|
||||
.filter(location ->
|
||||
location.getPathCount() >= 2 &&
|
||||
location.getPath(0) == FileDescriptorProto.SERVICE_FIELD_NUMBER &&
|
||||
location.getPath(1) == serviceNumber
|
||||
)
|
||||
.collect(Collectors.toList());
|
||||
.filter(location ->
|
||||
location.getPathCount() >= 2 &&
|
||||
location.getPath(0) == FileDescriptorProto.SERVICE_FIELD_NUMBER &&
|
||||
location.getPath(1) == serviceNumber
|
||||
)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Location serviceLocation = allLocationsForService.stream()
|
||||
.filter(location -> location.getPathCount() == SERVICE_NUMBER_OF_PATHS)
|
||||
.findFirst()
|
||||
.orElseGet(Location::getDefaultInstance);
|
||||
.filter(location -> location.getPathCount() == SERVICE_NUMBER_OF_PATHS)
|
||||
.findFirst()
|
||||
.orElseGet(Location::getDefaultInstance);
|
||||
serviceContext.javaDoc = getJavaDoc(getComments(serviceLocation), getServiceJavaDocPrefix());
|
||||
|
||||
for (int methodNumber = 0; methodNumber < serviceProto.getMethodCount(); methodNumber++) {
|
||||
|
|
@ -164,12 +171,12 @@ public abstract class AbstractGenerator extends Generator {
|
|||
methodContext.methodNumber = methodNumber;
|
||||
|
||||
Location methodLocation = locations.stream()
|
||||
.filter(location ->
|
||||
location.getPathCount() == METHOD_NUMBER_OF_PATHS &&
|
||||
location.getPath(METHOD_NUMBER_OF_PATHS - 1) == methodNumber
|
||||
)
|
||||
.findFirst()
|
||||
.orElseGet(Location::getDefaultInstance);
|
||||
.filter(location ->
|
||||
location.getPathCount() == METHOD_NUMBER_OF_PATHS &&
|
||||
location.getPath(METHOD_NUMBER_OF_PATHS - 1) == methodNumber
|
||||
)
|
||||
.findFirst()
|
||||
.orElseGet(Location::getDefaultInstance);
|
||||
methodContext.javaDoc = getJavaDoc(getComments(methodLocation), getMethodJavaDocPrefix());
|
||||
|
||||
if (!methodProto.getClientStreaming() && !methodProto.getServerStreaming()) {
|
||||
|
|
@ -204,10 +211,14 @@ public abstract class AbstractGenerator extends Generator {
|
|||
return allServiceFiles;
|
||||
}
|
||||
|
||||
protected boolean enableMultipleTemplateFiles(){
|
||||
return false;
|
||||
}
|
||||
|
||||
private List<PluginProtos.CodeGeneratorResponse.File> buildFile(ServiceContext context) {
|
||||
List<PluginProtos.CodeGeneratorResponse.File> files = new ArrayList<>();
|
||||
|
||||
if (context.multipleFiles) {
|
||||
if (context.multipleFiles && enableMultipleTemplateFiles()) {
|
||||
String content = applyTemplate(getTemplateFileName(), context);
|
||||
String dir = absoluteDir(context);
|
||||
|
||||
|
|
@ -260,13 +271,13 @@ public abstract class AbstractGenerator extends Generator {
|
|||
private String getJavaDoc(String comments, String prefix) {
|
||||
if (!comments.isEmpty()) {
|
||||
StringBuilder builder = new StringBuilder("/**\n")
|
||||
.append(prefix).append(" * <pre>\n");
|
||||
.append(prefix).append(" * <pre>\n");
|
||||
Arrays.stream(HtmlEscapers.htmlEscaper().escape(comments).split("\n"))
|
||||
.map(line -> line.replace("*/", "*/").replace("*", "*"))
|
||||
.forEach(line -> builder.append(prefix).append(" * ").append(line).append("\n"));
|
||||
.map(line -> line.replace("*/", "*/").replace("*", "*"))
|
||||
.forEach(line -> builder.append(prefix).append(" * ").append(line).append("\n"));
|
||||
builder
|
||||
.append(prefix).append(" * </pre>\n")
|
||||
.append(prefix).append(" */");
|
||||
.append(prefix).append(" * </pre>\n")
|
||||
.append(prefix).append(" */");
|
||||
return builder.toString();
|
||||
}
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -55,4 +55,9 @@ public class Dubbo3Generator extends AbstractGenerator {
|
|||
protected String getSingleTemplateFileName() {
|
||||
return "DubboStub.mustache";// compatible with 2.7 or before
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean enableMultipleTemplateFiles() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue