fix protobuf variable name (#13296)

This commit is contained in:
William Cheng 2022-08-27 13:31:24 +08:00 committed by GitHub
parent 62a0878bae
commit 97946e421f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 34 deletions

View File

@ -42,8 +42,7 @@ import java.util.*;
import java.util.Map.Entry;
import java.util.regex.Pattern;
import static org.openapitools.codegen.utils.StringUtils.camelize;
import static org.openapitools.codegen.utils.StringUtils.underscore;
import static org.openapitools.codegen.utils.StringUtils.*;
public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConfig {
@ -178,8 +177,7 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) {
setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME));
}
else {
} else {
additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName);
}
@ -223,22 +221,22 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
* NOTE: Enum values use C++ scoping rules, meaning that enum values are siblings of their type, not children of it. Therefore, enum value must be unique
*
* @param allowableValues allowable values
* @param prefix added prefix
* @param prefix added prefix
*/
public void addEnumValuesPrefix(Map<String, Object> allowableValues, String prefix){
if(allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>)allowableValues.get("enumVars");
public void addEnumValuesPrefix(Map<String, Object> allowableValues, String prefix) {
if (allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>) allowableValues.get("enumVars");
for(Map<String, Object> value : enumVars) {
String name = (String)value.get("name");
for (Map<String, Object> value : enumVars) {
String name = (String) value.get("name");
value.put("name", prefix + "_" + name);
value.put("value", "\"" + prefix + "_" + name + "\"");
}
}
if(allowableValues.containsKey("values")) {
List<String> values = (List<String>)allowableValues.get("values");
for(String value : values) {
if (allowableValues.containsKey("values")) {
List<String> values = (List<String>) allowableValues.get("values");
for (String value : values) {
value = prefix + "_" + value;
}
}
@ -250,9 +248,9 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
* @param allowableValues allowable values
*/
public void addUnknownToAllowableValues(Map<String, Object> allowableValues) {
if(startEnumsWithUnknown) {
if(allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>)allowableValues.get("enumVars");
if (startEnumsWithUnknown) {
if (allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>) allowableValues.get("enumVars");
HashMap<String, Object> unknown = new HashMap<String, Object>();
unknown.put("name", "UNKNOWN");
@ -262,8 +260,8 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
enumVars.add(0, unknown);
}
if(allowableValues.containsKey("values")) {
List<String> values = (List<String>)allowableValues.get("values");
if (allowableValues.containsKey("values")) {
List<String> values = (List<String>) allowableValues.get("values");
values.add(0, "UNKNOWN");
}
}
@ -289,12 +287,12 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
for (ModelMap mo : objs.getModels()) {
CodegenModel cm = mo.getModel();
if(cm.isEnum) {
if (cm.isEnum) {
Map<String, Object> allowableValues = cm.getAllowableValues();
addUnknownToAllowableValues(allowableValues);
addEnumValuesPrefix(allowableValues, cm.getClassname());
if (allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>)allowableValues.get("enumVars");
List<Map<String, Object>> enumVars = (List<Map<String, Object>>) allowableValues.get("enumVars");
addEnumIndexes(enumVars);
}
}
@ -304,8 +302,7 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
// add x-protobuf-type: repeated if it's an array
if (Boolean.TRUE.equals(var.isArray)) {
var.vendorExtensions.put("x-protobuf-type", "repeated");
}
else if (Boolean.TRUE.equals(var.isNullable && var.isPrimitiveType)) {
} else if (Boolean.TRUE.equals(var.isNullable && var.isPrimitiveType)) {
var.vendorExtensions.put("x-protobuf-type", "optional");
}
@ -322,19 +319,18 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
if (var.isEnum) {
addUnknownToAllowableValues(var.allowableValues);
addEnumValuesPrefix(var.allowableValues, var.getEnumName());
if(var.allowableValues.containsKey("enumVars")) {
if (var.allowableValues.containsKey("enumVars")) {
List<Map<String, Object>> enumVars = (List<Map<String, Object>>) var.allowableValues.get("enumVars");
addEnumIndexes(enumVars);
}
}
// Add x-protobuf-index, unless already specified
if(this.numberedFieldNumberList) {
if (this.numberedFieldNumberList) {
var.vendorExtensions.putIfAbsent("x-protobuf-index", index);
index++;
}
else {
} else {
try {
var.vendorExtensions.putIfAbsent("x-protobuf-index", generateFieldNumberFromString(var.getName()));
} catch (ProtoBufIndexComputationException e) {
@ -500,6 +496,11 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
return underscore(toModelName(name));
}
@Override
public String toVarName(final String name) {
return name;
}
@Override
public String toModelName(String name) {
name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
@ -555,14 +556,12 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
int index = 1;
for (CodegenParameter p : op.allParams) {
// add x-protobuf-type: repeated if it's an array
if (Boolean.TRUE.equals(p.isArray)) {
p.vendorExtensions.put("x-protobuf-type", "repeated");
}
else if (Boolean.TRUE.equals(p.isNullable && p.isPrimitiveType)) {
} else if (Boolean.TRUE.equals(p.isNullable && p.isPrimitiveType)) {
p.vendorExtensions.put("x-protobuf-type", "optional");
}
else if (Boolean.TRUE.equals(p.isMap)) {
} else if (Boolean.TRUE.equals(p.isMap)) {
LOGGER.warn("Map parameter (name: {}, operation ID: {}) not yet supported", p.paramName, op.operationId);
}
@ -649,5 +648,7 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
}
@Override
public GeneratorLanguage generatorLanguage() { return GeneratorLanguage.PROTOBUF; }
public GeneratorLanguage generatorLanguage() {
return GeneratorLanguage.PROTOBUF;
}
}

View File

@ -15,6 +15,6 @@ package petstore;
message OtherTest {
repeated string setUnderscoretest = 343904081;
repeated string set_test = 341814865;
}