You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/01/11 16:10:40 UTC
[plc4x] 01/02: fix(plc4go/codegen): fixed broken tracer
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 1bcd9d563e538a7c8dd23da3347df74baed33c44
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Jan 11 16:50:12 2022 +0100
fix(plc4go/codegen): fixed broken tracer
---
.../language/go/GoLanguageTemplateHelper.java | 4 +-
.../templates/go/data-io-template.go.ftlh | 56 +++++++++++++++++++++-
.../resources/templates/go/model-template.go.ftlh | 31 +++++++++++-
3 files changed, 85 insertions(+), 6 deletions(-)
diff --git a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
index 8918d9c..db8edb9 100644
--- a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
+++ b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
@@ -780,7 +780,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
tracer = tracer.dive("serialization argument");
return tracer + variableLiteral.getName() +
variableLiteral.getChild()
- .map(child -> "." + toVariableExpression(field, typeReference, child, parserArguments, serializerArguments, false, suppressPointerAccess))
+ .map(child -> "." + capitalize(toVariableExpression(field, typeReference, child, parserArguments, serializerArguments, false, suppressPointerAccess)))
.orElse("");
}
String indexCall = "";
@@ -967,7 +967,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
private String toOptionalVariableExpression(Field field, TypeReference typeReference, VariableLiteral variableLiteral, List<Argument> parserArguments, List<Argument> serializerArguments, boolean suppressPointerAccess, Tracer tracer) {
tracer = tracer.dive("optional fields");
return tracer + "(" + (suppressPointerAccess ? "" : "*") + variableLiteral.getName() + ")" +
- variableLiteral.getChild().map(child -> "." + toVariableExpression(field, typeReference, child, parserArguments, serializerArguments, false, suppressPointerAccess)).orElse("");
+ variableLiteral.getChild().map(child -> "." + capitalize(toVariableExpression(field, typeReference, child, parserArguments, serializerArguments, false, suppressPointerAccess))).orElse("");
}
private String toConstantVariableExpression(Field field, TypeReference typeReference, VariableLiteral variableLiteral, List<Argument> parserArguments, List<Argument> serializerArguments, boolean suppressPointerAccess, Tracer tracer) {
diff --git a/code-generation/language-go/src/main/resources/templates/go/data-io-template.go.ftlh b/code-generation/language-go/src/main/resources/templates/go/data-io-template.go.ftlh
index ce1292a..dd33841 100644
--- a/code-generation/language-go/src/main/resources/templates/go/data-io-template.go.ftlh
+++ b/code-generation/language-go/src/main/resources/templates/go/data-io-template.go.ftlh
@@ -72,9 +72,36 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if parserArguments?has_conte
readBuffer.PullContext("${type.name}")
switch {
<#list type.switchField.cases as case>
- <#if case.discriminatorValueTerms?has_content>case <#list case.discriminatorValueTerms as discriminatorValueTerm>${helper.toParseExpression(null, null, type.switchField.discriminatorExpressions[discriminatorValueTerm?index], parserArguments)} == <#if helper.isComplexTypeReference(parserArguments[discriminatorValueTerm?index].type)><#if helper.isEnumTypeReference(parserArguments[discriminatorValueTerm?index].type)>${helper.getLanguageTypeNameForTypeReference(parserArguments[discri [...]
+ <@compress single_line=true>
+ <#if case.discriminatorValueTerms?has_content>
+ case
+ <#list case.discriminatorValueTerms as discriminatorValueTerm>
+ ${helper.toParseExpression(null, null, type.switchField.discriminatorExpressions[discriminatorValueTerm?index], parserArguments)} ==
+ <#if helper.isComplexTypeReference(parserArguments[discriminatorValueTerm?index].type)>
+ <#if helper.isEnumTypeReference(parserArguments[discriminatorValueTerm?index].type)>
+ <#assign enumType=helper.getLanguageTypeNameForTypeReference(parserArguments[discriminatorValueTerm?index].type)>
+ <#assign enumTypeWithoutTraces=tracer.removeTraces(enumType)>
+ <#assign enumTypeTraces=tracer.extractTraces(enumType)>
+ <#assign enumValue=helper.toParseExpression(null, parserArguments[discriminatorValueTerm?index].type, discriminatorValueTerm, parserArguments)>
+ <#assign enumValueWithoutTraces=tracer.removeTraces(enumValue)>
+ <#assign enumValueTraces=tracer.extractTraces(enumValue)>
+ ${enumTypeTraces}${enumValueTraces}${enumTypeWithoutTraces}_${enumValueWithoutTraces}
+ <#else>
+ ${helper.toParseExpression(null, parserArguments[discriminatorValueTerm?index].type, discriminatorValueTerm, parserArguments)}
+ </#if>
+ <#else>
+ ${helper.toParseExpression(null, parserArguments[discriminatorValueTerm?index].type, discriminatorValueTerm, parserArguments)}
+ </#if>
+ <#sep> && </#sep>
+ </#list>
+ <#else>
+ default
+ </#if>: // ${case.name}
+ </...@compress>
<#assign valueDefined=false>
<#if case.name == "Struct">
+
+ // Struct
_map := map[string]api.PlcValue{}
<#assign valueDefined=true>
</#if>
@@ -181,7 +208,32 @@ func ${type.name}Serialize(writeBuffer utils.WriteBuffer, value api.PlcValue<#if
switch {
<#assign defaultSet=false>
<#list type.switchField.cases as case>
- <#if case.discriminatorValueTerms?has_content>case <#list case.discriminatorValueTerms as discriminatorValueTerm>${helper.toParseExpression(null, null, type.switchField.discriminatorExpressions[discriminatorValueTerm?index], parserArguments)} == <#if helper.isComplexTypeReference(parserArguments[discriminatorValueTerm?index].type)><#if helper.isEnumTypeReference(parserArguments[discriminatorValueTerm?index].type)>${helper.getLanguageTypeNameForTypeReference(parserArguments[discri [...]
+ <@compress single_line=true>
+ <#if case.discriminatorValueTerms?has_content>
+ case
+ <#list case.discriminatorValueTerms as discriminatorValueTerm>
+ ${helper.toParseExpression(null, null, type.switchField.discriminatorExpressions[discriminatorValueTerm?index], parserArguments)} ==
+ <#if helper.isComplexTypeReference(parserArguments[discriminatorValueTerm?index].type)>
+ <#if helper.isEnumTypeReference(parserArguments[discriminatorValueTerm?index].type)>
+ <#assign enumType=helper.getLanguageTypeNameForTypeReference(parserArguments[discriminatorValueTerm?index].type)>
+ <#assign enumTypeWithoutTraces=tracer.removeTraces(enumType)>
+ <#assign enumTypeTraces=tracer.extractTraces(enumType)>
+ <#assign enumValue=helper.toParseExpression(null, parserArguments[discriminatorValueTerm?index].type, discriminatorValueTerm, parserArguments)>
+ <#assign enumValueWithoutTraces=tracer.removeTraces(enumValue)>
+ <#assign enumValueTraces=tracer.extractTraces(enumValue)>
+ ${enumTypeTraces}${enumValueTraces}${enumTypeWithoutTraces}_${enumValueWithoutTraces}
+ <#else>
+ ${helper.toParseExpression(null, parserArguments[discriminatorValueTerm?index].type, discriminatorValueTerm, parserArguments)}
+ </#if>
+ <#else>
+ ${helper.toParseExpression(null, parserArguments[discriminatorValueTerm?index].type, discriminatorValueTerm, parserArguments)}
+ </#if>
+ <#sep> && </#sep>
+ </#list>
+ <#else>
+ default<#assign defaultSet=true>
+ </#if>: // ${case.name}
+ </...@compress>
<#list case.fields as field>
<#switch field.typeName>
<#case "array">
diff --git a/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh b/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
index a355ca6..ab35616 100644
--- a/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
+++ b/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
@@ -125,7 +125,28 @@ type I${type.name} interface {
<#-- If the discriminator name matches that of another field, suppress the methods generation -->
<#if !type.isNonDiscriminatorField(discriminatorName)>
func (m *${type.name}) ${discriminatorName?cap_first}() ${helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])} {
- return <#if discriminatorTerm??><#if helper.isComplexTypeReference(helper.getDiscriminatorTypes()[discriminatorName])><#if helper.isEnumTypeReference(helper.getDiscriminatorTypes()[discriminatorName])>${helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])}_${helper.toParseExpression(null, helper.getDiscriminatorTypes()[discriminatorName], discriminatorTerm, parserArguments)}<#else>${helper.toParseExpression(null, helper.getDiscriminatorTypes()[di [...]
+ <@compress single_line=true>
+ return
+ <#if discriminatorTerm??>
+ <#if helper.isComplexTypeReference(helper.getDiscriminatorTypes()[discriminatorName])>
+ <#if helper.isEnumTypeReference(helper.getDiscriminatorTypes()[discriminatorName])>
+ <#assign enumType=helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])>
+ <#assign enumTypeWithoutTraces=tracer.removeTraces(enumType)>
+ <#assign enumTypeTraces=tracer.extractTraces(enumType)>
+ <#assign enumValue=helper.toParseExpression(null, helper.getDiscriminatorTypes()[discriminatorName], discriminatorTerm, parserArguments)>
+ <#assign enumValueWithoutTraces=tracer.removeTraces(enumValue)>
+ <#assign enumValueTraces=tracer.extractTraces(enumValue)>
+ ${enumTypeTraces}${enumValueTraces}${enumTypeWithoutTraces}_${enumValueWithoutTraces}
+ <#else>
+ ${helper.toParseExpression(null, helper.getDiscriminatorTypes()[discriminatorName], discriminatorTerm, parserArguments)}
+ </#if>
+ <#else>
+ ${helper.toParseExpression(null, helper.getDiscriminatorTypes()[discriminatorName], discriminatorTerm, parserArguments)}
+ </#if>
+ <#else>
+ ${helper.getNullValueForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])}
+ </#if>
+ </...@compress>
}
</#if>
@@ -1075,7 +1096,13 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
<#if helper.discriminatorValueNeedsStringEqualityCheck(discriminatorExpression)>"${helper.toParseExpression(null, discriminatorType,discriminatorValueTerm, parserArguments)}"
<#elseif helper.isComplexTypeReference(discriminatorType)>
<#if helper.isEnumTypeReference(discriminatorType)>
- ${helper.getLanguageTypeNameForTypeReference(discriminatorType)}_${helper.toParseExpression(null, discriminatorType,discriminatorValueTerm, parserArguments)}
+ <#assign enumType=helper.getLanguageTypeNameForTypeReference(discriminatorType)>
+ <#assign enumTypeWithoutTraces=tracer.removeTraces(enumType)>
+ <#assign enumTypeTraces=tracer.extractTraces(enumType)>
+ <#assign enumValue=helper.toParseExpression(null, discriminatorType,discriminatorValueTerm, parserArguments)>
+ <#assign enumValueWithoutTraces=tracer.removeTraces(enumValue)>
+ <#assign enumValueTraces=tracer.extractTraces(enumValue)>
+ ${enumTypeTraces}${enumValueTraces}${enumTypeWithoutTraces}_${enumValueWithoutTraces}
<#else>
${helper.toParseExpression(null, discriminatorType,discriminatorValueTerm, parserArguments)}
</#if>