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>