You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by cr...@apache.org on 2022/03/02 07:43:12 UTC
[dubbo] branch 3.0 updated: [3.0-compiler] proto3 support optional (#9688)
This is an automated email from the ASF dual-hosted git repository.
crazyhzm pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new 8f9d0ee [3.0-compiler] proto3 support optional (#9688)
8f9d0ee is described below
commit 8f9d0eebd77bd730ee34e1dbbf7c6f00ac8bb6c9
Author: earthchen <ea...@gmail.com>
AuthorDate: Wed Mar 2 15:42:50 2022 +0800
[3.0-compiler] proto3 support optional (#9688)
* proto3 support optional
* fix grpc compiler error
* update grpc version
* Compatible with grpc
---
compiler/pom.xml | 26 ++++++++-
.../org/apache/dubbo/gen/AbstractGenerator.java | 61 +++++++++++++---------
.../apache/dubbo/gen/dubbo/Dubbo3Generator.java | 5 ++
3 files changed, 65 insertions(+), 27 deletions(-)
diff --git a/compiler/pom.xml b/compiler/pom.xml
index fe3c2ba..0885db0 100644
--- a/compiler/pom.xml
+++ b/compiler/pom.xml
@@ -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>
@@ -42,6 +44,26 @@
<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>
<version>0.8.1</version>
@@ -49,7 +71,7 @@
<dependency>
<groupId>com.salesforce.servicelibs</groupId>
<artifactId>jprotoc</artifactId>
- <version>0.9.1</version>
+ <version>${jprotoc.version}</version>
</dependency>
</dependencies>
diff --git a/compiler/src/main/java/org/apache/dubbo/gen/AbstractGenerator.java b/compiler/src/main/java/org/apache/dubbo/gen/AbstractGenerator.java
index 68e2c74..934c6f0 100644
--- a/compiler/src/main/java/org/apache/dubbo/gen/AbstractGenerator.java
+++ b/compiler/src/main/java/org/apache/dubbo/gen/AbstractGenerator.java
@@ -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;
diff --git a/compiler/src/main/java/org/apache/dubbo/gen/dubbo/Dubbo3Generator.java b/compiler/src/main/java/org/apache/dubbo/gen/dubbo/Dubbo3Generator.java
index ff5e3c8..929ce57 100644
--- a/compiler/src/main/java/org/apache/dubbo/gen/dubbo/Dubbo3Generator.java
+++ b/compiler/src/main/java/org/apache/dubbo/gen/dubbo/Dubbo3Generator.java
@@ -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;
+ }
}