You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/10/08 15:42:58 UTC
[plc4x] branch feature/plc4go updated: - Fixed the last
modbus-related issue in the code generation
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch feature/plc4go
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/feature/plc4go by this push:
new 38b2552 - Fixed the last modbus-related issue in the code generation
38b2552 is described below
commit 38b2552f7bfe80835ad250c4c51e32be7d58b78e
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Thu Oct 8 17:40:10 2020 +0200
- Fixed the last modbus-related issue in the code generation
---
.../language/go/GoLanguageTemplateHelper.java | 79 +++++++++++++++++++++-
.../resources/templates/go/model-template.ftlh | 4 +-
2 files changed, 80 insertions(+), 3 deletions(-)
diff --git a/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java b/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
index 4a92a57..8e2869c 100644
--- a/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
+++ b/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
@@ -28,6 +28,7 @@ import org.apache.plc4x.plugins.codegenerator.types.fields.*;
import org.apache.plc4x.plugins.codegenerator.types.references.*;
import org.apache.plc4x.plugins.codegenerator.types.terms.*;
+import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Function;
@@ -752,11 +753,87 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
// For Constant field: "strconv"
if(((ComplexTypeDefinition) getThisTypeDefinition()).getFields().stream().anyMatch(field ->
- (field instanceof ReservedField))) {
+ (field instanceof ConstField))) {
imports.add("\"strconv\"");
}
return imports;
}
+ public String getVariableName(Field field) {
+ if(!(field instanceof NamedField)) {
+ return "_";
+ }
+ NamedField namedField = (NamedField) field;
+
+ String name = null;
+ for (Field curField : ((ComplexTypeDefinition) getThisTypeDefinition()).getFields()) {
+ if(curField == field) {
+ name = namedField.getName();
+ } else if(name != null) {
+ if(curField instanceof ArrayField) {
+ ArrayField arrayField = (ArrayField) curField;
+ if(arrayField.getLoopExpression().contains(name)) {
+ return name;
+ }
+ } else if(curField instanceof ChecksumField) {
+ ChecksumField checksumField = (ChecksumField) curField;
+ if(checksumField.getChecksumExpression().contains(name)) {
+ return name;
+ }
+ } else if(curField instanceof ImplicitField) {
+ ImplicitField implicitField = (ImplicitField) curField;
+ if(implicitField.getSerializeExpression().contains(name)) {
+ return name;
+ }
+ } else if(curField instanceof ManualArrayField) {
+ ManualArrayField manualArrayField = (ManualArrayField) curField;
+ if(manualArrayField.getLengthExpression().contains(name)) {
+ return name;
+ }
+ if(manualArrayField.getLoopExpression().contains(name)) {
+ return name;
+ }
+ if(manualArrayField.getParseExpression().contains(name)) {
+ return name;
+ }
+ if(manualArrayField.getSerializeExpression().contains(name)) {
+ return name;
+ }
+ } else if(curField instanceof ManualField) {
+ ManualField manualField = (ManualField) curField;
+ if(manualField.getLengthExpression().contains(name)) {
+ return name;
+ }
+ if(manualField.getParseExpression().contains(name)) {
+ return name;
+ }
+ if(manualField.getSerializeExpression().contains(name)) {
+ return name;
+ }
+ } else if(curField instanceof OptionalField) {
+ OptionalField optionalField = (OptionalField) curField;
+ if(optionalField.getConditionExpression().contains(name)) {
+ return name;
+ }
+ } else if(curField instanceof SwitchField) {
+ SwitchField switchField = (SwitchField) curField;
+ for (Term discriminatorExpression : switchField.getDiscriminatorExpressions()) {
+ if(discriminatorExpression.contains(name)) {
+ return name;
+ }
+ }
+ } else if(curField instanceof VirtualField) {
+ VirtualField virtualField = (VirtualField) curField;
+ if(virtualField.getValueExpression().contains(name)) {
+ return name;
+ }
+ }
+ }
+ }
+
+ return "_";
+ }
+
+
}
diff --git a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
index af17026..6c799cb 100644
--- a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
@@ -342,7 +342,7 @@ func ${type.name}Parse(io spi.ReadBuffer<#if type.parserArguments?has_content>,
<#assign simpleTypeReference = discriminatorField.type>
// Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
- var ${discriminatorField.name} ${helper.getLanguageTypeNameForField(field)} = ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ var ${helper.getVariableName(field)} ${helper.getLanguageTypeNameForField(field)} = ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
<#break>
<#case "enum">
<#assign enumField = field>
@@ -355,7 +355,7 @@ func ${type.name}Parse(io spi.ReadBuffer<#if type.parserArguments?has_content>,
<#assign simpleTypeReference = implicitField.type>
// Implicit Field (${implicitField.name}) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
- var ${implicitField.name} ${helper.getLanguageTypeNameForField(field)} = ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ var ${helper.getVariableName(field)} ${helper.getLanguageTypeNameForField(field)} = ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
<#break>
<#case "manualArray">
<#assign manualArrayField = field>