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>