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 2021/10/22 18:16:26 UTC

[plc4x] branch feature/mspec-ng updated: - Continued cleaning up the enum work a bit

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/mspec-ng
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/feature/mspec-ng by this push:
     new 7993338  - Continued cleaning up the enum work a bit
7993338 is described below

commit 7993338d985afcb037bc126d7fc5c51b9e0cc685
Author: cdutz <ch...@c-ware.de>
AuthorDate: Fri Oct 22 20:15:39 2021 +0200

    - Continued cleaning up the enum work a bit
---
 .../src/main/resources/templates/java/io-template.java.ftlh         | 5 -----
 .../protocol-base-mspec/src/test/resources/mspec.example            | 2 +-
 .../protocol-base-mspec/src/test/resources/mspec.example2           | 6 +++---
 .../protocol-test/src/main/resources/protocols/test/test.mspec      | 6 +++---
 .../apache/plc4x/java/spi/codegen/fields/FieldReaderFactory.java    | 4 ++++
 5 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh b/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh
index 2bab6b3..1426855 100644
--- a/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh
+++ b/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh
@@ -536,11 +536,6 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         writeBuffer.pushContext("${enumField.name}");
         // Enum field (${enumField.name})
         ${helper.getLanguageTypeNameForField(field)} ${enumField.name} = (${helper.getLanguageTypeNameForField(enumField)}) _value.get${enumField.name?cap_first}();
-        <#if enumField.fieldName.isPresent()>
-        ${helper.getWriteBufferWriteMethodCall(helper.getTypeDefinitionForTypeReference(enumField.type).name, helper.getEnumFieldSimpleTypeReference(enumField.type, enumField.fieldName.orElseThrow()), "(" + enumField.name + ".get" + enumField.fieldName.orElseThrow()?cap_first + "())", enumField, "WithReaderWriterArgs.WithAdditionalStringRepresentation(${enumField.name}.name())")};
-        <#else>
-        ${helper.getWriteBufferWriteMethodCall(helper.getTypeDefinitionForTypeReference(enumField.type).name, helper.getEnumBaseTypeReference(enumField.type), "(" + enumField.name + ".getValue())", enumField, "WithReaderWriterArgs.WithAdditionalStringRepresentation(${enumField.name}.name())")};
-        </#if>
         writeBuffer.popContext("${enumField.name}");
         <#break>
     <#case "implicit">
diff --git a/code-generation/protocol-base-mspec/src/test/resources/mspec.example b/code-generation/protocol-base-mspec/src/test/resources/mspec.example
index d023901..653a325 100644
--- a/code-generation/protocol-base-mspec/src/test/resources/mspec.example
+++ b/code-generation/protocol-base-mspec/src/test/resources/mspec.example
@@ -138,7 +138,7 @@
     // This contains the AmsPort of the station, from which the packet was sent.
     [simple     uint        16  'sourceAmsPort'                             ]
     // 2 bytes.
-    [enum       CommandId       'commandId'                                 ]
+    [enum       CommandId       'commandId'                         'lalala']
     // 2 bytes.
     [simple     State           'state'                                     ]
     // 4 bytes	Size of the data range. The unit is byte.
diff --git a/code-generation/protocol-base-mspec/src/test/resources/mspec.example2 b/code-generation/protocol-base-mspec/src/test/resources/mspec.example2
index 722da05..2052ac8 100644
--- a/code-generation/protocol-base-mspec/src/test/resources/mspec.example2
+++ b/code-generation/protocol-base-mspec/src/test/resources/mspec.example2
@@ -40,7 +40,7 @@
     [const          uint 8  'constField'        '5']
     // Discriminated Field can't be used in simple type
     //[discriminator  uint 8  'discriminatorField']
-    [enum           EnumType  'enumField']
+    [enum           EnumType  'enumField' 'lalala']
     [implicit       uint 8  'implicitField' 'simpleField']
     [optional       uint 8  'optionalField' 'simpleField == 5']
     [padding        uint 8  'paddingField'  '0x00'  'simpleField']
@@ -60,7 +60,7 @@
     [const          uint 8  'constField'        '5']
     // Discriminated Field can't be used in simple type
     //[discriminator  uint 8  'discriminatorField']
-    [enum           EnumType  'enumField']
+    [enum           EnumType  'enumField' 'lalala']
     [implicit       uint 8  'implicitField' 'simpleField']
     [optional       uint 8  'optionalField' 'simpleField == 5']
     [padding        uint 8  'paddingField'  '0x00'  'simpleField']
@@ -172,7 +172,7 @@
 ]
 
 [type 'EnumTypeTest'
-    [enum           EnumType  'enumField']
+    [enum           EnumType  'enumField' 'lalala']
 ]
 
 [type 'PascalStringTypeTest'
diff --git a/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec b/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec
index 2a50368..12c1a8a 100644
--- a/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec
+++ b/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec
@@ -40,7 +40,7 @@
     [const          uint 8  'constField'        '5']
     // Discriminated Field can't be used in simple type
     //[discriminator  uint 8  'discriminatorField']
-    [enum           EnumType  'enumField']
+    [enum           EnumType  'enumField' 'lalala']
     [implicit       uint 8  'implicitField' 'simpleField']
     [optional       uint 8  'optionalField' 'simpleField == 5']
     [padding        uint 8  'paddingField'  '0x00'  'simpleField']
@@ -60,7 +60,7 @@
     [const          uint 8  'constField'        '5']
     // Discriminated Field can't be used in simple type
     //[discriminator  uint 8  'discriminatorField']
-    [enum           EnumType  'enumField']
+    [enum           EnumType  'enumField' 'lalala']
     [implicit       uint 8  'implicitField' 'simpleField']
     [optional       uint 8  'optionalField' 'simpleField == 5']
     [padding        uint 8  'paddingField'  '0x00'  'simpleField']
@@ -172,7 +172,7 @@
 ]
 
 [type 'EnumTypeTest'
-    [enum           EnumType  'enumField']
+    [enum           EnumType  'enumField' 'lalala']
 ]
 
 [type 'PascalStringTypeTest'
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderFactory.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderFactory.java
index 567a050..283db6a 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderFactory.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderFactory.java
@@ -96,6 +96,10 @@ public class FieldReaderFactory {
         return new FieldReaderDiscriminator<T>().readField(logicalName, dataReader, readerArgs);
     }
 
+    public static <T> T readEnumField(String logicalName, String innerName, DataReader<T> dataReader, WithReaderArgs... readerArgs) throws ParseException {
+        return new FieldReaderEnum<T>().readField(logicalName, innerName, dataReader, readerArgs);
+    }
+
     public static <T> T readImplicitField(String logicalName, DataReader<T> dataReader, WithReaderArgs... readerArgs) throws ParseException {
         return new FieldReaderImplicit<T>().readField(logicalName, dataReader, readerArgs);
     }