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/07 17:05:55 UTC
[plc4x] branch feature/mspec-ng updated: fix: Continued
implementing the arguments in the parser fix: Set a byteOrder argument on
every root-type in our mspec grammars
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 611bed9 fix: Continued implementing the arguments in the parser fix: Set a byteOrder argument on every root-type in our mspec grammars
611bed9 is described below
commit 611bed990ce35c10f8e1d21c1bfd209304e368c4
Author: cdutz <ch...@c-ware.de>
AuthorDate: Thu Oct 7 19:05:43 2021 +0200
fix: Continued implementing the arguments in the parser
fix: Set a byteOrder argument on every root-type in our mspec grammars
---
.../definitions/DefaultComplexTypeDefinition.java | 10 +-
.../definitions/DefaultDataIoTypeDefinition.java | 6 +-
.../DefaultDiscriminatedComplexTypeDefinition.java | 6 +-
.../definitions/DefaultEnumTypeDefinition.java | 7 +-
.../model/definitions/DefaultTypeDefinition.java | 19 ++-
.../mspec/model/fields/DefaultAbstractField.java | 5 +-
.../mspec/model/fields/DefaultArrayField.java | 5 +-
.../mspec/model/fields/DefaultAssertField.java | 5 +-
.../mspec/model/fields/DefaultChecksumField.java | 9 +-
.../mspec/model/fields/DefaultConstField.java | 9 +-
.../model/fields/DefaultDiscriminatorField.java | 9 +-
.../mspec/model/fields/DefaultEnumField.java | 5 +-
.../language/mspec/model/fields/DefaultField.java | 22 ++-
.../mspec/model/fields/DefaultImplicitField.java | 9 +-
.../model/fields/DefaultManualArrayField.java | 5 +-
.../mspec/model/fields/DefaultManualField.java | 5 +-
.../mspec/model/fields/DefaultOptionalField.java | 5 +-
.../mspec/model/fields/DefaultPaddingField.java | 5 +-
.../mspec/model/fields/DefaultReservedField.java | 9 +-
.../mspec/model/fields/DefaultSimpleField.java | 5 +-
.../mspec/model/fields/DefaultSwitchField.java | 12 +-
.../mspec/model/fields/DefaultTaggedField.java | 40 ------
.../mspec/model/fields/DefaultUnknownField.java | 9 +-
.../mspec/model/fields/DefaultVirtualField.java | 9 +-
.../mspec/parser/MessageFormatListener.java | 159 +++++++++++++--------
.../main/resources/protocols/abeth/ab-eth.mspec | 2 +-
.../resources/protocols/ads/ads-discovery.mspec | 22 +--
.../ads/src/main/resources/protocols/ads/ads.mspec | 2 +-
.../resources/protocols/bacnetip/bacnetip.mspec | 2 +-
.../src/main/resources/protocols/can/canopen.mspec | 2 +-
.../df1/src/main/resources/protocols/df1/df1.mspec | 2 +-
.../eip/src/main/resources/protocols/eip/eip.mspec | 2 +-
.../main/resources/protocols/firmata/firmata.mspec | 2 +-
.../main/resources/protocols/can/genericcan.mspec | 2 +-
.../resources/protocols/knxnetip/knxnetip.mspec | 2 +-
.../main/resources/protocols/modbus/modbus.mspec | 4 +-
protocols/opcua/src/main/xslt/opc-manual.xsl | 2 +-
.../src/main/resources/protocols/plc4x/plc4x.mspec | 2 +-
.../resources/protocols/profinet/profinet.mspec | 44 +++---
.../s7/src/main/resources/protocols/s7/s7.mspec | 2 +-
.../resources/protocols/simulated/simulated.mspec | 2 +-
.../main/resources/protocols/can/socketcan.mspec | 2 +-
42 files changed, 251 insertions(+), 236 deletions(-)
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultComplexTypeDefinition.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultComplexTypeDefinition.java
index 9fdae0b..6007042 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultComplexTypeDefinition.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultComplexTypeDefinition.java
@@ -21,11 +21,9 @@ package org.apache.plc4x.plugins.codegenerator.language.mspec.model.definitions;
import org.apache.plc4x.plugins.codegenerator.types.definitions.Argument;
import org.apache.plc4x.plugins.codegenerator.types.definitions.ComplexTypeDefinition;
import org.apache.plc4x.plugins.codegenerator.types.fields.*;
+import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
public class DefaultComplexTypeDefinition extends DefaultTypeDefinition implements ComplexTypeDefinition {
@@ -33,8 +31,8 @@ public class DefaultComplexTypeDefinition extends DefaultTypeDefinition implemen
private final boolean isAbstract;
private final List<Field> fields;
- public DefaultComplexTypeDefinition(String name, List<Argument> parserArguments, List<String> tags, boolean isAbstract, List<Field> fields) {
- super(name, parserArguments, tags);
+ public DefaultComplexTypeDefinition(String name, Map<String, Term> attributes, List<Argument> parserArguments, boolean isAbstract, List<Field> fields) {
+ super(name, attributes, parserArguments);
this.isAbstract = isAbstract;
this.fields = Objects.requireNonNull(fields);
}
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDataIoTypeDefinition.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDataIoTypeDefinition.java
index 396063c..9b92ae4 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDataIoTypeDefinition.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDataIoTypeDefinition.java
@@ -24,8 +24,10 @@ import org.apache.plc4x.plugins.codegenerator.types.definitions.DataIoTypeDefini
import org.apache.plc4x.plugins.codegenerator.types.fields.SwitchField;
import org.apache.plc4x.plugins.codegenerator.types.references.DefaultComplexTypeReference;
import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
+import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
public class DefaultDataIoTypeDefinition extends DefaultTypeDefinition implements DataIoTypeDefinition {
@@ -33,8 +35,8 @@ public class DefaultDataIoTypeDefinition extends DefaultTypeDefinition implement
private final SwitchField switchField;
private final TypeReference type;
- public DefaultDataIoTypeDefinition(String name, List<Argument> parserArguments, List<String> tags, SwitchField switchField) {
- super(name, parserArguments, tags);
+ public DefaultDataIoTypeDefinition(String name, Map<String, Term> attributes, List<Argument> parserArguments, SwitchField switchField) {
+ super(name, attributes, parserArguments);
this.switchField = Objects.requireNonNull(switchField);
if (parserArguments.size() < 1) {
throw new IllegalStateException();
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDiscriminatedComplexTypeDefinition.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDiscriminatedComplexTypeDefinition.java
index 9bbec47..c073451 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDiscriminatedComplexTypeDefinition.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDiscriminatedComplexTypeDefinition.java
@@ -22,16 +22,18 @@ import org.apache.plc4x.plugins.codegenerator.types.definitions.Argument;
import org.apache.plc4x.plugins.codegenerator.types.definitions.DiscriminatedComplexTypeDefinition;
import org.apache.plc4x.plugins.codegenerator.types.fields.DiscriminatorField;
import org.apache.plc4x.plugins.codegenerator.types.fields.Field;
+import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
public class DefaultDiscriminatedComplexTypeDefinition extends DefaultComplexTypeDefinition implements DiscriminatedComplexTypeDefinition {
private final List<String> discriminatorValues;
- public DefaultDiscriminatedComplexTypeDefinition(String name, List<Argument> parserArguments, List<String> tags, List<String> discriminatorValues, List<Field> fields) {
- super(name, parserArguments, tags, false, fields);
+ public DefaultDiscriminatedComplexTypeDefinition(String name, Map<String, Term> attributes, List<Argument> parserArguments, List<String> discriminatorValues, List<Field> fields) {
+ super(name, attributes, parserArguments, false, fields);
this.discriminatorValues = Objects.requireNonNull(discriminatorValues);
}
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultEnumTypeDefinition.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultEnumTypeDefinition.java
index 730213f..a149d8a 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultEnumTypeDefinition.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultEnumTypeDefinition.java
@@ -22,6 +22,7 @@ import org.apache.plc4x.plugins.codegenerator.types.definitions.Argument;
import org.apache.plc4x.plugins.codegenerator.types.definitions.EnumTypeDefinition;
import org.apache.plc4x.plugins.codegenerator.types.enums.EnumValue;
import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
+import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.*;
@@ -31,9 +32,9 @@ public class DefaultEnumTypeDefinition extends DefaultTypeDefinition implements
private final List<EnumValue> enumValues;
private final Map<String, TypeReference> constants;
- public DefaultEnumTypeDefinition(String name, TypeReference type, List<EnumValue> enumValues,
- List<Argument> constants, List<String> tags) {
- super(name, constants, tags);
+ public DefaultEnumTypeDefinition(String name, TypeReference type, Map<String, Term> attributes, List<EnumValue> enumValues,
+ List<Argument> constants) {
+ super(name, attributes, constants);
this.type = Objects.requireNonNull(type);
this.enumValues = Objects.requireNonNull(enumValues);
this.constants = new HashMap<>();
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultTypeDefinition.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultTypeDefinition.java
index a105dfd..de8b9ab 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultTypeDefinition.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultTypeDefinition.java
@@ -23,22 +23,24 @@ import org.apache.plc4x.plugins.codegenerator.types.definitions.Argument;
import org.apache.plc4x.plugins.codegenerator.types.definitions.TypeDefinition;
import org.apache.plc4x.plugins.codegenerator.types.references.DefaultComplexTypeReference;
import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
+import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
public abstract class DefaultTypeDefinition {
protected final String name;
+ private final Map<String, Term> attributes;
protected final List<Argument> parserArguments;
- protected final List<String> tags;
protected TypeDefinition parentType;
- public DefaultTypeDefinition(String name, List<Argument> parserArguments, List<String> tags) {
+ public DefaultTypeDefinition(String name, Map<String, Term> attributes, List<Argument> parserArguments) {
this.name = Objects.requireNonNull(name);
+ this.attributes = attributes;
this.parserArguments = parserArguments;
- this.tags = tags;
this.parentType = null;
}
@@ -46,12 +48,15 @@ public abstract class DefaultTypeDefinition {
return name;
}
- public Optional<List<Argument>> getParserArguments() {
- return Optional.ofNullable(parserArguments);
+ public Optional<Term> getAttribute(String attributeName) {
+ if(attributes.containsKey(attributeName)) {
+ return Optional.of(attributes.get(attributeName));
+ }
+ return Optional.empty();
}
- public Optional<List<String>> getTags() {
- return Optional.ofNullable(tags);
+ public Optional<List<Argument>> getParserArguments() {
+ return Optional.ofNullable(parserArguments);
}
public TypeDefinition getParentType() {
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultAbstractField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultAbstractField.java
index e2cd52a..d83e723 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultAbstractField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultAbstractField.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -32,8 +33,8 @@ public class DefaultAbstractField extends DefaultField implements AbstractField
private final String name;
private final List<Term> params;
- public DefaultAbstractField(List<String> tags, TypeReference type, String name, List<Term> params) {
- super(tags);
+ public DefaultAbstractField(Map<String, Term> attributes, TypeReference type, String name, List<Term> params) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.params = params;
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultArrayField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultArrayField.java
index 6592155..0ce991cf 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultArrayField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultArrayField.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -34,8 +35,8 @@ public class DefaultArrayField extends DefaultField implements ArrayField {
private final Term loopExpression;
private final List<Term> params;
- public DefaultArrayField(List<String> tags, TypeReference type, String name, LoopType loopType, Term loopExpression, List<Term> params) {
- super(tags);
+ public DefaultArrayField(Map<String, Term> attributes, TypeReference type, String name, LoopType loopType, Term loopExpression, List<Term> params) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.loopType = Objects.requireNonNull(loopType);
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultAssertField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultAssertField.java
index 4ee6a9f..ef14dc7 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultAssertField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultAssertField.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -33,8 +34,8 @@ public class DefaultAssertField extends DefaultField implements AssertField {
private final Term conditionExpression;
private final List<Term> params;
- public DefaultAssertField(List<String> tags, TypeReference type, String name, Term conditionExpression, List<Term> params) {
- super(tags);
+ public DefaultAssertField(Map<String, Term> attributes, TypeReference type, String name, Term conditionExpression, List<Term> params) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.conditionExpression = Objects.requireNonNull(conditionExpression);
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultChecksumField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultChecksumField.java
index fe0ad56..17b62b2 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultChecksumField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultChecksumField.java
@@ -22,10 +22,7 @@ import org.apache.plc4x.plugins.codegenerator.types.fields.ChecksumField;
import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
public class DefaultChecksumField extends DefaultField implements ChecksumField {
@@ -33,8 +30,8 @@ public class DefaultChecksumField extends DefaultField implements ChecksumField
private final String name;
private final Term checksumExpression;
- public DefaultChecksumField(List<String> tags, TypeReference type, String name, Term checksumExpression) {
- super(tags);
+ public DefaultChecksumField(Map<String, Term> attributes, TypeReference type, String name, Term checksumExpression) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.checksumExpression = Objects.requireNonNull(checksumExpression);
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultConstField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultConstField.java
index 26f7a67..681f2f8 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultConstField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultConstField.java
@@ -22,10 +22,7 @@ import org.apache.plc4x.plugins.codegenerator.types.fields.ConstField;
import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
public class DefaultConstField extends DefaultField implements ConstField {
@@ -33,8 +30,8 @@ public class DefaultConstField extends DefaultField implements ConstField {
private final String name;
private final Object referenceValue;
- public DefaultConstField(List<String> tags, TypeReference type, String name, Object referenceValue) {
- super(tags);
+ public DefaultConstField(Map<String, Term> attributes, TypeReference type, String name, Object referenceValue) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.referenceValue = Objects.requireNonNull(referenceValue);
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultDiscriminatorField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultDiscriminatorField.java
index 3e23b6d..6ff4481 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultDiscriminatorField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultDiscriminatorField.java
@@ -22,18 +22,15 @@ import org.apache.plc4x.plugins.codegenerator.types.fields.DiscriminatorField;
import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
public class DefaultDiscriminatorField extends DefaultField implements DiscriminatorField {
private final TypeReference type;
private final String name;
- public DefaultDiscriminatorField(List<String> tags, TypeReference type, String name) {
- super(tags);
+ public DefaultDiscriminatorField(Map<String, Term> attributes, TypeReference type, String name) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
}
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultEnumField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultEnumField.java
index 96db23c..f56fdf6 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultEnumField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultEnumField.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -33,8 +34,8 @@ public class DefaultEnumField extends DefaultField implements EnumField {
private final String fieldName;
private final List<Term> params;
- public DefaultEnumField(List<String> tags, TypeReference type, String name, String fieldName, List<Term> params) {
- super(tags);
+ public DefaultEnumField(Map<String, Term> attributes, TypeReference type, String name, String fieldName, List<Term> params) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.fieldName = fieldName;
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultField.java
index 0bed904..7491eb8 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultField.java
@@ -18,12 +18,26 @@
*/
package org.apache.plc4x.plugins.codegenerator.language.mspec.model.fields;
-import java.util.List;
+import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-public abstract class DefaultField extends DefaultTaggedField {
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
- protected DefaultField(List<String> tags) {
- super(tags);
+public abstract class DefaultField {
+
+ private final Map<String, Term> attributes;
+
+ protected DefaultField(Map<String, Term> attributes) {
+ super();
+ this.attributes = Objects.requireNonNull(attributes);
+ }
+
+ public Optional<Term> getAttribute(String attributeName) {
+ if(attributes.containsKey(attributeName)) {
+ return Optional.of(attributes.get(attributeName));
+ }
+ return Optional.empty();
}
}
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultImplicitField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultImplicitField.java
index e12b333..c00597d 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultImplicitField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultImplicitField.java
@@ -22,10 +22,7 @@ import org.apache.plc4x.plugins.codegenerator.types.fields.ImplicitField;
import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
public class DefaultImplicitField extends DefaultField implements ImplicitField {
@@ -33,8 +30,8 @@ public class DefaultImplicitField extends DefaultField implements ImplicitField
private final String name;
private final Term serializeExpression;
- public DefaultImplicitField(List<String> tags, TypeReference type, String name, Term serializeExpression) {
- super(tags);
+ public DefaultImplicitField(Map<String, Term> attributes, TypeReference type, String name, Term serializeExpression) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.serializeExpression = Objects.requireNonNull(serializeExpression);
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualArrayField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualArrayField.java
index 80d875a..40463ad 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualArrayField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualArrayField.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -37,8 +38,8 @@ public class DefaultManualArrayField extends DefaultField implements ManualArray
private final Term lengthExpression;
private final List<Term> params;
- public DefaultManualArrayField(List<String> tags, TypeReference type, String name, LoopType loopType, Term loopExpression, Term parseExpression, Term serializeExpression, Term lengthExpression, List<Term> params) {
- super(tags);
+ public DefaultManualArrayField(Map<String, Term> attributes, TypeReference type, String name, LoopType loopType, Term loopExpression, Term parseExpression, Term serializeExpression, Term lengthExpression, List<Term> params) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.loopType = Objects.requireNonNull(loopType);
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualField.java
index 6777652..926f978 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualField.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -35,8 +36,8 @@ public class DefaultManualField extends DefaultField implements ManualField {
private final Term lengthExpression;
private final List<Term> params;
- public DefaultManualField(List<String> tags, TypeReference type, String name, Term parseExpression, Term serializeExpression, Term lengthExpression, List<Term> params) {
- super(tags);
+ public DefaultManualField(Map<String, Term> attributes, TypeReference type, String name, Term parseExpression, Term serializeExpression, Term lengthExpression, List<Term> params) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.parseExpression = Objects.requireNonNull(parseExpression);
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultOptionalField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultOptionalField.java
index 50e5463..295bc17 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultOptionalField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultOptionalField.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -33,8 +34,8 @@ public class DefaultOptionalField extends DefaultField implements OptionalField
private final Term conditionExpression;
private final List<Term> params;
- public DefaultOptionalField(List<String> tags, TypeReference type, String name, Term conditionExpression, List<Term> params) {
- super(tags);
+ public DefaultOptionalField(Map<String, Term> attributes, TypeReference type, String name, Term conditionExpression, List<Term> params) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.conditionExpression = conditionExpression;
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultPaddingField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultPaddingField.java
index 26f63b4..a8a2ad4 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultPaddingField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultPaddingField.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -34,8 +35,8 @@ public class DefaultPaddingField extends DefaultField implements PaddingField {
private final Term paddingCondition;
private final List<Term> params;
- public DefaultPaddingField(List<String> tags, TypeReference type, String name, Term paddingValue, Term paddingCondition, List<Term> params) {
- super(tags);
+ public DefaultPaddingField(Map<String, Term> attributes, TypeReference type, String name, Term paddingValue, Term paddingCondition, List<Term> params) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.paddingValue = Objects.requireNonNull(paddingValue);
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultReservedField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultReservedField.java
index 5d803e1..f12f9b4 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultReservedField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultReservedField.java
@@ -22,18 +22,15 @@ import org.apache.plc4x.plugins.codegenerator.types.fields.ReservedField;
import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
public class DefaultReservedField extends DefaultField implements ReservedField {
private final TypeReference type;
private final Object referenceValue;
- public DefaultReservedField(List<String> tags, TypeReference type, Object referenceValue) {
- super(tags);
+ public DefaultReservedField(Map<String, Term> attributes, TypeReference type, Object referenceValue) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.referenceValue = Objects.requireNonNull(referenceValue);
}
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultSimpleField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultSimpleField.java
index 5b5c3a7..41b4947 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultSimpleField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultSimpleField.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -32,8 +33,8 @@ public class DefaultSimpleField extends DefaultField implements SimpleField {
private final String name;
private final List<Term> params;
- public DefaultSimpleField(List<String> tags, TypeReference type, String name, List<Term> params) {
- super(tags);
+ public DefaultSimpleField(Map<String, Term> attributes, TypeReference type, String name, List<Term> params) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.params = params;
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultSwitchField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultSwitchField.java
index a96b5d2..118b242 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultSwitchField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultSwitchField.java
@@ -27,12 +27,10 @@ import java.util.*;
public class DefaultSwitchField implements SwitchField {
- private final boolean isTry;
private final List<Term> discriminatorExpressions;
private final List<DiscriminatedComplexTypeDefinition> cases;
- public DefaultSwitchField(boolean isTry, List<Term> discriminatorExpressions) {
- this.isTry = isTry;
+ public DefaultSwitchField(List<Term> discriminatorExpressions) {
this.discriminatorExpressions = Objects.requireNonNull(discriminatorExpressions);
this.cases = new LinkedList<>();
}
@@ -50,11 +48,13 @@ public class DefaultSwitchField implements SwitchField {
return cases;
}
+ @Override
+ public Optional<Term> getAttribute(String attributeName) {
+ return Optional.empty();
+ }
+
public Optional<List<Term>> getParams() {
return Optional.of(Collections.emptyList());
}
- public boolean isTry() {
- return isTry;
- }
}
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultTaggedField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultTaggedField.java
deleted file mode 100644
index ce44570..0000000
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultTaggedField.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.plc4x.plugins.codegenerator.language.mspec.model.fields;
-
-import org.apache.plc4x.plugins.codegenerator.types.fields.TaggedField;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-
-public abstract class DefaultTaggedField implements TaggedField {
-
- private final List<String> tags;
-
- public DefaultTaggedField(List<String> tags) {
- this.tags = tags;
- }
-
- @Override
- public Optional<List<String>> getTags() {
- return Optional.ofNullable(tags);
- }
-
-}
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultUnknownField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultUnknownField.java
index 5550e55..8f2f052 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultUnknownField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultUnknownField.java
@@ -22,17 +22,14 @@ import org.apache.plc4x.plugins.codegenerator.types.fields.UnknownField;
import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
public class DefaultUnknownField extends DefaultField implements UnknownField {
private final TypeReference type;
- public DefaultUnknownField(List<String> tags, TypeReference type) {
- super(tags);
+ public DefaultUnknownField(Map<String, Term> attributes, TypeReference type) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
}
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultVirtualField.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultVirtualField.java
index 2b1f35c..a491647 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultVirtualField.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultVirtualField.java
@@ -22,10 +22,7 @@ import org.apache.plc4x.plugins.codegenerator.types.fields.VirtualField;
import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
public class DefaultVirtualField extends DefaultField implements VirtualField {
@@ -33,8 +30,8 @@ public class DefaultVirtualField extends DefaultField implements VirtualField {
private final String name;
private final Term valueExpression;
- public DefaultVirtualField(List<String> tags, TypeReference type, String name, Term valueExpression) {
- super(tags);
+ public DefaultVirtualField(Map<String, Term> attributes, TypeReference type, String name, Term valueExpression) {
+ super(attributes);
this.type = Objects.requireNonNull(type);
this.name = Objects.requireNonNull(name);
this.valueExpression = Objects.requireNonNull(valueExpression);
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java
index 9bddc5a..9566d30 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java
@@ -18,6 +18,7 @@
*/
package org.apache.plc4x.plugins.codegenerator.language.mspec.parser;
+import org.antlr.v4.runtime.RuleContext;
import org.apache.commons.io.IOUtils;
import org.apache.plc4x.plugins.codegenerator.language.mspec.MSpecBaseListener;
import org.apache.plc4x.plugins.codegenerator.language.mspec.MSpecParser;
@@ -50,6 +51,8 @@ public class MessageFormatListener extends MSpecBaseListener {
private Map<String, TypeDefinition> types;
+ private Stack<Map<String, Term>> batchSetAttributes = new Stack<>();
+
public Deque<List<Field>> getParserContexts() {
return parserContexts;
}
@@ -71,6 +74,16 @@ public class MessageFormatListener extends MSpecBaseListener {
@Override
public void enterComplexType(MSpecParser.ComplexTypeContext ctx) {
+ // Set a map of attributes that should be set for all fields.
+ Map<String, Term> curBatchSetAttributes = new HashMap<>();
+ // Add all attributes defined in the current batchSet field.
+ for (MSpecParser.AttributeContext attributeContext : ctx.attributes.attribute()) {
+ Term attributeExpression = getExpressionTerm(attributeContext.value);
+ curBatchSetAttributes.put(attributeContext.name.getText(), attributeExpression);
+ }
+ // Make the new Map the top of the stack.
+ batchSetAttributes.push(curBatchSetAttributes);
+
if (ctx.enumValues != null) {
List<EnumValue> enumContext = new LinkedList<>();
enumContexts.push(enumContext);
@@ -88,6 +101,7 @@ public class MessageFormatListener extends MSpecBaseListener {
parserArguments = getParserArguments(ctx.params.argument());
}
+ final Map<String, Term> attributes = batchSetAttributes.peek();
// Handle enum types.
if (ctx.enumValues != null) {
TypeReference type = (ctx.type != null) ? getTypeReference(ctx.type) : null;
@@ -96,14 +110,14 @@ public class MessageFormatListener extends MSpecBaseListener {
// in case there is no type we default to uint32
type = new DefaultIntegerTypeReference(SimpleTypeReference.SimpleBaseType.UINT, 32);
}
- DefaultEnumTypeDefinition enumType = new DefaultEnumTypeDefinition(typeName, type, enumValues,
- parserArguments, null);
+ DefaultEnumTypeDefinition enumType = new DefaultEnumTypeDefinition(typeName, type, attributes, enumValues,
+ parserArguments);
types.put(typeName, enumType);
enumContexts.pop();
} else if (ctx.dataIoTypeSwitch != null) { // Handle data-io types.
SwitchField switchField = getSwitchField();
DefaultDataIoTypeDefinition type = new DefaultDataIoTypeDefinition(
- typeName, parserArguments, null, switchField);
+ typeName, attributes, parserArguments, switchField);
types.put(typeName, type);
// Set the parent type for all sub-types.
@@ -119,7 +133,8 @@ public class MessageFormatListener extends MSpecBaseListener {
// If the type has sub-types it's an abstract type.
SwitchField switchField = getSwitchField();
boolean abstractType = switchField != null;
- DefaultComplexTypeDefinition type = new DefaultComplexTypeDefinition(typeName, parserArguments, null, abstractType, parserContexts.peek());
+ DefaultComplexTypeDefinition type = new DefaultComplexTypeDefinition(
+ typeName, attributes, parserArguments, abstractType, parserContexts.peek());
types.put(typeName, type);
// Set the parent type for all sub-types.
@@ -135,12 +150,35 @@ public class MessageFormatListener extends MSpecBaseListener {
}
@Override
+ public void enterBatchSetDefinition(MSpecParser.BatchSetDefinitionContext ctx) {
+ // Set a map of attributes that should be set for all fields.
+ Map<String, Term> curBatchSetAttributes = new HashMap<>();
+ // Add all attributes of the lower layers and initialize the new map with it.
+ if(!batchSetAttributes.empty()) {
+ curBatchSetAttributes.putAll(batchSetAttributes.peek());
+ }
+ // Add all attributes defined in the current batchSet field.
+ for (MSpecParser.AttributeContext attributeContext : ctx.attributes.attribute()) {
+ Term attributeExpression = getExpressionTerm(attributeContext.value);
+ curBatchSetAttributes.put(attributeContext.name.getText(), attributeExpression);
+ }
+ // Make the new Map the top of the stack.
+ batchSetAttributes.push(curBatchSetAttributes);
+ }
+
+ @Override
+ public void exitBatchSetDefinition(MSpecParser.BatchSetDefinitionContext ctx) {
+ // Clear the map of attributes.
+ batchSetAttributes.pop();
+ }
+
+ @Override
public void enterAbstractField(MSpecParser.AbstractFieldContext ctx) {
TypeReference type = getTypeReference(ctx.type);
String name = getIdString(ctx.name);
MSpecParser.FieldDefinitionContext fieldDefinitionContext = (MSpecParser.FieldDefinitionContext) ctx.parent.parent;
List<Term> params = getFieldParams(fieldDefinitionContext);
- Field field = new DefaultAbstractField(null, type, name, params);
+ Field field = new DefaultAbstractField(getAttributes(ctx), type, name, params);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -151,11 +189,10 @@ public class MessageFormatListener extends MSpecBaseListener {
TypeReference type = getTypeReference(ctx.type);
String name = getIdString(ctx.name);
ArrayField.LoopType loopType = ArrayField.LoopType.valueOf(ctx.loopType.getText().toUpperCase());
- String loopExpressionString = getExprString(ctx.loopExpression);
- Term loopExpression = getExpressionTerm(loopExpressionString);
+ Term loopExpression = getExpressionTerm(ctx.loopExpression);
MSpecParser.FieldDefinitionContext fieldDefinitionContext = (MSpecParser.FieldDefinitionContext) ctx.parent.parent;
List<Term> params = getFieldParams(fieldDefinitionContext);
- Field field = new DefaultArrayField(null, type, name, loopType, loopExpression, params);
+ Field field = new DefaultArrayField(getAttributes(ctx), type, name, loopType, loopExpression, params);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -165,9 +202,8 @@ public class MessageFormatListener extends MSpecBaseListener {
public void enterChecksumField(MSpecParser.ChecksumFieldContext ctx) {
SimpleTypeReference type = getSimpleTypeReference(ctx.type);
String name = getIdString(ctx.name);
- String checksumExpressionString = getExprString(ctx.checksumExpression);
- Term checksumExpression = getExpressionTerm(checksumExpressionString);
- Field field = new DefaultChecksumField(null, type, name, checksumExpression);
+ Term checksumExpression = getExpressionTerm(ctx.checksumExpression);
+ Field field = new DefaultChecksumField(getAttributes(ctx), type, name, checksumExpression);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -178,7 +214,7 @@ public class MessageFormatListener extends MSpecBaseListener {
TypeReference type = ctx.type.dataType() != null ? getSimpleTypeReference(ctx.type.dataType()) : getTypeReference(ctx.type);
String name = getIdString(ctx.name);
String expected = getExprString(ctx.expected);
- Field field = new DefaultConstField(null, type, name, expected);
+ Field field = new DefaultConstField(getAttributes(ctx), type, name, expected);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -188,7 +224,7 @@ public class MessageFormatListener extends MSpecBaseListener {
public void enterDiscriminatorField(MSpecParser.DiscriminatorFieldContext ctx) {
TypeReference type = getTypeReference(ctx.type);
String name = getIdString(ctx.name);
- Field field = new DefaultDiscriminatorField(null, type, name);
+ Field field = new DefaultDiscriminatorField(getAttributes(ctx), type, name);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -204,7 +240,7 @@ public class MessageFormatListener extends MSpecBaseListener {
}
MSpecParser.FieldDefinitionContext fieldDefinitionContext = (MSpecParser.FieldDefinitionContext) ctx.parent.parent;
List<Term> params = getFieldParams(fieldDefinitionContext);
- Field field = new DefaultEnumField(null, type, name, fieldName, params);
+ Field field = new DefaultEnumField(getAttributes(ctx), type, name, fieldName, params);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -214,9 +250,8 @@ public class MessageFormatListener extends MSpecBaseListener {
public void enterImplicitField(MSpecParser.ImplicitFieldContext ctx) {
SimpleTypeReference type = getSimpleTypeReference(ctx.type);
String name = getIdString(ctx.name);
- String serializeExpressionString = getExprString(ctx.serializeExpression);
- Term serializeExpression = getExpressionTerm(serializeExpressionString);
- Field field = new DefaultImplicitField(null, type, name, serializeExpression);
+ Term serializeExpression = getExpressionTerm(ctx.serializeExpression);
+ Field field = new DefaultImplicitField(getAttributes(ctx), type, name, serializeExpression);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -226,11 +261,10 @@ public class MessageFormatListener extends MSpecBaseListener {
public void enterAssertField(MSpecParser.AssertFieldContext ctx) {
TypeReference type = getTypeReference(ctx.type);
String name = getIdString(ctx.name);
- String conditionExpressionString = getExprString(ctx.condition);
- Term conditionExpression = getExpressionTerm(conditionExpressionString);
+ Term conditionExpression = getExpressionTerm(ctx.condition);
MSpecParser.FieldDefinitionContext fieldDefinitionContext = (MSpecParser.FieldDefinitionContext) ctx.parent.parent;
List<Term> params = getFieldParams(fieldDefinitionContext);
- Field field = new DefaultAssertField(null, type, name, conditionExpression, params);
+ Field field = new DefaultAssertField(getAttributes(ctx), type, name, conditionExpression, params);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -242,17 +276,13 @@ public class MessageFormatListener extends MSpecBaseListener {
String name = getIdString(ctx.name);
ManualArrayField.LoopType loopType = ManualArrayField.LoopType.valueOf(
ctx.loopType.getText().toUpperCase());
- String loopExpressionString = getExprString(ctx.loopExpression);
- Term loopExpression = getExpressionTerm(loopExpressionString);
- String parseExpressionString = getExprString(ctx.parseExpression);
- Term parseExpression = getExpressionTerm(parseExpressionString);
- String serializeExpressionString = getExprString(ctx.serializeExpression);
- Term serializeExpression = getExpressionTerm(serializeExpressionString);
- String lengthExpressionString = getExprString(ctx.lengthExpression);
- Term lengthExpression = getExpressionTerm(lengthExpressionString);
+ Term loopExpression = getExpressionTerm(ctx.loopExpression);
+ Term parseExpression = getExpressionTerm(ctx.parseExpression);
+ Term serializeExpression = getExpressionTerm(ctx.serializeExpression);
+ Term lengthExpression = getExpressionTerm(ctx.lengthExpression);
MSpecParser.FieldDefinitionContext fieldDefinitionContext = (MSpecParser.FieldDefinitionContext) ctx.parent.parent;
List<Term> params = getFieldParams(fieldDefinitionContext);
- Field field = new DefaultManualArrayField(null, type, name, loopType, loopExpression,
+ Field field = new DefaultManualArrayField(getAttributes(ctx), type, name, loopType, loopExpression,
parseExpression, serializeExpression, lengthExpression, params);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
@@ -263,15 +293,12 @@ public class MessageFormatListener extends MSpecBaseListener {
public void enterManualField(MSpecParser.ManualFieldContext ctx) {
TypeReference type = getTypeReference(ctx.type);
String name = getIdString(ctx.name);
- String parseExpressionString = getExprString(ctx.parseExpression);
- Term parseExpression = getExpressionTerm(parseExpressionString);
- String serializeExpressionString = getExprString(ctx.serializeExpression);
- Term serializeExpression = getExpressionTerm(serializeExpressionString);
- String lengthExpressionString = getExprString(ctx.lengthExpression);
- Term lengthExpression = getExpressionTerm(lengthExpressionString);
+ Term parseExpression = getExpressionTerm(ctx.parseExpression);
+ Term serializeExpression = getExpressionTerm(ctx.serializeExpression);
+ Term lengthExpression = getExpressionTerm(ctx.lengthExpression);
MSpecParser.FieldDefinitionContext fieldDefinitionContext = (MSpecParser.FieldDefinitionContext) ctx.parent.parent;
List<Term> params = getFieldParams(fieldDefinitionContext);
- Field field = new DefaultManualField(null, type, name, parseExpression, serializeExpression,
+ Field field = new DefaultManualField(getAttributes(ctx), type, name, parseExpression, serializeExpression,
lengthExpression, params);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
@@ -284,12 +311,11 @@ public class MessageFormatListener extends MSpecBaseListener {
String name = getIdString(ctx.name);
Term conditionExpression = null;
if (ctx.condition != null) {
- String conditionExpressionString = getExprString(ctx.condition);
- conditionExpression = getExpressionTerm(conditionExpressionString);
+ conditionExpression = getExpressionTerm(ctx.condition);
}
MSpecParser.FieldDefinitionContext fieldDefinitionContext = (MSpecParser.FieldDefinitionContext) ctx.parent.parent;
List<Term> params = getFieldParams(fieldDefinitionContext);
- Field field = new DefaultOptionalField(null, type, name, conditionExpression, params);
+ Field field = new DefaultOptionalField(getAttributes(ctx), type, name, conditionExpression, params);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -299,13 +325,11 @@ public class MessageFormatListener extends MSpecBaseListener {
public void enterPaddingField(MSpecParser.PaddingFieldContext ctx) {
SimpleTypeReference type = getSimpleTypeReference(ctx.type);
String name = getIdString(ctx.name);
- String paddingValueString = getExprString(ctx.paddingValue);
- Term paddingValue = getExpressionTerm(paddingValueString);
- String paddingConditionString = getExprString(ctx.paddingCondition);
- Term paddingCondition = getExpressionTerm(paddingConditionString);
+ Term paddingValue = getExpressionTerm(ctx.paddingValue);
+ Term paddingCondition = getExpressionTerm(ctx.paddingCondition);
MSpecParser.FieldDefinitionContext fieldDefinitionContext = (MSpecParser.FieldDefinitionContext) ctx.parent.parent;
List<Term> params = getFieldParams(fieldDefinitionContext);
- Field field = new DefaultPaddingField(null, type, name, paddingValue, paddingCondition, params);
+ Field field = new DefaultPaddingField(getAttributes(ctx), type, name, paddingValue, paddingCondition, params);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -315,7 +339,7 @@ public class MessageFormatListener extends MSpecBaseListener {
public void enterReservedField(MSpecParser.ReservedFieldContext ctx) {
SimpleTypeReference type = getSimpleTypeReference(ctx.type);
String expected = getExprString(ctx.expected);
- Field field = new DefaultReservedField(null, type, expected);
+ Field field = new DefaultReservedField(getAttributes(ctx), type, expected);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -327,7 +351,7 @@ public class MessageFormatListener extends MSpecBaseListener {
String name = getIdString(ctx.name);
MSpecParser.FieldDefinitionContext fieldDefinitionContext = (MSpecParser.FieldDefinitionContext) ctx.parent.parent;
List<Term> params = getFieldParams(fieldDefinitionContext);
- Field field = new DefaultSimpleField(null, type, name, params);
+ Field field = new DefaultSimpleField(getAttributes(ctx), type, name, params);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -336,10 +360,9 @@ public class MessageFormatListener extends MSpecBaseListener {
@Override
public void enterTypeSwitchField(MSpecParser.TypeSwitchFieldContext ctx) {
List<Term> discriminatorExpressions = ctx.discriminators.expression().stream()
- .map(this::getExprString)
.map(this::getExpressionTerm)
.collect(Collectors.toList());
- DefaultSwitchField field = new DefaultSwitchField(false, discriminatorExpressions);
+ DefaultSwitchField field = new DefaultSwitchField(discriminatorExpressions);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -348,7 +371,7 @@ public class MessageFormatListener extends MSpecBaseListener {
@Override
public void enterUnknownField(MSpecParser.UnknownFieldContext ctx) {
SimpleTypeReference type = getSimpleTypeReference(ctx.type);
- Field field = new DefaultUnknownField(null, type);
+ Field field = new DefaultUnknownField(getAttributes(ctx), type);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -358,9 +381,8 @@ public class MessageFormatListener extends MSpecBaseListener {
public void enterVirtualField(MSpecParser.VirtualFieldContext ctx) {
TypeReference type = getTypeReference(ctx.type);
String name = getIdString(ctx.name);
- String valueExpressionString = getExprString(ctx.valueExpression);
- Term valueExpression = getExpressionTerm(valueExpressionString);
- Field field = new DefaultVirtualField(null, type, name, valueExpression);
+ Term valueExpression = getExpressionTerm(ctx.valueExpression);
+ Field field = new DefaultVirtualField(getAttributes(ctx), type, name, valueExpression);
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -375,6 +397,9 @@ public class MessageFormatListener extends MSpecBaseListener {
@Override
public void exitCaseStatement(MSpecParser.CaseStatementContext ctx) {
String typeName = ctx.name.getText();
+
+ final Map<String, Term> attributes = batchSetAttributes.peek();
+
List<Argument> parserArguments = new LinkedList<>();
// For DataIO types, add all the arguments from the parent type.
if (!(ctx.parent.parent.parent.parent instanceof MSpecParser.ComplexTypeContext)
@@ -396,7 +421,7 @@ public class MessageFormatListener extends MSpecBaseListener {
discriminatorValues = Collections.emptyList();
}
DefaultDiscriminatedComplexTypeDefinition type =
- new DefaultDiscriminatedComplexTypeDefinition(typeName, parserArguments, null,
+ new DefaultDiscriminatedComplexTypeDefinition(typeName, attributes, parserArguments,
discriminatorValues, parserContexts.pop());
// Add the type to the switch field definition.
@@ -455,13 +480,15 @@ public class MessageFormatListener extends MSpecBaseListener {
enumValues.add(enumValue);
}
- private Term getExpressionTerm(String expressionString) {
+ private Term getExpressionTerm(MSpecParser.ExpressionContext expressionContext) {
+ String expressionString = getExprString(expressionContext);
InputStream inputStream = IOUtils.toInputStream(expressionString, Charset.defaultCharset());
ExpressionStringParser parser = new ExpressionStringParser();
try {
return parser.parse(inputStream);
} catch (Exception e) {
- throw new RuntimeException("Error parsing expression: '" + expressionString + "'", e);
+ throw new RuntimeException(String.format("Error parsing expression: '%s' at line %d column %d",
+ expressionString, expressionContext.start.getLine(), expressionContext.start.getStartIndex()), e);
}
}
@@ -481,7 +508,7 @@ public class MessageFormatListener extends MSpecBaseListener {
(simpleBaseType == SimpleTypeReference.SimpleBaseType.VSTRING)) {
if (simpleBaseType == SimpleTypeReference.SimpleBaseType.VSTRING) {
if(ctx.length != null) {
- Term lengthExpression = getExpressionTerm(ctx.length.getText().substring(1, ctx.length.getText().length() - 1));
+ Term lengthExpression = getExpressionTerm(ctx.length);
return new DefaultStringTypeReference(simpleBaseType, lengthExpression, "UTF-8");
} else {
return new DefaultStringTypeReference(simpleBaseType, null, "UTF-8");
@@ -553,12 +580,30 @@ public class MessageFormatListener extends MSpecBaseListener {
InputStream inputStream = IOUtils.toInputStream(expressionString, Charset.defaultCharset());
ExpressionStringParser parser = new ExpressionStringParser();
try {
- return parser.parse(inputStream);
+ Term term = parser.parse(inputStream);
+ return term;
} catch (Exception e) {
throw new RuntimeException("Error parsing expression: '" + expressionString + "'", e);
}
}
+ private Map<String, Term> getAttributes(RuleContext ctx) {
+ Map<String, Term> attributes = new HashMap<>();
+ // Add any attributes from the current batchSet context.
+ if (!batchSetAttributes.empty()) {
+ attributes.putAll(batchSetAttributes.peek());
+ }
+ // Add any attributes set on the current field itself.
+ if(ctx.parent.parent instanceof MSpecParser.FieldDefinitionContext) {
+ MSpecParser.FieldDefinitionContext fieldDefinitionContext = (MSpecParser.FieldDefinitionContext) ctx.parent.parent;
+ for (MSpecParser.AttributeContext attributeContext : fieldDefinitionContext.attributes.attribute()) {
+ Term attributeExpression = getExpressionTerm(attributeContext.value);
+ attributes.put(attributeContext.name.getText(), attributeExpression);
+ }
+ }
+ return attributes;
+ }
+
private String unquoteString(String quotedString) {
if (quotedString != null && quotedString.length() >= 2) {
return quotedString.substring(1, quotedString.length() - 1);
diff --git a/protocols/ab-eth/src/main/resources/protocols/abeth/ab-eth.mspec b/protocols/ab-eth/src/main/resources/protocols/abeth/ab-eth.mspec
index d156b75..5e43428 100644
--- a/protocols/ab-eth/src/main/resources/protocols/abeth/ab-eth.mspec
+++ b/protocols/ab-eth/src/main/resources/protocols/abeth/ab-eth.mspec
@@ -17,7 +17,7 @@
* under the License.
*/
-[discriminatedType 'CIPEncapsulationPacket'
+[discriminatedType 'CIPEncapsulationPacket' byteOrder='"BIG_ENDIAN"'
[discriminator uint 16 'commandType']
[implicit uint 16 'len' 'lengthInBytes - 28']
[simple uint 32 'sessionHandle']
diff --git a/protocols/ads/src/main/resources/protocols/ads/ads-discovery.mspec b/protocols/ads/src/main/resources/protocols/ads/ads-discovery.mspec
index 50d4b04..d8a6f15 100644
--- a/protocols/ads/src/main/resources/protocols/ads/ads-discovery.mspec
+++ b/protocols/ads/src/main/resources/protocols/ads/ads-discovery.mspec
@@ -21,17 +21,7 @@
// AMS/TCP Packet
////////////////////////////////////////////////////////////////
-[enum uint 8 'Operation'
- ['0x01' DISCOVERY]
- ['0x06' ROUTE ]
-]
-
-[enum uint 8 'Direction'
- ['0x00' REQUEST ]
- ['0x80' RESPONSE]
-]
-
-[discriminatedType 'AdsDiscovery'
+[discriminatedType 'AdsDiscovery' byteOrder='"BIG_ENDIAN"'
[const uint 32 'header' '0x03661471L']
[reserved uint 32 '0x00000000L']
[enum Operation 'operation']
@@ -79,6 +69,16 @@
]
]
+[enum uint 8 'Operation'
+ ['0x01' DISCOVERY]
+ ['0x06' ROUTE ]
+]
+
+[enum uint 8 'Direction'
+ ['0x00' REQUEST ]
+ ['0x80' RESPONSE]
+]
+
[enum uint 24 'RouteStatus'
['0x040000' SUCCESS]
['0x000407' FAILURE]
diff --git a/protocols/ads/src/main/resources/protocols/ads/ads.mspec b/protocols/ads/src/main/resources/protocols/ads/ads.mspec
index e72c6cf..b62fb90 100644
--- a/protocols/ads/src/main/resources/protocols/ads/ads.mspec
+++ b/protocols/ads/src/main/resources/protocols/ads/ads.mspec
@@ -21,7 +21,7 @@
// AMS/TCP Packet
////////////////////////////////////////////////////////////////
-[type 'AmsTCPPacket'
+[type 'AmsTCPPacket' byteOrder='"LITTLE_ENDIAN"'
// AMS/TCP Header 6 bytes contains the tcpLength of the data packet.
// These bytes must be set to 0.
[reserved uint 16 '0x0000' ]
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index d88eadc..aac3cbe 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -17,7 +17,7 @@
* under the License.
*/
-[discriminatedType 'BVLC'
+[discriminatedType 'BVLC' byteOrder='"BIG_ENDIAN"'
[const uint 8 'bacnetType' '0x81' ]
[discriminator uint 8 'bvlcFunction' ]
[implicit uint 16 'bvlcLength' 'lengthInBytes']
diff --git a/protocols/canopen/src/main/resources/protocols/can/canopen.mspec b/protocols/canopen/src/main/resources/protocols/can/canopen.mspec
index 07b52f2..b613ad5 100644
--- a/protocols/canopen/src/main/resources/protocols/can/canopen.mspec
+++ b/protocols/canopen/src/main/resources/protocols/can/canopen.mspec
@@ -354,7 +354,7 @@
]
// A compact, byte aligned structure for test and embedding purposes
-[type 'CANOpenFrame'
+[type 'CANOpenFrame' byteOrder='"LITTLE_ENDIAN"'
[simple uint 8 'nodeId']
[simple CANOpenService 'service']
[const uint 4 'alignment' '0x00']
diff --git a/protocols/df1/src/main/resources/protocols/df1/df1.mspec b/protocols/df1/src/main/resources/protocols/df1/df1.mspec
index 644c4fe..7cdbbaa 100644
--- a/protocols/df1/src/main/resources/protocols/df1/df1.mspec
+++ b/protocols/df1/src/main/resources/protocols/df1/df1.mspec
@@ -17,7 +17,7 @@
* under the License.
*/
-[discriminatedType 'DF1Symbol'
+[discriminatedType 'DF1Symbol' byteOrder='"BIG_ENDIAN"'
[const uint 8 'messageStart' '0x10']
[discriminator uint 8 'symbolType']
[typeSwitch 'symbolType'
diff --git a/protocols/eip/src/main/resources/protocols/eip/eip.mspec b/protocols/eip/src/main/resources/protocols/eip/eip.mspec
index 5e10014..92bcb90 100644
--- a/protocols/eip/src/main/resources/protocols/eip/eip.mspec
+++ b/protocols/eip/src/main/resources/protocols/eip/eip.mspec
@@ -21,7 +21,7 @@
///EthernetIP Header of size 24
/////////////////////////////////////////////////////////////////
-[discriminatedType 'EipPacket'
+[discriminatedType 'EipPacket' byteOrder='"BIG_ENDIAN"'
[discriminator uint 16 'command']
[implicit uint 16 'len' 'lengthInBytes - 24']
[simple uint 32 'sessionHandle']
diff --git a/protocols/firmata/src/main/resources/protocols/firmata/firmata.mspec b/protocols/firmata/src/main/resources/protocols/firmata/firmata.mspec
index a42f6dc..d20d3f4 100644
--- a/protocols/firmata/src/main/resources/protocols/firmata/firmata.mspec
+++ b/protocols/firmata/src/main/resources/protocols/firmata/firmata.mspec
@@ -17,7 +17,7 @@
* under the License.
*/
-[discriminatedType 'FirmataMessage' [bit 'response']
+[discriminatedType 'FirmataMessage' byteOrder='"BIG_ENDIAN"' [bit 'response']
[discriminator uint 4 'messageType']
[typeSwitch 'messageType'
// Reading operations
diff --git a/protocols/genericcan/src/main/resources/protocols/can/genericcan.mspec b/protocols/genericcan/src/main/resources/protocols/can/genericcan.mspec
index 757f8dc..26f491f 100644
--- a/protocols/genericcan/src/main/resources/protocols/can/genericcan.mspec
+++ b/protocols/genericcan/src/main/resources/protocols/can/genericcan.mspec
@@ -40,7 +40,7 @@
[REAL64 ['64'] ]
]
-[dataIo 'DataItem' [GenericCANDataType 'dataType']
+[dataIo 'DataItem' byteOrder='"LITTLE_ENDIAN"' [GenericCANDataType 'dataType']
[typeSwitch 'dataType'
['BYTE' BYTE
[simple byte 'value']
diff --git a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
index 8f9f895..3788de8 100644
--- a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
+++ b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
@@ -17,7 +17,7 @@
* under the License.
*/
-[discriminatedType 'KnxNetIpMessage'
+[discriminatedType 'KnxNetIpMessage' byteOrder='"BIG_ENDIAN"'
[implicit uint 8 'headerLength' '6']
[const uint 8 'protocolVersion' '0x10']
[discriminator uint 16 'msgType']
diff --git a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
index 844e007..8f29eec 100644
--- a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
+++ b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
@@ -23,7 +23,7 @@
[const uint 16 'modbusTcpDefaultPort' '502']
]
-[type 'ModbusTcpADU' [bit 'response']
+[type 'ModbusTcpADU' byteOrder='"BIG_ENDIAN"' [bit 'response']
// It is used for transaction pairing, the MODBUS server copies in the response the transaction
// identifier of the request.
[simple uint 16 'transactionIdentifier']
@@ -45,7 +45,7 @@
[simple ModbusPDU 'pdu' ['response']]
]
-[type 'ModbusSerialADU' [bit 'response']
+[type 'ModbusSerialADU' byteOrder='"LITTLE_ENDIAN"' [bit 'response']
[simple uint 16 'transactionId']
[reserved uint 16 '0x0000']
[simple uint 16 'length']
diff --git a/protocols/opcua/src/main/xslt/opc-manual.xsl b/protocols/opcua/src/main/xslt/opc-manual.xsl
index b8ebdc1..4b2265c 100644
--- a/protocols/opcua/src/main/xslt/opc-manual.xsl
+++ b/protocols/opcua/src/main/xslt/opc-manual.xsl
@@ -55,7 +55,7 @@
<xsl:template match="/">
// Remark: The different fields are encoded in Little-endian.
-[type 'OpcuaAPU' [bit 'response']
+[type 'OpcuaAPU' byteOrder='"LITTLE_ENDIAN"' [bit 'response']
[simple MessagePDU 'message' ['response']]
]
diff --git a/protocols/plc4x/src/main/resources/protocols/plc4x/plc4x.mspec b/protocols/plc4x/src/main/resources/protocols/plc4x/plc4x.mspec
index 285a883..c9b7111 100644
--- a/protocols/plc4x/src/main/resources/protocols/plc4x/plc4x.mspec
+++ b/protocols/plc4x/src/main/resources/protocols/plc4x/plc4x.mspec
@@ -17,7 +17,7 @@
* under the License.
*/
-[discriminatedType 'Request'
+[discriminatedType 'Request' byteOrder='"BIG_ENDIAN"'
// TODO: Replace this with an discriminator field asap
[simple RequestType 'type']
[typeSwitch 'type'
diff --git a/protocols/profinet/src/main/resources/protocols/profinet/profinet.mspec b/protocols/profinet/src/main/resources/protocols/profinet/profinet.mspec
index 2a9186a..d4f49ea 100644
--- a/protocols/profinet/src/main/resources/protocols/profinet/profinet.mspec
+++ b/protocols/profinet/src/main/resources/protocols/profinet/profinet.mspec
@@ -37,7 +37,7 @@
PnPtcp PROFINET Precision Transparent Clock Protocol
*/
-[type 'Ethernet_Frame'
+[type 'Ethernet_Frame' byteOrder='"BIG_ENDIAN"'
// When sending to the mac address prefix of 01:0e:cf are multicast packets
[simple MacAddress 'destination']
[simple MacAddress 'source' ]
@@ -92,7 +92,7 @@
// usually be dynamic. However are we trying to limit the number of
// arguments needed to construct the messages and Profinet only seems
// be using a very limited subset of all possible DCE/RPC packets.
-[type 'DceRpc_Packet'
+[type 'DceRpc_Packet' byteOrder='"BIG_ENDIAN"'
// RPC Header {
// RPCVersion 4.10.3.2.1
[const uint 8 'version' '0x04' ]
@@ -118,7 +118,7 @@
[simple FloatingPointEncoding 'floatingPointEncoding' ]
// RPCSerialHigh 4.10.3.2.6
[const uint 8 'serialHigh' '0x00' ]
- [batchSet encoding='integerEncoding ? "BIG_ENDIAN" : "LITTLE_ENDIAN"'
+ [batchSet byteOrder='integerEncoding ? "BIG_ENDIAN" : "LITTLE_ENDIAN"'
// RPCObjectUUID 4.10.3.2.8
[simple DceRpc_ObjectUuid 'objectUuid' ]
// RPCInterfaceUUID 4.10.3.2.9
@@ -148,20 +148,20 @@
[const uint 8 'serialLow' '0x00' ]
// RPC Header }
// RPC Payload {
- [simple PnIoCm_Packet 'payload' encoding='integerEncoding ? "BIG_ENDIAN" : "LITTLE_ENDIAN"' ['packetType'] ]
+ [simple PnIoCm_Packet 'payload' byteOrder='integerEncoding ? "BIG_ENDIAN" : "LITTLE_ENDIAN"' ['packetType'] ]
// RPC Payload }
]
// RPCObjectUUID 4.10.3.2.8
[type 'DceRpc_ObjectUuid'
- [const uint 32 'data1' '0xDEA00000' ]
- [const uint 16 'data2' '0x6C97' ]
- [const uint 16 'data3' '0x11D1' ]
+ [const uint 32 'data1' '0xDEA00000' ]
+ [const uint 16 'data2' '0x6C97' ]
+ [const uint 16 'data3' '0x11D1' ]
// This part is described as a byte array, so the byte order is always big-endian
- [const uint 16 'data4' '0x8271' encoding='BIG_ENDIAN']
- [simple uint 16 'nodeNumber' encoding='BIG_ENDIAN']
- [simple uint 16 'deviceId' encoding='BIG_ENDIAN']
- [simple uint 16 'vendorId' encoding='BIG_ENDIAN']
+ [const uint 16 'data4' '0x8271' byteOrder='"BIG_ENDIAN"']
+ [simple uint 16 'nodeNumber' byteOrder='"BIG_ENDIAN"']
+ [simple uint 16 'deviceId' byteOrder='"BIG_ENDIAN"']
+ [simple uint 16 'vendorId' byteOrder='"BIG_ENDIAN"']
]
// RPCInterfaceUUID 4.10.3.2.9
@@ -170,14 +170,14 @@
// dynamically endianed and the last 8 bytes are set to Big Endian, we
// had to do this trick.
[discriminatedType 'DceRpc_InterfaceUuid'
- [discriminator uint 32 'interfaceType' ]
- [const uint 16 'data1' '0x6C97' ]
- [const uint 16 'data2' '0x11D1' ]
+ [discriminator uint 32 'interfaceType' ]
+ [const uint 16 'data1' '0x6C97' ]
+ [const uint 16 'data2' '0x11D1' ]
// This part is described as a byte array, so the byte order is always big-endian
- [const uint 16 'data3' '0x8271' encoding='BIG_ENDIAN']
- [const uint 16 'data4' '0x00A0' encoding='BIG_ENDIAN']
- [const uint 16 'data5' '0x2442' encoding='BIG_ENDIAN']
- [const uint 16 'data6' '0xDF7D' encoding='BIG_ENDIAN']
+ [const uint 16 'data3' '0x8271' byteOrder='"BIG_ENDIAN"']
+ [const uint 16 'data4' '0x00A0' byteOrder='"BIG_ENDIAN"']
+ [const uint 16 'data5' '0x2442' byteOrder='"BIG_ENDIAN"']
+ [const uint 16 'data6' '0xDF7D' byteOrder='"BIG_ENDIAN"']
[typeSwitch 'interfaceType'
['0xDEA00001' DceRpc_InterfaceUuid_DeviceInterface
]
@@ -196,11 +196,11 @@
// the first parts are effected by endianess, and the last 8
// bytes are fixed big-endian. Therefore the complicated notation.
[type 'DceRpc_ActivityUuid'
- [simple uint 32 'data1' ]
- [simple uint 16 'data2' ]
- [simple uint 16 'data3' ]
+ [simple uint 32 'data1' ]
+ [simple uint 16 'data2' ]
+ [simple uint 16 'data3' ]
// This part is described as a byte array, so the byte order is always big-endian
- [simple uint 64 'data4' encoding='BIG_ENDIAN']
+ [simple uint 64 'data4' byteOrder='"BIG_ENDIAN"']
]
// There are some special MAC addresses reserved:
diff --git a/protocols/s7/src/main/resources/protocols/s7/s7.mspec b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
index fb01c18..af96a7e 100644
--- a/protocols/s7/src/main/resources/protocols/s7/s7.mspec
+++ b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
@@ -21,7 +21,7 @@
// IsoOnTcp/TPKT
////////////////////////////////////////////////////////////////
-[type 'TPKTPacket'
+[type 'TPKTPacket' byteOrder='"BIG_ENDIAN"'
[const uint 8 'protocolId' '0x03']
[reserved uint 8 '0x00']
[implicit uint 16 'len' 'payload.lengthInBytes + 4']
diff --git a/protocols/simulated/src/main/resources/protocols/simulated/simulated.mspec b/protocols/simulated/src/main/resources/protocols/simulated/simulated.mspec
index d31fbf6..a5d5bb5 100644
--- a/protocols/simulated/src/main/resources/protocols/simulated/simulated.mspec
+++ b/protocols/simulated/src/main/resources/protocols/simulated/simulated.mspec
@@ -19,7 +19,7 @@
// Remark: The different fields are encoded in Big-endian.
-[type 'Dummy'
+[type 'Dummy' byteOrder='"BIG_ENDIAN"'
[simple uint 16 'dummy']
]
diff --git a/protocols/socketcan/src/main/resources/protocols/can/socketcan.mspec b/protocols/socketcan/src/main/resources/protocols/can/socketcan.mspec
index 7350d14..be266e1 100644
--- a/protocols/socketcan/src/main/resources/protocols/can/socketcan.mspec
+++ b/protocols/socketcan/src/main/resources/protocols/can/socketcan.mspec
@@ -17,7 +17,7 @@
* under the License.
*/
-[type 'SocketCANFrame'
+[type 'SocketCANFrame' byteOrder='"LITTLE_ENDIAN"'
[simple int 32 'rawId']
[virtual int 32 'identifier'
'STATIC_CALL("org.apache.plc4x.java.transport.socketcan.helper.HeaderParser.readIdentifier", rawId)'