You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2019/12/05 09:01:41 UTC

[plc4x] branch feature/ams_ads_mpsec updated (468cfb0 -> 393e134)

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

sruehl pushed a change to branch feature/ams_ads_mpsec
in repository https://gitbox.apache.org/repos/asf/plc4x.git.


    from 468cfb0  added some tests for expression parser and WIP for MFL and MFP
     new 00568b9  cleanup tests and reformat code
     new 393e134  added parent expressionn

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../language/mspec/expression/Expression.g4        |   1 +
 .../mspec/expression/ExpressionStringListener.java |  43 ++++--
 .../mspec/expression/ExpressionStringParser.java   |  14 +-
 .../definitions/DefaultComplexTypeDefinition.java  |   8 +-
 .../DefaultDiscriminatedComplexTypeDefinition.java |   2 +-
 .../definitions/DefaultEnumTypeDefinition.java     |   2 +-
 .../mspec/parser/MessageFormatListener.java        |  70 ++++-----
 .../language/mspec/parser/MessageFormatParser.java |  45 +-----
 .../expression/ExpressionStringParserTest.java     |   6 +
 .../mspec/parser/MessageFormatListenerTest.java    | 162 ---------------------
 .../mspec/parser/MessageFormatParserTest.java      |  55 +------
 .../src/test/resources/mspec.example               |  29 ++--
 .../main/resources/protocols/amsads/amsads.mspec   |  26 ++--
 13 files changed, 117 insertions(+), 346 deletions(-)
 delete mode 100644 build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListenerTest.java
 copy protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec => build-utils/protocol-base-mspec/src/test/resources/mspec.example (73%)


[plc4x] 01/02: cleanup tests and reformat code

Posted by sr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch feature/ams_ads_mpsec
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 00568b9c3d43b9be2e51c3b971f272115e14a4bc
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Nov 29 12:00:02 2019 +0100

    cleanup tests and reformat code
---
 .../mspec/expression/ExpressionStringListener.java |  32 ++--
 .../mspec/expression/ExpressionStringParser.java   |  14 +-
 .../definitions/DefaultComplexTypeDefinition.java  |   8 +-
 .../DefaultDiscriminatedComplexTypeDefinition.java |   2 +-
 .../definitions/DefaultEnumTypeDefinition.java     |   2 +-
 .../mspec/parser/MessageFormatListener.java        |  70 ++++-----
 .../language/mspec/parser/MessageFormatParser.java |  45 +-----
 .../mspec/parser/MessageFormatListenerTest.java    | 162 ---------------------
 .../mspec/parser/MessageFormatParserTest.java      |  44 +-----
 9 files changed, 67 insertions(+), 312 deletions(-)

diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
index bec1f9d..f4ae9e3 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
@@ -45,10 +45,10 @@ public class ExpressionStringListener extends ExpressionBaseListener {
     @Override
     public void exitExpressionString(ExpressionParser.ExpressionStringContext ctx) {
         List<Term> roots = parserContexts.pop();
-        if(roots.isEmpty()) {
+        if (roots.isEmpty()) {
             throw new RuntimeException("Empty Expression not supported.");
         }
-        if(roots.size() != 1) {
+        if (roots.size() != 1) {
             throw new RuntimeException("Expression can only contain one root term.");
         }
         root = roots.get(0);
@@ -65,13 +65,13 @@ public class ExpressionStringListener extends ExpressionBaseListener {
 
     @Override
     public void exitBoolExpression(ExpressionParser.BoolExpressionContext ctx) {
-        parserContexts.peek().add(new BooleanLiteral(Boolean.valueOf(ctx.getText())));
+        parserContexts.peek().add(new BooleanLiteral(Boolean.parseBoolean(ctx.getText())));
     }
 
     @Override
     public void exitNumberExpression(ExpressionParser.NumberExpressionContext ctx) {
         String strValue = ctx.Number().getText();
-        if(strValue.contains(".")) {
+        if (strValue.contains(".")) {
             parserContexts.peek().add(new NumericLiteral(Double.valueOf(strValue)));
         } else {
             parserContexts.peek().add(new NumericLiteral(Long.valueOf(strValue)));
@@ -95,11 +95,11 @@ public class ExpressionStringListener extends ExpressionBaseListener {
         IndexContext indexContext = null;
         RestContext restContext = null;
         for (Term arg : args) {
-            if(arg instanceof ArgsContext) {
+            if (arg instanceof ArgsContext) {
                 argsContext = (ArgsContext) arg;
-            } else if(arg instanceof IndexContext) {
+            } else if (arg instanceof IndexContext) {
                 indexContext = (IndexContext) arg;
-            } else if(arg instanceof RestContext) {
+            } else if (arg instanceof RestContext) {
                 restContext = (RestContext) arg;
             }
         }
@@ -107,11 +107,11 @@ public class ExpressionStringListener extends ExpressionBaseListener {
         String name = ctx.name.getText();
 
         int index = VariableLiteral.NO_INDEX;
-        if(indexContext != null) {
+        if (indexContext != null) {
             index = indexContext.getFirst().getNumber().intValue();
         }
         VariableLiteral rest = null;
-        if(restContext != null) {
+        if (restContext != null) {
             rest = restContext.getFirst();
         }
         parserContexts.peek().add(new VariableLiteral(name, argsContext, index, rest));
@@ -288,7 +288,7 @@ public class ExpressionStringListener extends ExpressionBaseListener {
     /////////////////////////////////////////////////////////////////////////////////////////
 
     private UnaryTerm getUnaryTerm(String op, List<Term> terms) {
-        if(terms.size() != 1) {
+        if (terms.size() != 1) {
             throw new RuntimeException(op + " should be a unary operation");
         }
         Term a = terms.get(0);
@@ -296,7 +296,7 @@ public class ExpressionStringListener extends ExpressionBaseListener {
     }
 
     private BinaryTerm getBinaryTerm(String op, List<Term> terms) {
-        if(terms.size() != 2) {
+        if (terms.size() != 2) {
             throw new RuntimeException(op + " should be a binary operation");
         }
         Term a = terms.get(0);
@@ -305,7 +305,7 @@ public class ExpressionStringListener extends ExpressionBaseListener {
     }
 
     private TernaryTerm getTernaryTerm(String op, List<Term> terms) {
-        if(terms.size() != 3) {
+        if (terms.size() != 3) {
             throw new RuntimeException(op + " should be a ternary operation");
         }
         Term a = terms.get(0);
@@ -315,7 +315,7 @@ public class ExpressionStringListener extends ExpressionBaseListener {
     }
 
     static class ArgsContext extends LinkedList<Term> implements Term {
-        public ArgsContext(Collection c) {
+        ArgsContext(Collection c) {
             super(c);
         }
 
@@ -324,8 +324,9 @@ public class ExpressionStringListener extends ExpressionBaseListener {
             return false;
         }
     }
+
     static class IndexContext extends LinkedList<NumericLiteral> implements Term {
-        public IndexContext(Collection c) {
+        IndexContext(Collection c) {
             super(c);
         }
 
@@ -334,8 +335,9 @@ public class ExpressionStringListener extends ExpressionBaseListener {
             return false;
         }
     }
+
     static class RestContext extends LinkedList<VariableLiteral> implements Term {
-        public RestContext(Collection c) {
+        RestContext(Collection c) {
             super(c);
         }
 
diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParser.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParser.java
index 76c131d..7b9f124 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParser.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParser.java
@@ -21,7 +21,6 @@ package org.apache.plc4x.plugins.codegenerator.language.mspec.expression;
 
 import org.antlr.v4.runtime.CharStreams;
 import org.antlr.v4.runtime.CommonTokenStream;
-import org.antlr.v4.runtime.tree.ParseTree;
 import org.antlr.v4.runtime.tree.ParseTreeWalker;
 import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
 
@@ -31,18 +30,15 @@ import java.io.InputStream;
 public class ExpressionStringParser {
 
     public Term parse(InputStream source) {
+        ExpressionLexer lexer;
         try {
-            ExpressionLexer lexer = new ExpressionLexer(CharStreams.fromStream(source));
-            CommonTokenStream tokens = new CommonTokenStream(lexer);
-            ExpressionParser parser = new ExpressionParser(tokens);
-            ParseTree tree = parser.expressionString();
-            ParseTreeWalker walker = new ParseTreeWalker();
-            ExpressionStringListener listener = new ExpressionStringListener();
-            walker.walk(listener, tree);
-            return listener.getRoot();
+            lexer = new ExpressionLexer(CharStreams.fromStream(source));
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
+        ExpressionStringListener listener = new ExpressionStringListener();
+        new ParseTreeWalker().walk(listener, new ExpressionParser(new CommonTokenStream(lexer)).expressionString());
+        return listener.getRoot();
     }
 
 }
diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultComplexTypeDefinition.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultComplexTypeDefinition.java
index 4dbf73d..39d87f4 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultComplexTypeDefinition.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultComplexTypeDefinition.java
@@ -74,8 +74,8 @@ public class DefaultComplexTypeDefinition extends DefaultTypeDefinition implemen
     @Override
     public List<PropertyField> getAllPropertyFields() {
         List<PropertyField> fields = new LinkedList<>();
-        if(getParentType() != null) {
-            fields.addAll(((ComplexTypeDefinition)getParentType()).getAllPropertyFields());
+        if (getParentType() != null) {
+            fields.addAll(((ComplexTypeDefinition) getParentType()).getAllPropertyFields());
         }
         fields.addAll(getPropertyFields());
         return fields;
@@ -83,8 +83,8 @@ public class DefaultComplexTypeDefinition extends DefaultTypeDefinition implemen
 
     @Override
     public List<PropertyField> getParentPropertyFields() {
-        if(getParentType() != null) {
-            return ((ComplexTypeDefinition)getParentType()).getAllPropertyFields();
+        if (getParentType() != null) {
+            return ((ComplexTypeDefinition) getParentType()).getAllPropertyFields();
         }
         return Collections.emptyList();
     }
diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDiscriminatedComplexTypeDefinition.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDiscriminatedComplexTypeDefinition.java
index 65aac2b..8d64b08 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDiscriminatedComplexTypeDefinition.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultDiscriminatedComplexTypeDefinition.java
@@ -40,7 +40,7 @@ public class DefaultDiscriminatedComplexTypeDefinition extends DefaultComplexTyp
         // which is always a DefaultComplexTypeDefinition instance.
         return ((DefaultComplexTypeDefinition) getParentType()).getFields().stream().filter(
             field -> field instanceof DiscriminatorField).map(
-                field -> (DiscriminatorField) field).findFirst().orElse(null);
+            field -> (DiscriminatorField) field).findFirst().orElse(null);
     }
 
     public String[] getDiscriminatorValues() {
diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultEnumTypeDefinition.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultEnumTypeDefinition.java
index b81136c..67d0d60 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultEnumTypeDefinition.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultEnumTypeDefinition.java
@@ -39,7 +39,7 @@ public class DefaultEnumTypeDefinition extends DefaultTypeDefinition implements
         this.type = type;
         this.enumValues = enumValues;
         this.constants = new HashMap<>();
-        if(constants != null) {
+        if (constants != null) {
             for (Argument constant : constants) {
                 this.constants.put(constant.getName(), constant.getType());
             }
diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java
index 42c3ce3..57214a5 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java
@@ -76,7 +76,7 @@ public class MessageFormatListener extends MSpecBaseListener {
 
     @Override
     public void enterComplexType(MSpecParser.ComplexTypeContext ctx) {
-        if(ctx.enumValues != null) {
+        if (ctx.enumValues != null) {
             List<EnumValue> enumContext = new LinkedList<>();
             enumContexts.push(enumContext);
         } else {
@@ -89,11 +89,11 @@ public class MessageFormatListener extends MSpecBaseListener {
     public void exitComplexType(MSpecParser.ComplexTypeContext ctx) {
         String typeName = ctx.name.id.getText();
         Argument[] parserArguments = null;
-        if(ctx.params != null) {
+        if (ctx.params != null) {
             parserArguments = getParserArguments(ctx.params.argument());
         }
 
-        if(ctx.enumValues != null) {
+        if (ctx.enumValues != null) {
             TypeReference type = getTypeReference(ctx.type);
             EnumValue[] enumValues = getEnumValues();
             DefaultEnumTypeDefinition enumType = new DefaultEnumTypeDefinition(typeName, type, enumValues,
@@ -126,10 +126,10 @@ public class MessageFormatListener extends MSpecBaseListener {
         String name = ctx.name.id.getText();
         ArrayField.LoopType loopType = ArrayField.LoopType.valueOf(ctx.loopType.getText().toUpperCase());
         String loopExpressionString = ctx.loopExpression.expr.getText();
-        Term loopExpression =  getExpressionTerm(loopExpressionString);
+        Term loopExpression = getExpressionTerm(loopExpressionString);
         Term[] params = getFieldParams((MSpecParser.FieldDefinitionContext) ctx.parent.parent);
         Field field = new DefaultArrayField(null, type, name, loopType, loopExpression, params);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -141,7 +141,7 @@ public class MessageFormatListener extends MSpecBaseListener {
         String checksumExpressionString = ctx.checksumExpression.expr.getText();
         Term checksumExpression = getExpressionTerm(checksumExpressionString);
         Field field = new DefaultChecksumField(null, type, name, checksumExpression);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -152,7 +152,7 @@ public class MessageFormatListener extends MSpecBaseListener {
         String name = ctx.name.id.getText();
         String expected = ctx.expected.expr.getText();
         Field field = new DefaultConstField(null, type, name, expected);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -162,7 +162,7 @@ public class MessageFormatListener extends MSpecBaseListener {
         SimpleTypeReference type = getSimpleTypeReference(ctx.type);
         String name = ctx.name.id.getText();
         Field field = new DefaultDiscriminatorField(null, type, name);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -173,7 +173,7 @@ public class MessageFormatListener extends MSpecBaseListener {
         String name = ctx.name.id.getText();
         Term[] params = getFieldParams((MSpecParser.FieldDefinitionContext) ctx.parent.parent);
         Field field = new DefaultEnumField(null, type, name, params);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -185,7 +185,7 @@ public class MessageFormatListener extends MSpecBaseListener {
         String serializationExpressionString = ctx.serializationExpression.expr.getText();
         Term serializationExpression = getExpressionTerm(serializationExpressionString);
         Field field = new DefaultImplicitField(null, type, name, serializationExpression);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -197,17 +197,17 @@ public class MessageFormatListener extends MSpecBaseListener {
         ManualArrayField.LoopType loopType = ManualArrayField.LoopType.valueOf(
             ctx.loopType.getText().toUpperCase());
         String loopExpressionString = ctx.loopExpression.expr.getText();
-        Term loopExpression =  getExpressionTerm(loopExpressionString);
+        Term loopExpression = getExpressionTerm(loopExpressionString);
         String serializationExpressionString = ctx.serializationExpression.expr.getText();
         Term serializationExpression = getExpressionTerm(serializationExpressionString);
         String deserializationExpressionString = ctx.deserializationExpression.expr.getText();
         Term deserializationExpression = getExpressionTerm(deserializationExpressionString);
         String lengthExpressionString = ctx.lengthExpression.expr.getText();
-        Term lengthExpression =  getExpressionTerm(lengthExpressionString);
+        Term lengthExpression = getExpressionTerm(lengthExpressionString);
         Term[] params = getFieldParams((MSpecParser.FieldDefinitionContext) ctx.parent.parent);
         Field field = new DefaultManualArrayField(null, type, name, loopType, loopExpression, serializationExpression,
             deserializationExpression, lengthExpression, params);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -221,11 +221,11 @@ public class MessageFormatListener extends MSpecBaseListener {
         String deserializationExpressionString = ctx.deserializationExpression.expr.getText();
         Term deserializationExpression = getExpressionTerm(deserializationExpressionString);
         String lengthExpressionString = ctx.lengthExpression.expr.getText();
-        Term lengthExpression =  getExpressionTerm(lengthExpressionString);
+        Term lengthExpression = getExpressionTerm(lengthExpressionString);
         Term[] params = getFieldParams((MSpecParser.FieldDefinitionContext) ctx.parent.parent);
         Field field = new DefaultManualField(null, type, name, serializationExpression, deserializationExpression,
             lengthExpression, params);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -238,7 +238,7 @@ public class MessageFormatListener extends MSpecBaseListener {
         Term conditionExpression = getExpressionTerm(conditionExpressionString);
         Term[] params = getFieldParams((MSpecParser.FieldDefinitionContext) ctx.parent.parent);
         Field field = new DefaultOptionalField(null, type, name, conditionExpression, params);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -253,7 +253,7 @@ public class MessageFormatListener extends MSpecBaseListener {
         Term paddingCondition = getExpressionTerm(paddingConditionString);
         Term[] params = getFieldParams((MSpecParser.FieldDefinitionContext) ctx.parent.parent);
         Field field = new DefaultPaddingField(null, type, name, paddingValue, paddingCondition, params);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -263,7 +263,7 @@ public class MessageFormatListener extends MSpecBaseListener {
         SimpleTypeReference type = getSimpleTypeReference(ctx.type);
         String expected = ctx.expected.expr.getText();
         Field field = new DefaultReservedField(null, type, expected);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -274,7 +274,7 @@ public class MessageFormatListener extends MSpecBaseListener {
         String name = ctx.name.id.getText();
         Term[] params = getFieldParams((MSpecParser.FieldDefinitionContext) ctx.parent.parent);
         Field field = new DefaultSimpleField(null, type, name, params);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -283,11 +283,11 @@ public class MessageFormatListener extends MSpecBaseListener {
     public void enterTypeSwitchField(MSpecParser.TypeSwitchFieldContext ctx) {
         int numDiscriminators = ctx.discriminators.expression().size();
         String[] discriminatorNames = new String[numDiscriminators];
-        for(int i = 0; i < numDiscriminators; i++) {
+        for (int i = 0; i < numDiscriminators; i++) {
             discriminatorNames[i] = ctx.discriminators.expression().get(i).expr.getText();
         }
         DefaultSwitchField field = new DefaultSwitchField(discriminatorNames);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -299,7 +299,7 @@ public class MessageFormatListener extends MSpecBaseListener {
         String valueExpressionString = ctx.valueExpression.expr.getText();
         Term valueExpression = getExpressionTerm(valueExpressionString);
         Field field = new DefaultVirtualField(null, type, name, valueExpression);
-        if(parserContexts.peek() != null) {
+        if (parserContexts.peek() != null) {
             parserContexts.peek().add(field);
         }
     }
@@ -315,17 +315,17 @@ public class MessageFormatListener extends MSpecBaseListener {
         String typeName = ctx.name.getText();
         List<Argument> parserArguments = new LinkedList<>();
         // Add all the arguments from the parent type.
-        if(((MSpecParser.ComplexTypeContext) ctx.parent.parent.parent.parent).params != null) {
+        if (((MSpecParser.ComplexTypeContext) ctx.parent.parent.parent.parent).params != null) {
             parserArguments.addAll(Arrays.asList(getParserArguments(
                 ((MSpecParser.ComplexTypeContext) ctx.parent.parent.parent.parent).params.argument())));
         }
         // Add all eventually existing local arguments.
-        if(ctx.argumentList() != null) {
+        if (ctx.argumentList() != null) {
             parserArguments.addAll(Arrays.asList(getParserArguments(ctx.argumentList().argument())));
         }
 
         String[] discriminatorValues;
-        if(ctx.discriminatorValues != null) {
+        if (ctx.discriminatorValues != null) {
             List<MSpecParser.ExpressionContext> expressions = ctx.discriminatorValues.expression();
             discriminatorValues = new String[expressions.size()];
             for (int i = 0; i < expressions.size(); i++) {
@@ -340,7 +340,7 @@ public class MessageFormatListener extends MSpecBaseListener {
 
         // Add the type to the switch field definition.
         DefaultSwitchField switchField = getSwitchField();
-        if(switchField == null) {
+        if (switchField == null) {
             throw new RuntimeException("This shouldn't have happened");
         }
         switchField.addCase(type);
@@ -354,12 +354,12 @@ public class MessageFormatListener extends MSpecBaseListener {
         String value = unquoteString(ctx.valueExpression.getText());
         String name = ctx.name.getText();
         Map<String, String> constants = null;
-        if(ctx.constantValueExpressions != null) {
+        if (ctx.constantValueExpressions != null) {
             MSpecParser.ComplexTypeContext parentCtx = (MSpecParser.ComplexTypeContext) ctx.parent;
             int numConstantValues = parentCtx.params.argument().size();
             int numExpressionValues = ctx.constantValueExpressions.expression().size();
             // This only works if we provide exactly the same number of expressions as we defined constants
-            if(numConstantValues != numExpressionValues) {
+            if (numConstantValues != numExpressionValues) {
                 throw new RuntimeException("Number of constant value expressions doesn't match the number of " +
                     "defined constants. Expecting " + numConstantValues + " but got " + numExpressionValues);
             }
@@ -390,10 +390,10 @@ public class MessageFormatListener extends MSpecBaseListener {
     }
 
     private TypeReference getTypeReference(MSpecParser.TypeReferenceContext ctx) {
-        if(ctx.simpleTypeReference != null) {
+        if (ctx.simpleTypeReference != null) {
             SimpleTypeReference.SimpleBaseType simpleBaseType = SimpleTypeReference.SimpleBaseType.valueOf(
                 ctx.simpleTypeReference.base.getText().toUpperCase());
-            if(ctx.simpleTypeReference.size != null) {
+            if (ctx.simpleTypeReference.size != null) {
                 int size = Integer.parseInt(ctx.simpleTypeReference.size.getText());
                 return new DefaultSimpleTypeReference(simpleBaseType, size);
             } else {
@@ -407,7 +407,7 @@ public class MessageFormatListener extends MSpecBaseListener {
     private SimpleTypeReference getSimpleTypeReference(MSpecParser.DataTypeContext ctx) {
         SimpleTypeReference.SimpleBaseType simpleBaseType =
             SimpleTypeReference.SimpleBaseType.valueOf(ctx.base.getText().toUpperCase());
-        if(ctx.size != null) {
+        if (ctx.size != null) {
             int size = Integer.parseInt(ctx.size.getText());
             return new DefaultSimpleTypeReference(simpleBaseType, size);
         } else {
@@ -417,7 +417,7 @@ public class MessageFormatListener extends MSpecBaseListener {
 
     private DefaultSwitchField getSwitchField() {
         for (Field field : Objects.requireNonNull(parserContexts.peek())) {
-            if(field instanceof DefaultSwitchField) {
+            if (field instanceof DefaultSwitchField) {
                 return (DefaultSwitchField) field;
             }
         }
@@ -440,9 +440,9 @@ public class MessageFormatListener extends MSpecBaseListener {
 
     private Term[] getFieldParams(MSpecParser.FieldDefinitionContext parentCtx) {
         Term[] params = null;
-        if(parentCtx.params != null) {
+        if (parentCtx.params != null) {
             params = new Term[parentCtx.params.expression().size()];
-            for(int i = 0; i < parentCtx.params.expression().size(); i++) {
+            for (int i = 0; i < parentCtx.params.expression().size(); i++) {
                 params[i] = parseExpression(parentCtx.params.expression().get(i).expr.getText());
             }
         }
@@ -460,7 +460,7 @@ public class MessageFormatListener extends MSpecBaseListener {
     }
 
     private String unquoteString(String quotedString) {
-        if(quotedString != null && quotedString.length() > 2) {
+        if (quotedString != null && quotedString.length() > 2) {
             return quotedString.substring(1, quotedString.length() - 1);
         }
         return quotedString;
diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java
index a134666..cc6f9df 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java
@@ -19,10 +19,8 @@
 
 package org.apache.plc4x.plugins.codegenerator.language.mspec.parser;
 
-import org.antlr.v4.runtime.CharStream;
 import org.antlr.v4.runtime.CharStreams;
 import org.antlr.v4.runtime.CommonTokenStream;
-import org.antlr.v4.runtime.tree.ParseTree;
 import org.antlr.v4.runtime.tree.ParseTreeWalker;
 import org.apache.plc4x.plugins.codegenerator.language.mspec.MSpecLexer;
 import org.apache.plc4x.plugins.codegenerator.language.mspec.MSpecParser;
@@ -31,55 +29,18 @@ import org.apache.plc4x.plugins.codegenerator.types.definitions.TypeDefinition;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Map;
-import java.util.function.Function;
-import java.util.function.Supplier;
 
 public class MessageFormatParser {
 
-    // TODO: can be used a instance once thread safety is asserted
-    private Function<CharStream, MSpecLexer> lexerBuilder;
-
-    // TODO: can be used a instance once thread safety is asserted
-    private Function<MSpecLexer, CommonTokenStream> commonTokenStreamBuilder;
-
-    // TODO: can be used a instance once thread safety is asserted
-    private Function<CommonTokenStream, MSpecParser> commonTokenStreamMSpecParserBuilder;
-
-    // TODO: can be used a instance once thread safety is asserted
-    private Supplier<ParseTreeWalker> voidParseTreeWalkerBuilder;
-
-    // TODO: can be used a instance once thread safety is asserted
-    private Supplier<MessageFormatListener> messageFormatListenerBuilder;
-
-    public MessageFormatParser() {
-        lexerBuilder = MSpecLexer::new;
-        commonTokenStreamBuilder = CommonTokenStream::new;
-        commonTokenStreamMSpecParserBuilder = MSpecParser::new;
-        voidParseTreeWalkerBuilder = ParseTreeWalker::new;
-        messageFormatListenerBuilder = MessageFormatListener::new;
-    }
-
-    MessageFormatParser(Function<CharStream, MSpecLexer> lexerBuilder, Function<MSpecLexer, CommonTokenStream> commonTokenStreamBuilder, Function<CommonTokenStream, MSpecParser> commonTokenStreamMSpecParserBuilder, Supplier<ParseTreeWalker> voidParseTreeWalkerBuilder, Supplier<MessageFormatListener> messageFormatListenerBuilder) {
-        this.lexerBuilder = lexerBuilder;
-        this.commonTokenStreamBuilder = commonTokenStreamBuilder;
-        this.commonTokenStreamMSpecParserBuilder = commonTokenStreamMSpecParserBuilder;
-        this.voidParseTreeWalkerBuilder = voidParseTreeWalkerBuilder;
-        this.messageFormatListenerBuilder = messageFormatListenerBuilder;
-    }
-
     public Map<String, TypeDefinition> parse(InputStream source) {
         MSpecLexer lexer;
         try {
-            lexer = lexerBuilder.apply(CharStreams.fromStream(source));
+            lexer = new MSpecLexer(CharStreams.fromStream(source));
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
-        CommonTokenStream tokens = commonTokenStreamBuilder.apply(lexer);
-        MSpecParser parser = commonTokenStreamMSpecParserBuilder.apply(tokens);
-        ParseTree tree = parser.file();
-        ParseTreeWalker walker = voidParseTreeWalkerBuilder.get();
-        MessageFormatListener listener = messageFormatListenerBuilder.get();
-        walker.walk(listener, tree);
+        MessageFormatListener listener = new MessageFormatListener();
+        new ParseTreeWalker().walk(listener, new MSpecParser(new CommonTokenStream(lexer)).file());
         return listener.getTypes();
     }
 
diff --git a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListenerTest.java b/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListenerTest.java
deleted file mode 100644
index 3d9f4c4..0000000
--- a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListenerTest.java
+++ /dev/null
@@ -1,162 +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.parser;
-
-import org.antlr.v4.runtime.CommonToken;
-import org.apache.plc4x.plugins.codegenerator.language.mspec.MSpecParser;
-import org.apache.plc4x.plugins.codegenerator.types.definitions.TypeDefinition;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.junit.jupiter.MockitoExtension;
-
-import java.util.Map;
-
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.hasSize;
-
-// TODO: implement me
-@ExtendWith(MockitoExtension.class)
-class MessageFormatListenerTest {
-
-    MessageFormatListener SUT;
-
-    @BeforeEach
-    void setUp() {
-        SUT = new MessageFormatListener();
-    }
-
-    @Test
-    void getTypes() {
-        Map<String, TypeDefinition> types = SUT.getTypes();
-        assertThat(types, nullValue());
-    }
-
-    @Test
-    void enterFile() {
-        assertThat(SUT.getParserContexts(), nullValue());
-        assertThat(SUT.getEnumContexts(), nullValue());
-        assertThat(SUT.getTypes(), nullValue());
-        SUT.enterFile(null);
-        assertThat(SUT.getParserContexts(), not(nullValue()));
-        assertThat(SUT.getEnumContexts(), not(nullValue()));
-        assertThat(SUT.getTypes(), not(nullValue()));
-    }
-
-    @Test
-    void enterComplexType() {
-        assertThat(SUT.getParserContexts(), nullValue());
-        assertThat(SUT.getEnumContexts(), nullValue());
-        assertThat(SUT.getTypes(), nullValue());
-        SUT.enterFile(null);
-        MSpecParser.ComplexTypeContext complexTypeContext = new MSpecParser.ComplexTypeContext(null, 0);
-        SUT.enterComplexType(complexTypeContext);
-        assertThat(SUT.getParserContexts(), hasSize(1));
-        assertThat(SUT.getEnumContexts(), hasSize(0));
-        assertThat(SUT.getTypes().values(), hasSize(0));
-        complexTypeContext.enumValues = new MSpecParser.EnumValueDefinitionContext(null, 0);
-        SUT.enterComplexType(complexTypeContext);
-        assertThat(SUT.getParserContexts(), hasSize(1));
-        assertThat(SUT.getEnumContexts(), hasSize(1));
-        assertThat(SUT.getTypes().values(), hasSize(0));
-    }
-
-    @Test
-    void exitComplexType() {
-        MSpecParser.ComplexTypeContext complexTypeContext = new MSpecParser.ComplexTypeContext(null, 0);
-        complexTypeContext.name = new MSpecParser.IdExpressionContext(null, 0);
-        complexTypeContext.name.id = new CommonToken(0);
-        SUT.exitComplexType(complexTypeContext);
-    }
-
-    @Test
-    void enterArrayField() {
-    }
-
-    @Test
-    void enterChecksumField() {
-    }
-
-    @Test
-    void enterConstField() {
-    }
-
-    @Test
-    void enterDiscriminatorField() {
-    }
-
-    @Test
-    void enterEnumField() {
-    }
-
-    @Test
-    void enterImplicitField() {
-    }
-
-    @Test
-    void enterManualArrayField() {
-    }
-
-    @Test
-    void enterManualField() {
-    }
-
-    @Test
-    void enterOptionalField() {
-    }
-
-    @Test
-    void enterPaddingField() {
-    }
-
-    @Test
-    void enterReservedField() {
-    }
-
-    @Test
-    void enterSimpleField() {
-    }
-
-    @Test
-    void enterTypeSwitchField() {
-    }
-
-    @Test
-    void enterVirtualField() {
-    }
-
-    @Test
-    void enterCaseStatement() {
-    }
-
-    @Test
-    void exitCaseStatement() {
-    }
-
-    @Test
-    void enterEnumValueDefinition() {
-    }
-
-    @Test
-    void main() {
-    }
-}
\ No newline at end of file
diff --git a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java b/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java
index 7aa47d2..37b9720 100644
--- a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java
+++ b/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java
@@ -19,56 +19,18 @@
 
 package org.apache.plc4x.plugins.codegenerator.language.mspec.parser;
 
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.antlr.v4.runtime.tree.ParseTreeWalker;
 import org.apache.commons.io.IOUtils;
-import org.apache.plc4x.plugins.codegenerator.language.mspec.MSpecLexer;
-import org.apache.plc4x.plugins.codegenerator.language.mspec.MSpecParser;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
 
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 
 import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.mockito.Mockito.mock;
 
-// TODO: implement me
-@ExtendWith(MockitoExtension.class)
 class MessageFormatParserTest {
 
-    //@InjectMocks
-    MessageFormatParser SUT;
-
-    @Mock
-    MSpecLexer mSpecLexer;
-
-    @Mock
-    CommonTokenStream commonTokenStream;
-
-    @Mock
-    MSpecParser mSpecParser;
-
-    @Mock
-    ParseTreeWalker parseTreeWalker;
-
-    @Mock
-    MessageFormatListener messageFormatListener;
-
-    @BeforeEach
-    void setUp() {
-        SUT = new MessageFormatParser(
-            (_ignore) -> mSpecLexer,
-            (_ignore) -> commonTokenStream,
-            (_ignore) -> mSpecParser,
-            () -> parseTreeWalker,
-            () -> messageFormatListener
-        );
-    }
+    MessageFormatParser SUT = new MessageFormatParser();
 
     @Test
     void parseNull() {
@@ -78,10 +40,6 @@ class MessageFormatParserTest {
     @Disabled("mockito broken because of NPE in REAL code")
     @Test
     void parseSomething() {
-        // TODO: seems like mockito is broken somehow...
-        MSpecParser mSpecParser = mock(MSpecParser.class);
-        // TODO: ... because this throws a NPE... (somehow call ends up in real code)
-        mSpecParser.file();
         InputStream is = IOUtils.toInputStream("test", StandardCharsets.UTF_8);
         SUT.parse(is);
     }


[plc4x] 02/02: added parent expressionn

Posted by sr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch feature/ams_ads_mpsec
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 393e134a4fbf05cb1a32d09921d51c0d0e513fdb
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Dec 5 10:01:09 2019 +0100

    added parent expressionn
---
 .../language/mspec/expression/Expression.g4        |  1 +
 .../mspec/expression/ExpressionStringListener.java | 11 ++++++++
 .../expression/ExpressionStringParserTest.java     |  6 +++++
 .../mspec/parser/MessageFormatParserTest.java      | 11 +++-----
 .../src/test/resources/mspec.example               | 29 +++++++++++-----------
 .../main/resources/protocols/amsads/amsads.mspec   | 26 +++++++++----------
 6 files changed, 50 insertions(+), 34 deletions(-)

diff --git a/build-utils/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/Expression.g4 b/build-utils/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/Expression.g4
index 7e8c288..fcda12a 100644
--- a/build-utils/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/Expression.g4
+++ b/build-utils/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/Expression.g4
@@ -52,6 +52,7 @@ expression
  | identifierSegment                                    #identifierExpression
  | String indexes?                                      #stringExpression
  | '(' expression ')' indexes?                          #expressionExpression
+ | '../' expression                                     #parentExpression
  ;
 
 identifierSegment
diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
index f4ae9e3..eb72be7 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
@@ -187,6 +187,17 @@ public class ExpressionStringListener extends ExpressionBaseListener {
         parserContexts.peek().add(ut);
     }
 
+    @Override
+    public void enterParentExpression(ExpressionParser.ParentExpressionContext ctx) {
+        parserContexts.push(new LinkedList<>());
+    }
+
+    @Override
+    public void exitParentExpression(ExpressionParser.ParentExpressionContext ctx) {
+        UnaryTerm ut = getUnaryTerm("..", parserContexts.pop());
+        parserContexts.peek().add(ut);
+    }
+
     /////////////////////////////////////////////////////////////////////////////////////////
     // Binary Terms
     /////////////////////////////////////////////////////////////////////////////////////////
diff --git a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParserTest.java b/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParserTest.java
index 71c0222..606885b 100644
--- a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParserTest.java
+++ b/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParserTest.java
@@ -141,6 +141,12 @@ class ExpressionStringParserTest {
         );
     }
 
+    @Test
+    void testParentReference() {
+        Term term = SUT.parse(IOUtils.toInputStream("../data.lengthInBytes", Charset.defaultCharset()));
+        assertThat(term, not(nullValue()));
+    }
+
     void assertNumericLiteral(Term term, Number number) {
         assertThat(term, not(nullValue()));
         assertThat(term, instanceOf(NumericLiteral.class));
diff --git a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java b/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java
index 37b9720..127a2d2 100644
--- a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java
+++ b/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java
@@ -19,12 +19,10 @@
 
 package org.apache.plc4x.plugins.codegenerator.language.mspec.parser;
 
-import org.apache.commons.io.IOUtils;
-import org.junit.jupiter.api.Disabled;
+import org.apache.plc4x.plugins.codegenerator.types.definitions.TypeDefinition;
 import org.junit.jupiter.api.Test;
 
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
+import java.util.Map;
 
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
@@ -37,10 +35,9 @@ class MessageFormatParserTest {
         assertThrows(NullPointerException.class, () -> SUT.parse(null));
     }
 
-    @Disabled("mockito broken because of NPE in REAL code")
     @Test
     void parseSomething() {
-        InputStream is = IOUtils.toInputStream("test", StandardCharsets.UTF_8);
-        SUT.parse(is);
+        Map<String, TypeDefinition> parse = SUT.parse(getClass().getResourceAsStream("/mspec.example"));
+        System.out.println(parse);
     }
 }
\ No newline at end of file
diff --git a/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec b/build-utils/protocol-base-mspec/src/test/resources/mspec.example
similarity index 73%
copy from protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec
copy to build-utils/protocol-base-mspec/src/test/resources/mspec.example
index 0cc973f..963b5d9 100644
--- a/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec
+++ b/build-utils/protocol-base-mspec/src/test/resources/mspec.example
@@ -22,22 +22,22 @@
 ////////////////////////////////////////////////////////////////
 
 [type 'AMSPacket'
-    [reserved   uint       16   '0x0000'                                      ]
-    [implicit   uint       32   'header.lengthInBytes + data.lengthInBytes'   ]
-    [simple     AMSHeader  'header'                                           ]
-    [simple     ADSData    'data'                                             ]
+    [reserved   uint       16       '0x0000'                                             ]
+    [implicit   uint       32       'length' 'header.lengthInBytes + data.lengthInBytes' ]
+    [simple     AMSHeader  'header'                                                      ]
+    [simple     ADSData    'data'                                                        ]
 ]
 
 [type 'AMSHeader'
-    [simple     AMSNetId        'targetAmsNetId'    ]
-    [simple     uint        16  'targetAmsPort'     ]
-    [simple     AMSNetId        'sourceAmsNetId'    ]
-    [simple     uint        16  'sourceAmsPort'     ]
-    [enum       CommandId       'commandId'         ]
-    [bitmask    State           'state'             ]
-    [simple     uint        32  '../data.lengthInBytes'        ]
-    [simple     uint        32  'errorCode']
-    [simple     byte        32  'invokeId'          ]
+    [simple     AMSNetId        'targetAmsNetId'        ]
+    [simple     uint        16  'targetAmsPort'         ]
+    [simple     AMSNetId        'sourceAmsNetId'        ]
+    [simple     uint        16  'sourceAmsPort'         ]
+    [enum       CommandId       'commandId'             ]
+    [bitmask    State           'state'                 ]
+    [simple     uint        32  '../data.lengthInBytes' ]
+    [simple     uint        32  'errorCode'             ]
+    [simple     byte        32  'invokeId'              ]
 ]
 
 [enum uint 16 'CommandId'
@@ -76,5 +76,6 @@
 
 [type 'ADSData'
    // TODO: implement me..... arrrrrrrggggggggggggg
-   ....
+   //....
+   [simple     uint        8   'random'            ]
 ]
\ No newline at end of file
diff --git a/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec b/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec
index 0cc973f..8f22167 100644
--- a/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec
+++ b/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec
@@ -22,22 +22,22 @@
 ////////////////////////////////////////////////////////////////
 
 [type 'AMSPacket'
-    [reserved   uint       16   '0x0000'                                      ]
-    [implicit   uint       32   'header.lengthInBytes + data.lengthInBytes'   ]
-    [simple     AMSHeader  'header'                                           ]
-    [simple     ADSData    'data'                                             ]
+    [reserved   uint       16       '0x0000'                                             ]
+    [implicit   uint       32       'length' 'header.lengthInBytes + data.lengthInBytes' ]
+    [simple     AMSHeader  'header'                                                      ]
+    [simple     ADSData    'data'                                                        ]
 ]
 
 [type 'AMSHeader'
-    [simple     AMSNetId        'targetAmsNetId'    ]
-    [simple     uint        16  'targetAmsPort'     ]
-    [simple     AMSNetId        'sourceAmsNetId'    ]
-    [simple     uint        16  'sourceAmsPort'     ]
-    [enum       CommandId       'commandId'         ]
-    [bitmask    State           'state'             ]
-    [simple     uint        32  '../data.lengthInBytes'        ]
-    [simple     uint        32  'errorCode']
-    [simple     byte        32  'invokeId'          ]
+    [simple     AMSNetId        'targetAmsNetId'        ]
+    [simple     uint        16  'targetAmsPort'         ]
+    [simple     AMSNetId        'sourceAmsNetId'        ]
+    [simple     uint        16  'sourceAmsPort'         ]
+    [enum       CommandId       'commandId'             ]
+    [bitmask    State           'state'                 ]
+    [simple     uint        32  '../data.lengthInBytes' ]
+    [simple     uint        32  'errorCode'             ]
+    [simple     byte        32  'invokeId'              ]
 ]
 
 [enum uint 16 'CommandId'