This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/develop by this push:
new 0d52bde353 feat(codegen): comment support
0d52bde353 is described below
commit 0d52bde353dc26550d1f12f53162230846f7e159
Author: Sebastian Rühl <[email protected]>
AuthorDate: Mon Sep 8 17:38:38 2025 +0200
feat(codegen): comment support
---
.../plugins/codegenerator/language/mspec/MSpec.g4 | 4 +-
.../mspec/expression/ExpressionStringListener.java | 19 +-
.../mspec/model/definitions/DefaultArgument.java | 4 +-
.../definitions/DefaultComplexTypeDefinition.java | 6 +-
.../DefaultConstantsTypeDefinition.java | 8 +-
.../definitions/DefaultDataIoTypeDefinition.java | 13 +-
.../DefaultDiscriminatedComplexTypeDefinition.java | 4 +-
.../definitions/DefaultEnumTypeDefinition.java | 4 +-
.../mspec/model/definitions/DefaultEnumValue.java | 9 +-
.../model/definitions/DefaultTypeDefinition.java | 18 +-
.../mspec/model/fields/DefaultAbstractField.java | 4 +-
.../mspec/model/fields/DefaultArrayField.java | 16 +-
.../mspec/model/fields/DefaultAssertField.java | 4 +-
.../mspec/model/fields/DefaultChecksumField.java | 7 +-
.../mspec/model/fields/DefaultConstField.java | 7 +-
.../model/fields/DefaultDiscriminatorField.java | 6 +-
.../mspec/model/fields/DefaultEnumField.java | 4 +-
.../language/mspec/model/fields/DefaultField.java | 22 +-
.../mspec/model/fields/DefaultImplicitField.java | 7 +-
.../model/fields/DefaultManualArrayField.java | 16 +-
.../mspec/model/fields/DefaultManualField.java | 4 +-
.../mspec/model/fields/DefaultOptionalField.java | 4 +-
.../mspec/model/fields/DefaultPaddingField.java | 4 +-
.../mspec/model/fields/DefaultPeekField.java | 13 +-
.../mspec/model/fields/DefaultReservedField.java | 7 +-
.../mspec/model/fields/DefaultSimpleField.java | 4 +-
.../mspec/model/fields/DefaultStateField.java | 4 +-
.../mspec/model/fields/DefaultSwitchField.java | 4 +-
.../mspec/model/fields/DefaultTypedField.java | 7 +-
.../mspec/model/fields/DefaultTypedNamedField.java | 4 +-
.../mspec/model/fields/DefaultUnknownField.java | 6 +-
.../mspec/model/fields/DefaultValidationField.java | 8 +-
.../mspec/model/fields/DefaultVirtualField.java | 8 +-
.../references/AbstractSimpleTypeReference.java | 9 +-
.../model/references/DefaultEnumTypeReference.java | 8 +-
.../references/DefaultVstringTypeReference.java | 4 +-
.../mspec/model/terms/DefaultBinaryTerm.java | 8 +-
.../mspec/model/terms/DefaultBooleanLiteral.java | 4 +-
.../model/terms/DefaultHexadecimalLiteral.java | 4 +-
.../mspec/model/terms/DefaultNumericLiteral.java | 4 +-
.../mspec/model/terms/DefaultStringLiteral.java | 4 +-
.../mspec/model/terms/DefaultTernaryTerm.java | 10 +-
.../mspec/model/terms/DefaultUnaryTerm.java | 6 +-
.../mspec/model/terms/DefaultVariableLiteral.java | 2 +-
.../mspec/parser/MessageFormatListener.java | 454 ++++++++++++---------
.../language/mspec/parser/MessageFormatParser.java | 12 +-
.../mspec/protocol/ValidatableTypeContext.java | 2 +-
47 files changed, 444 insertions(+), 346 deletions(-)
diff --git
a/code-generation/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/MSpec.g4
b/code-generation/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/MSpec.g4
index 2659e08e3b..58a42c18a7 100644
---
a/code-generation/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/MSpec.g4
+++
b/code-generation/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/MSpec.g4
@@ -414,10 +414,8 @@ STRING_CHARACTER
: ~["\\\r\n]
;
-// Stuff we just want to ignore
-
LINE_COMMENT
- : '//' ~[\r\n]* -> channel(HIDDEN)
+ : ('//' ~[\r\n]*)+ -> channel(HIDDEN)
;
BLOCK_COMMENT
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
index 4c5f3dd313..899052765b 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
@@ -73,12 +73,13 @@ public class ExpressionStringListener extends
ExpressionBaseListener {
if (roots.size() != 1) {
throw new RuntimeException("Expression can only contain one root
term.");
}
- root = roots.get(0);
+ root = roots.getFirst();
}
/////////////////////////////////////////////////////////////////////////////////////////
// Literals
-
/////////////////////////////////////////////////////////////////////////////////////////
+
+ ///
//////////////////////////////////////////////////////////////////////////////////////
@Override
public void exitNullExpression(ExpressionParser.NullExpressionContext ctx)
{
@@ -284,7 +285,8 @@ public class ExpressionStringListener extends
ExpressionBaseListener {
/////////////////////////////////////////////////////////////////////////////////////////
// Unary Terms
-
/////////////////////////////////////////////////////////////////////////////////////////
+
+ ///
//////////////////////////////////////////////////////////////////////////////////////
@Override
public void enterNotExpression(ExpressionParser.NotExpressionContext ctx) {
@@ -321,7 +323,8 @@ public class ExpressionStringListener extends
ExpressionBaseListener {
/////////////////////////////////////////////////////////////////////////////////////////
// Binary Terms
-
/////////////////////////////////////////////////////////////////////////////////////////
+
+ ///
//////////////////////////////////////////////////////////////////////////////////////
@Override
public void enterOrExpression(ExpressionParser.OrExpressionContext ctx) {
@@ -435,7 +438,8 @@ public class ExpressionStringListener extends
ExpressionBaseListener {
/////////////////////////////////////////////////////////////////////////////////////////
// Ternary Terms
-
/////////////////////////////////////////////////////////////////////////////////////////
+
+ ///
//////////////////////////////////////////////////////////////////////////////////////
@Override
public void enterIfExpression(ExpressionParser.IfExpressionContext ctx) {
@@ -450,13 +454,14 @@ public class ExpressionStringListener extends
ExpressionBaseListener {
/////////////////////////////////////////////////////////////////////////////////////////
// Helpers
-
/////////////////////////////////////////////////////////////////////////////////////////
+
+ ///
//////////////////////////////////////////////////////////////////////////////////////
private UnaryTerm getUnaryTerm(String op, List<Term> terms) {
if (terms.size() != 1) {
throw new RuntimeException(op + " should be a unary operation");
}
- Term a = terms.get(0);
+ Term a = terms.getFirst();
return new DefaultUnaryTerm(a, op);
}
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultArgument.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultArgument.java
index f3d096c9f5..5beb04f1ed 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultArgument.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultArgument.java
@@ -27,12 +27,10 @@ import java.util.concurrent.CompletionStage;
public class DefaultArgument implements Argument {
+ protected final CompletableFuture<TypeReference>
typeReferenceCompletionStage = new CompletableFuture<>();
private final String name;
-
private TypeReference type;
- protected final CompletableFuture<TypeReference>
typeReferenceCompletionStage = new CompletableFuture<>();
-
public DefaultArgument(String name) {
this.name = Objects.requireNonNull(name);
}
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 45d08d3ae3..cff93010e4 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
@@ -32,8 +32,8 @@ public class DefaultComplexTypeDefinition extends
DefaultTypeDefinition implemen
private final List<Field> fields;
protected ComplexTypeDefinition parentType;
- public DefaultComplexTypeDefinition(String name, Map<String, Term>
attributes, List<Argument> parserArguments, boolean isAbstract, List<Field>
fields) {
- super(name, attributes, parserArguments);
+ public DefaultComplexTypeDefinition(String name, Map<String, Term>
attributes, List<Argument> parserArguments, boolean isAbstract, List<Field>
fields, String comment) {
+ super(name, attributes, parserArguments, comment);
this.isAbstract = isAbstract;
this.fields = Objects.requireNonNull(fields);
}
@@ -48,7 +48,7 @@ public class DefaultComplexTypeDefinition extends
DefaultTypeDefinition implemen
public Optional<List<Argument>> getAllParserArguments() {
List<Argument> allArguments = new
ArrayList<>(getParserArguments().orElse(Collections.emptyList()));
- if(getParentType().isPresent()) {
+ if (getParentType().isPresent()) {
ComplexTypeDefinition parent = getParentType().get();
allArguments.addAll(parent.getAllParserArguments().orElse(Collections.emptyList()));
}
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultConstantsTypeDefinition.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultConstantsTypeDefinition.java
index 2b90e4430b..17f64bcc02 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultConstantsTypeDefinition.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultConstantsTypeDefinition.java
@@ -18,24 +18,22 @@
*/
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.ConstantsTypeDefinition;
import org.apache.plc4x.plugins.codegenerator.types.fields.ConstField;
import org.apache.plc4x.plugins.codegenerator.types.fields.Field;
import org.apache.plc4x.plugins.codegenerator.types.fields.PropertyField;
import org.apache.plc4x.plugins.codegenerator.types.fields.VirtualField;
-import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
+import java.util.Collections;
import java.util.List;
-import java.util.Map;
import java.util.stream.Collectors;
public class DefaultConstantsTypeDefinition extends DefaultTypeDefinition
implements ConstantsTypeDefinition {
private final List<Field> fields;
- public DefaultConstantsTypeDefinition(String name, Map<String, Term>
attributes, List<Argument> parserArguments, List<Field> fields) {
- super(name, attributes, parserArguments);
+ public DefaultConstantsTypeDefinition(String name, List<Field> fields,
String comment) {
+ super(name, Collections.emptyMap(), Collections.emptyList(), comment);
this.fields = 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 d8d85b4310..60107639f6 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
@@ -34,19 +34,20 @@ public class DefaultDataIoTypeDefinition extends
DefaultComplexTypeDefinition im
private static final Logger LOGGER =
LoggerFactory.getLogger(DefaultDataIoTypeDefinition.class);
private final SwitchField switchField;
private TypeReference type;
- public DefaultDataIoTypeDefinition(String name, Map<String, Term>
attributes, List<Argument> parserArguments, SwitchField switchField) {
- super(name, attributes, parserArguments, false, List.of(switchField));
+
+ public DefaultDataIoTypeDefinition(String name, Map<String, Term>
attributes, List<Argument> parserArguments, SwitchField switchField, String
comment) {
+ super(name, attributes, parserArguments, false, List.of(switchField),
comment);
this.switchField = Objects.requireNonNull(switchField);
- if (parserArguments.size() < 1) {
+ if (parserArguments.isEmpty()) {
throw new IllegalStateException();
}
- ((DefaultArgument)
parserArguments.get(0)).getTypeReferenceCompletionStage().whenComplete((typeReference,
throwable) -> {
+ ((DefaultArgument)
parserArguments.getFirst()).getTypeReferenceCompletionStage().whenComplete((typeReference,
throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
- LOGGER.debug("Error setting type for {}",
parserArguments.get(0), throwable);
+ LOGGER.debug("Error setting type for {}",
parserArguments.getFirst(), throwable);
return;
}
- this.type =
Objects.requireNonNull(parserArguments.get(0).getType());
+ this.type =
Objects.requireNonNull(parserArguments.getFirst().getType());
});
}
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 3615bcaad3..8aaeca41ac 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
@@ -33,8 +33,8 @@ public class DefaultDiscriminatedComplexTypeDefinition
extends DefaultComplexTyp
private final List<Term> discriminatorValueTerms;
- public DefaultDiscriminatedComplexTypeDefinition(String name, Map<String,
Term> attributes, List<Argument> parserArguments, boolean isAbstract,
List<Field> fields, List<Term> discriminatorValueTerms) {
- super(name, attributes, parserArguments, isAbstract, fields);
+ public DefaultDiscriminatedComplexTypeDefinition(String name, Map<String,
Term> attributes, List<Argument> parserArguments, boolean isAbstract,
List<Field> fields, List<Term> discriminatorValueTerms, String comment) {
+ super(name, attributes, parserArguments, isAbstract, fields, comment);
this.discriminatorValueTerms =
Objects.requireNonNull(discriminatorValueTerms);
}
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 378de83a71..6d0640873b 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
@@ -40,8 +40,8 @@ public class DefaultEnumTypeDefinition extends
DefaultTypeDefinition implements
private final Map<String, TypeReference> constants;
public DefaultEnumTypeDefinition(String name, SimpleTypeReference type,
Map<String, Term> attributes, List<EnumValue> enumValues,
- List<Argument> parserArgument) {
- super(name, attributes, parserArgument);
+ List<Argument> parserArgument, String
comment) {
+ super(name, attributes, parserArgument, comment);
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/DefaultEnumValue.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultEnumValue.java
index 76cdfd9f5e..2e9a786a89 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultEnumValue.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/definitions/DefaultEnumValue.java
@@ -29,11 +29,13 @@ public class DefaultEnumValue implements EnumValue {
private final String value;
private final String name;
private final Map<String, String> constants;
+ private final String comment;
- public DefaultEnumValue(String value, String name, Map<String, String>
constants) {
+ public DefaultEnumValue(String value, String name, Map<String, String>
constants, String comment) {
this.value = Objects.requireNonNull(value);
this.name = Objects.requireNonNull(name);
this.constants = constants;
+ this.comment = comment;
}
@Override
@@ -54,6 +56,11 @@ public class DefaultEnumValue implements EnumValue {
return Optional.ofNullable(constants.get(name));
}
+ @Override
+ public Optional<String> getComment() {
+ return Optional.ofNullable(comment);
+ }
+
@Override
public String toString() {
return "DefaultEnumValue{" +
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 3d61c22db3..2f3047eb57 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
@@ -27,13 +27,15 @@ import java.util.*;
public abstract class DefaultTypeDefinition {
protected final String name;
- private final Map<String, Term> attributes;
protected final List<Argument> parserArguments;
+ protected final String comment;
+ private final Map<String, Term> attributes;
- public DefaultTypeDefinition(String name, Map<String, Term> attributes,
List<Argument> parserArguments) {
+ public DefaultTypeDefinition(String name, Map<String, Term> attributes,
List<Argument> parserArguments, String comment) {
this.name = Objects.requireNonNull(name);
this.attributes = attributes;
this.parserArguments = parserArguments;
+ this.comment = comment;
}
public String getName() {
@@ -59,12 +61,17 @@ public abstract class DefaultTypeDefinition {
return Optional.of(allArguments);
}
+ public Optional<String> getComment() {
+ return Optional.ofNullable(comment);
+ }
+
@Override
public String toString() {
return "DefaultTypeDefinition{" +
"name='" + name + '\'' +
", attributes=" + attributes +
", parserArguments=" + parserArguments +
+ ", comment='" + comment + '\'' +
'}';
}
@@ -73,11 +80,14 @@ public abstract class DefaultTypeDefinition {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DefaultTypeDefinition that = (DefaultTypeDefinition) o;
- return name.equals(that.name) && Objects.equals(attributes,
that.attributes) && Objects.equals(parserArguments, that.parserArguments);
+ return name.equals(that.name) &&
+ Objects.equals(attributes, that.attributes) &&
+ Objects.equals(parserArguments, that.parserArguments) &&
+ comment.equals(that.comment);
}
@Override
public int hashCode() {
- return Objects.hash(name, attributes, parserArguments);
+ return Objects.hash(name, attributes, parserArguments, comment);
}
}
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 5fd413ef42..a627d5a3ee 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
@@ -25,8 +25,8 @@ import java.util.Map;
public class DefaultAbstractField extends DefaultTypedNamedField implements
AbstractField {
- public DefaultAbstractField(Map<String, Term> attributes, String name) {
- super(attributes, name);
+ public DefaultAbstractField(Map<String, Term> attributes, String name,
String comment) {
+ super(attributes, name, comment);
}
@Override
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 d31efd0e06..4f8934317c 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
@@ -31,8 +31,8 @@ public class DefaultArrayField extends DefaultTypedNamedField
implements ArrayFi
private final LoopType loopType;
private final Term loopExpression;
- public DefaultArrayField(Map<String, Term> attributes, String name,
LoopType loopType, Term loopExpression) {
- super(attributes, name);
+ public DefaultArrayField(Map<String, Term> attributes, String name,
LoopType loopType, Term loopExpression, String comment) {
+ super(attributes, name, comment);
this.loopType = Objects.requireNonNull(loopType);
this.loopExpression = Objects.requireNonNull(loopExpression);
}
@@ -45,19 +45,19 @@ public class DefaultArrayField extends
DefaultTypedNamedField implements ArrayFi
return loopExpression;
}
+ @Override
+ public ArrayTypeReference getType() {
+ return (ArrayTypeReference) super.getType();
+ }
+
@Override
public void setType(TypeReference typeReference) {
- if(!(typeReference instanceof ArrayTypeReference)) {
+ if (!(typeReference instanceof ArrayTypeReference)) {
throw new IllegalArgumentException("Array fields can only have
ArrayTypeReferences");
}
super.setType(typeReference);
}
- @Override
- public ArrayTypeReference getType() {
- return (ArrayTypeReference) super.getType();
- }
-
@Override
public String toString() {
return "DefaultArrayField{" +
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 bb36b97330..5758f2bdc0 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
@@ -28,8 +28,8 @@ public class DefaultAssertField extends
DefaultTypedNamedField implements Assert
private final Term conditionExpression;
- public DefaultAssertField(Map<String, Term> attributes, String name, Term
conditionExpression) {
- super(attributes, name);
+ public DefaultAssertField(Map<String, Term> attributes, String name, Term
conditionExpression, String comment) {
+ super(attributes, name, comment);
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 84d35449d6..e923d53ac1 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,14 +22,15 @@ import
org.apache.plc4x.plugins.codegenerator.types.fields.ChecksumField;
import
org.apache.plc4x.plugins.codegenerator.types.references.SimpleTypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.*;
+import java.util.Map;
+import java.util.Objects;
public class DefaultChecksumField extends DefaultTypedNamedField implements
ChecksumField {
private final Term checksumExpression;
- public DefaultChecksumField(Map<String, Term> attributes,
SimpleTypeReference type, String name, Term checksumExpression) {
- super(attributes, name);
+ public DefaultChecksumField(Map<String, Term> attributes,
SimpleTypeReference type, String name, Term checksumExpression, String comment)
{
+ super(attributes, name, comment);
this.checksumExpression = Objects.requireNonNull(checksumExpression);
this.type = type;
}
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 a2b892310c..44f3c364f3 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,14 +22,15 @@ import
org.apache.plc4x.plugins.codegenerator.types.fields.ConstField;
import org.apache.plc4x.plugins.codegenerator.types.terms.Literal;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.*;
+import java.util.Map;
+import java.util.Objects;
public class DefaultConstField extends DefaultTypedNamedField implements
ConstField {
private final Literal referenceValue;
- public DefaultConstField(Map<String, Term> attributes, String name,
Literal referenceValue) {
- super(attributes, name);
+ public DefaultConstField(Map<String, Term> attributes, String name,
Literal referenceValue, String comment) {
+ super(attributes, name, comment);
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 df0e8b2312..51756e88be 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
@@ -21,12 +21,12 @@ package
org.apache.plc4x.plugins.codegenerator.language.mspec.model.fields;
import org.apache.plc4x.plugins.codegenerator.types.fields.DiscriminatorField;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.*;
+import java.util.Map;
public class DefaultDiscriminatorField extends DefaultTypedNamedField
implements DiscriminatorField {
- public DefaultDiscriminatorField(Map<String, Term> attributes, String
name) {
- super(attributes, name);
+ public DefaultDiscriminatorField(Map<String, Term> attributes, String
name, String comment) {
+ super(attributes, name, comment);
}
@Override
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 541b946b2a..7aaefbba30 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
@@ -29,8 +29,8 @@ public class DefaultEnumField extends DefaultTypedNamedField
implements EnumFiel
private final String fieldName;
- public DefaultEnumField(Map<String, Term> attributes, EnumTypeReference
type, String name, String fieldName) {
- super(attributes, name);
+ public DefaultEnumField(Map<String, Term> attributes, EnumTypeReference
type, String name, String fieldName, String comment) {
+ super(attributes, name, comment);
this.fieldName = Objects.requireNonNull(fieldName);
this.type = type;
}
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 8107d4faf4..492dc5fb0a 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
@@ -25,25 +25,32 @@ import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+
public abstract class DefaultField {
- protected TypeDefinition owner;
protected final Map<String, Term> attributes;
+ protected final String comment;
+ protected TypeDefinition owner;
- protected DefaultField(Map<String, Term> attributes) {
+ protected DefaultField(Map<String, Term> attributes, String comment) {
this.attributes = Objects.requireNonNull(attributes);
+ this.comment = comment;
}
- public void setOwner(TypeDefinition owner) {
- this.owner = owner;
+ public Optional<String> getComment() {
+ return Optional.ofNullable(comment);
}
public TypeDefinition getOwner() {
return owner;
}
+ public void setOwner(TypeDefinition owner) {
+ this.owner = owner;
+ }
+
public Optional<Term> getAttribute(String attributeName) {
- if(attributes.containsKey(attributeName)) {
+ if (attributes.containsKey(attributeName)) {
return Optional.of(attributes.get(attributeName));
}
return Optional.empty();
@@ -53,6 +60,7 @@ public abstract class DefaultField {
public String toString() {
return "DefaultField{" +
"attributes=" + attributes +
+ ", comment='" + comment + '\'' +
'}';
}
@@ -61,11 +69,11 @@ public abstract class DefaultField {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DefaultField that = (DefaultField) o;
- return Objects.equals(attributes, that.attributes);
+ return Objects.equals(attributes, that.attributes) &&
comment.equals(that.comment);
}
@Override
public int hashCode() {
- return Objects.hash(attributes);
+ return Objects.hash(attributes, comment);
}
}
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 9cbc024791..ef88fcb863 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,14 +22,15 @@ import
org.apache.plc4x.plugins.codegenerator.types.fields.ImplicitField;
import
org.apache.plc4x.plugins.codegenerator.types.references.SimpleTypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.*;
+import java.util.Map;
+import java.util.Objects;
public class DefaultImplicitField extends DefaultTypedNamedField implements
ImplicitField {
private final Term serializeExpression;
- public DefaultImplicitField(Map<String, Term> attributes,
SimpleTypeReference type, String name, Term serializeExpression) {
- super(attributes, name);
+ public DefaultImplicitField(Map<String, Term> attributes,
SimpleTypeReference type, String name, Term serializeExpression, String
comment) {
+ super(attributes, name, comment);
this.serializeExpression = Objects.requireNonNull(serializeExpression);
this.type = type;
}
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 27ad02022f..a715e5926f 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
@@ -34,8 +34,8 @@ public class DefaultManualArrayField extends
DefaultTypedNamedField implements M
private final Term serializeExpression;
private final Term lengthExpression;
- public DefaultManualArrayField(Map<String, Term> attributes, String name,
LoopType loopType, Term loopExpression, Term parseExpression, Term
serializeExpression, Term lengthExpression) {
- super(attributes, name);
+ public DefaultManualArrayField(Map<String, Term> attributes, String name,
LoopType loopType, Term loopExpression, Term parseExpression, Term
serializeExpression, Term lengthExpression, String comment) {
+ super(attributes, name, comment);
this.loopType = Objects.requireNonNull(loopType);
this.loopExpression = Objects.requireNonNull(loopExpression);
this.parseExpression = Objects.requireNonNull(parseExpression);
@@ -63,19 +63,19 @@ public class DefaultManualArrayField extends
DefaultTypedNamedField implements M
return lengthExpression;
}
+ @Override
+ public ArrayTypeReference getType() {
+ return (ArrayTypeReference) super.getType();
+ }
+
@Override
public void setType(TypeReference typeReference) {
- if(!(typeReference instanceof ArrayTypeReference)) {
+ if (!(typeReference instanceof ArrayTypeReference)) {
throw new IllegalArgumentException("Manual array fields can only
have ArrayTypeReferences");
}
super.setType(typeReference);
}
- @Override
- public ArrayTypeReference getType() {
- return (ArrayTypeReference) super.getType();
- }
-
@Override
public String toString() {
return "DefaultManualArrayField{" +
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 eb4af3c927..dfb7e8c01c 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
@@ -30,8 +30,8 @@ public class DefaultManualField extends
DefaultTypedNamedField implements Manual
private final Term serializeExpression;
private final Term lengthExpression;
- public DefaultManualField(Map<String, Term> attributes, String name, Term
parseExpression, Term serializeExpression, Term lengthExpression) {
- super(attributes, name);
+ public DefaultManualField(Map<String, Term> attributes, String name, Term
parseExpression, Term serializeExpression, Term lengthExpression, String
comment) {
+ super(attributes, name, comment);
this.parseExpression = Objects.requireNonNull(parseExpression);
this.serializeExpression = Objects.requireNonNull(serializeExpression);
this.lengthExpression = Objects.requireNonNull(lengthExpression);
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 1afb91a064..30fc871f9d 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
@@ -29,8 +29,8 @@ public class DefaultOptionalField extends
DefaultTypedNamedField implements Opti
private final Term conditionExpression;
- public DefaultOptionalField(Map<String, Term> attributes, String name,
Term conditionExpression) {
- super(attributes, name);
+ public DefaultOptionalField(Map<String, Term> attributes, String name,
Term conditionExpression, String comment) {
+ super(attributes, name, comment);
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 1284c3ee33..22b849ce6a 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
@@ -30,8 +30,8 @@ public class DefaultPaddingField extends
DefaultTypedNamedField implements Paddi
private final Term paddingValue;
private final Term paddingCondition;
- public DefaultPaddingField(Map<String, Term> attributes,
SimpleTypeReference type, String name, Term paddingValue, Term
paddingCondition) {
- super(attributes, name);
+ public DefaultPaddingField(Map<String, Term> attributes,
SimpleTypeReference type, String name, Term paddingValue, Term
paddingCondition, String comment) {
+ super(attributes, name, comment);
this.paddingValue = Objects.requireNonNull(paddingValue);
this.paddingCondition = Objects.requireNonNull(paddingCondition);
this.type = type;
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultPeekField.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultPeekField.java
index f8f035449e..a1b97f4cc5 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultPeekField.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultPeekField.java
@@ -29,8 +29,8 @@ public class DefaultPeekField extends DefaultTypedNamedField
implements PeekFiel
private final Term offsetExpression;
- public DefaultPeekField(Map<String, Term> attributes, String name, Term
offsetExpression) {
- super(attributes, name);
+ public DefaultPeekField(Map<String, Term> attributes, String name, Term
offsetExpression, String comment) {
+ super(attributes, name, comment);
this.offsetExpression = offsetExpression;
}
@@ -47,9 +47,12 @@ public class DefaultPeekField extends DefaultTypedNamedField
implements PeekFiel
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- if (!super.equals(o)) return false;
+ if (this == o)
+ return true;
+ if (o == null || getClass() != o.getClass())
+ return false;
+ if (!super.equals(o))
+ return false;
DefaultPeekField that = (DefaultPeekField) o;
return Objects.equals(offsetExpression, that.offsetExpression);
}
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 e638bc2309..b7637dcfe6 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,14 +22,15 @@ import
org.apache.plc4x.plugins.codegenerator.types.fields.ReservedField;
import
org.apache.plc4x.plugins.codegenerator.types.references.SimpleTypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.*;
+import java.util.Map;
+import java.util.Objects;
public class DefaultReservedField extends DefaultTypedField implements
ReservedField {
private final Object referenceValue;
- public DefaultReservedField(Map<String, Term> attributes,
SimpleTypeReference type, Object referenceValue) {
- super(attributes);
+ public DefaultReservedField(Map<String, Term> attributes,
SimpleTypeReference type, Object referenceValue, String comment) {
+ super(attributes, comment);
this.referenceValue = Objects.requireNonNull(referenceValue);
this.type = type;
}
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 2d495c142c..9a6183a415 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
@@ -25,8 +25,8 @@ import java.util.Map;
public class DefaultSimpleField extends DefaultTypedNamedField implements
SimpleField {
- public DefaultSimpleField(Map<String, Term> attributes, String name) {
- super(attributes, name);
+ public DefaultSimpleField(Map<String, Term> attributes, String name,
String comment) {
+ super(attributes, name, comment);
}
@Override
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultStateField.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultStateField.java
index 95b0f21096..9fe013c9be 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultStateField.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultStateField.java
@@ -28,8 +28,8 @@ public class DefaultStateField extends DefaultTypedNamedField
implements StateFi
private final Term valueExpression;
- public DefaultStateField(Map<String, Term> attributes, String name, Term
valueExpression) {
- super(attributes, name);
+ public DefaultStateField(Map<String, Term> attributes, String name, Term
valueExpression, String comment) {
+ super(attributes, name, comment);
this.valueExpression = Objects.requireNonNull(valueExpression);
}
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 08f7b1d950..7e44127948 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
@@ -31,8 +31,8 @@ public class DefaultSwitchField extends DefaultField
implements SwitchField {
private final List<VariableLiteral> variableLiterals;
private final List<DiscriminatedComplexTypeDefinition> cases;
- public DefaultSwitchField(Map<String, Term> attributes,
List<VariableLiteral> variableLiterals) {
- super(attributes);
+ public DefaultSwitchField(Map<String, Term> attributes,
List<VariableLiteral> variableLiterals, String comment) {
+ super(attributes, comment);
this.variableLiterals = Objects.requireNonNull(variableLiterals);
this.cases = new LinkedList<>();
}
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultTypedField.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultTypedField.java
index 0b2a3f5f39..5f9d4ca4e0 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultTypedField.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultTypedField.java
@@ -28,12 +28,11 @@ import java.util.concurrent.CompletionStage;
public abstract class DefaultTypedField extends DefaultField {
- protected TypeReference type;
-
protected final CompletableFuture<TypeReference>
typeReferenceCompletionStage = new CompletableFuture<>();
+ protected TypeReference type;
- public DefaultTypedField(Map<String, Term> attributes) {
- super(attributes);
+ public DefaultTypedField(Map<String, Term> attributes, String comment) {
+ super(attributes, comment);
}
public TypeReference getType() {
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultTypedNamedField.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultTypedNamedField.java
index 4bebc74471..27e541f124 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultTypedNamedField.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultTypedNamedField.java
@@ -27,8 +27,8 @@ public class DefaultTypedNamedField extends DefaultTypedField
{
protected final String name;
- public DefaultTypedNamedField(Map<String, Term> attributes, String name) {
- super(attributes);
+ public DefaultTypedNamedField(Map<String, Term> attributes, String name,
String comment) {
+ super(attributes, comment);
this.name = name;
}
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 e078db313c..695dbecb5d 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,12 +22,12 @@ import
org.apache.plc4x.plugins.codegenerator.types.fields.UnknownField;
import
org.apache.plc4x.plugins.codegenerator.types.references.SimpleTypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.*;
+import java.util.Map;
public class DefaultUnknownField extends DefaultTypedField implements
UnknownField {
- public DefaultUnknownField(Map<String, Term> attributes,
SimpleTypeReference type) {
- super(attributes);
+ public DefaultUnknownField(Map<String, Term> attributes,
SimpleTypeReference type, String comment) {
+ super(attributes, comment);
this.type = type;
}
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultValidationField.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultValidationField.java
index 8900dbfb6f..17f049819a 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultValidationField.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultValidationField.java
@@ -18,7 +18,6 @@
*/
package org.apache.plc4x.plugins.codegenerator.language.mspec.model.fields;
-import org.apache.plc4x.plugins.codegenerator.types.fields.Field;
import org.apache.plc4x.plugins.codegenerator.types.fields.ValidationField;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
@@ -26,15 +25,14 @@ import java.util.Map;
import java.util.Objects;
import java.util.Optional;
-public class DefaultValidationField extends DefaultField implements
ValidationField, Field {
+public class DefaultValidationField extends DefaultField implements
ValidationField {
private final Term validationExpression;
private final String description;
-
private final boolean shouldFail;
- public DefaultValidationField(Map<String, Term> attributes, Term
validationExpression, String description, boolean shouldFail) {
- super(attributes);
+ public DefaultValidationField(Map<String, Term> attributes, Term
validationExpression, String description, boolean shouldFail, String comment) {
+ super(attributes, comment);
this.validationExpression =
Objects.requireNonNull(validationExpression);
this.description = description;
this.shouldFail = shouldFail;
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 edfd21c20a..ca5d7a84e4 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
@@ -1,3 +1,4 @@
+
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -21,14 +22,15 @@ package
org.apache.plc4x.plugins.codegenerator.language.mspec.model.fields;
import org.apache.plc4x.plugins.codegenerator.types.fields.VirtualField;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
-import java.util.*;
+import java.util.Map;
+import java.util.Objects;
public class DefaultVirtualField extends DefaultTypedNamedField implements
VirtualField {
private final Term valueExpression;
- public DefaultVirtualField(Map<String, Term> attributes, String name, Term
valueExpression) {
- super(attributes, name);
+ public DefaultVirtualField(Map<String, Term> attributes, String name, Term
valueExpression, String comment) {
+ super(attributes, name, comment);
this.valueExpression = Objects.requireNonNull(valueExpression);
}
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/AbstractSimpleTypeReference.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/AbstractSimpleTypeReference.java
index 82dab6bce1..fd305faf08 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/AbstractSimpleTypeReference.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/AbstractSimpleTypeReference.java
@@ -45,16 +45,15 @@ public abstract class AbstractSimpleTypeReference
implements SimpleTypeReference
@Override
public String toString() {
return "AbstractSimpleTypeReference{" +
- "baseType=" + baseType +
- ", sizeInBits=" + sizeInBits +
- '}';
+ "baseType=" + baseType +
+ ", sizeInBits=" + sizeInBits +
+ '}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
- if (!(o instanceof AbstractSimpleTypeReference)) return false;
- AbstractSimpleTypeReference that = (AbstractSimpleTypeReference) o;
+ if (!(o instanceof AbstractSimpleTypeReference that)) return false;
return getSizeInBits() == that.getSizeInBits() && getBaseType() ==
that.getBaseType();
}
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/DefaultEnumTypeReference.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/DefaultEnumTypeReference.java
index 6bc7617eea..e8e142600c 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/DefaultEnumTypeReference.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/DefaultEnumTypeReference.java
@@ -64,7 +64,7 @@ public class DefaultEnumTypeReference implements
EnumTypeReference {
@Override
public void setTypeDefinition(TypeDefinition typeDefinition) {
Objects.requireNonNull(typeDefinition);
- if(!(typeDefinition instanceof EnumTypeDefinition)) {
+ if (!(typeDefinition instanceof EnumTypeDefinition)) {
throw new IllegalArgumentException("DefaultEnumTypeReferences only
accept instances of EnumTypeDefinitions");
}
this.typeDefinition = ((EnumTypeDefinition) typeDefinition);
@@ -86,9 +86,9 @@ public class DefaultEnumTypeReference implements
EnumTypeReference {
@Override
public String toString() {
return "DefaultEnumTypeReference{" +
- "name='" + name + '\'' +
- ", params=" + params +
- '}';
+ "name='" + name + '\'' +
+ ", params=" + params +
+ '}';
}
@Override
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/DefaultVstringTypeReference.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/DefaultVstringTypeReference.java
index 84017af6dd..e074b062f3 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/DefaultVstringTypeReference.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/references/DefaultVstringTypeReference.java
@@ -40,8 +40,8 @@ public class DefaultVstringTypeReference extends
AbstractSimpleTypeReference imp
@Override
public String toString() {
return "DefaultStringTypeReference{" +
- "lengthExpression=" + lengthExpression +
- "} " + super.toString();
+ "lengthExpression=" + lengthExpression +
+ "} " + super.toString();
}
@Override
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultBinaryTerm.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultBinaryTerm.java
index bad4776d3f..e2fa953ac4 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultBinaryTerm.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultBinaryTerm.java
@@ -55,10 +55,10 @@ public class DefaultBinaryTerm implements BinaryTerm {
@Override
public String toString() {
return "DefaultBinaryTerm{" +
- "a=" + a +
- ", b=" + b +
- ", operation='" + operation + '\'' +
- '}';
+ "a=" + a +
+ ", b=" + b +
+ ", operation='" + operation + '\'' +
+ '}';
}
@Override
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultBooleanLiteral.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultBooleanLiteral.java
index f16244641a..d2ed160d6b 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultBooleanLiteral.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultBooleanLiteral.java
@@ -42,8 +42,8 @@ public class DefaultBooleanLiteral implements BooleanLiteral {
@Override
public String toString() {
return "DefaultBooleanLiteral{" +
- "value=" + value +
- '}';
+ "value=" + value +
+ '}';
}
@Override
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultHexadecimalLiteral.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultHexadecimalLiteral.java
index 61e7d563cc..ac5c2efe37 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultHexadecimalLiteral.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultHexadecimalLiteral.java
@@ -42,8 +42,8 @@ public class DefaultHexadecimalLiteral implements
HexadecimalLiteral {
@Override
public String toString() {
return "DefaultHexadecimalLiteral{" +
- "hexString=" + hexString +
- '}';
+ "hexString=" + hexString +
+ '}';
}
@Override
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultNumericLiteral.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultNumericLiteral.java
index 29de4de56f..cdecc9ada8 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultNumericLiteral.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultNumericLiteral.java
@@ -42,8 +42,8 @@ public class DefaultNumericLiteral implements NumericLiteral {
@Override
public String toString() {
return "DefaultNumericLiteral{" +
- "number=" + number +
- '}';
+ "number=" + number +
+ '}';
}
@Override
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultStringLiteral.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultStringLiteral.java
index 6b876e4843..534a3c5418 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultStringLiteral.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultStringLiteral.java
@@ -42,8 +42,8 @@ public class DefaultStringLiteral implements StringLiteral {
@Override
public String toString() {
return "DefaultStringLiteral{" +
- "value='" + value + '\'' +
- '}';
+ "value='" + value + '\'' +
+ '}';
}
@Override
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultTernaryTerm.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultTernaryTerm.java
index dde9d29437..55adbaa096 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultTernaryTerm.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultTernaryTerm.java
@@ -61,11 +61,11 @@ public class DefaultTernaryTerm implements TernaryTerm {
@Override
public String toString() {
return "DefaultTernaryTerm{" +
- "a=" + a +
- ", b=" + b +
- ", c=" + c +
- ", operation='" + operation + '\'' +
- '}';
+ "a=" + a +
+ ", b=" + b +
+ ", c=" + c +
+ ", operation='" + operation + '\'' +
+ '}';
}
@Override
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultUnaryTerm.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultUnaryTerm.java
index 51cae7d4db..f5d38033d1 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultUnaryTerm.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultUnaryTerm.java
@@ -49,9 +49,9 @@ public class DefaultUnaryTerm implements UnaryTerm {
@Override
public String toString() {
return "DefaultUnaryTerm{" +
- "a=" + a +
- ", operation='" + operation + '\'' +
- '}';
+ "a=" + a +
+ ", operation='" + operation + '\'' +
+ '}';
}
@Override
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultVariableLiteral.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultVariableLiteral.java
index 664660f13d..ce5cff8495 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultVariableLiteral.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultVariableLiteral.java
@@ -29,10 +29,10 @@ import java.util.Optional;
public class DefaultVariableLiteral implements VariableLiteral {
private final String name;
- private TypeReference typeReference;
private final List<Term> args;
private final Integer index;
private final VariableLiteral child;
+ private TypeReference typeReference;
public DefaultVariableLiteral(String name, List<Term> args, Integer index,
VariableLiteral child) {
this.name = Objects.requireNonNull(name);
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 8e7ce7e6c4..884ebaf84c 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,11 +18,14 @@
*/
package org.apache.plc4x.plugins.codegenerator.language.mspec.parser;
+import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.RuleContext;
+import org.antlr.v4.runtime.Token;
import org.apache.commons.io.IOUtils;
import
org.apache.plc4x.plugins.codegenerator.language.mspec.LazyTypeDefinitionConsumer;
import org.apache.plc4x.plugins.codegenerator.language.mspec.MSpecBaseListener;
+import org.apache.plc4x.plugins.codegenerator.language.mspec.MSpecLexer;
import org.apache.plc4x.plugins.codegenerator.language.mspec.MSpecParser;
import
org.apache.plc4x.plugins.codegenerator.language.mspec.expression.ExpressionStringParser;
import
org.apache.plc4x.plugins.codegenerator.language.mspec.model.definitions.*;
@@ -30,18 +33,20 @@ import
org.apache.plc4x.plugins.codegenerator.language.mspec.model.fields.*;
import
org.apache.plc4x.plugins.codegenerator.language.mspec.model.references.*;
import
org.apache.plc4x.plugins.codegenerator.language.mspec.model.terms.DefaultVariableLiteral;
import org.apache.plc4x.plugins.codegenerator.protocol.TypeContext;
-import org.apache.plc4x.plugins.codegenerator.types.definitions.*;
+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.definitions.TypeDefinition;
import org.apache.plc4x.plugins.codegenerator.types.enums.EnumValue;
import org.apache.plc4x.plugins.codegenerator.types.fields.ArrayField;
import org.apache.plc4x.plugins.codegenerator.types.fields.Field;
import org.apache.plc4x.plugins.codegenerator.types.fields.ManualArrayField;
import org.apache.plc4x.plugins.codegenerator.types.fields.SwitchField;
-import org.apache.plc4x.plugins.codegenerator.types.references.*;
+import
org.apache.plc4x.plugins.codegenerator.types.references.SimpleTypeReference;
+import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
import org.apache.plc4x.plugins.codegenerator.types.terms.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.*;
import java.util.concurrent.CompletableFuture;
@@ -52,43 +57,82 @@ import java.util.stream.Collectors;
public class MessageFormatListener extends MSpecBaseListener implements
LazyTypeDefinitionConsumer {
private static final Logger LOGGER =
LoggerFactory.getLogger(MessageFormatListener.class);
-
- private Deque<List<Field>> parserContexts;
-
- private Deque<List<EnumValue>> enumContexts;
-
protected final Map<String, TypeDefinition> types;
-
protected final Map<String, List<Consumer<TypeDefinition>>>
typeDefinitionConsumers;
-
+ private final CommonTokenStream tokenStream;
private final Stack<Map<String, Term>> batchSetAttributes = new Stack<>();
-
- public Deque<List<Field>> getParserContexts() {
- return parserContexts;
- }
-
- public Deque<List<EnumValue>> getEnumContexts() {
- return enumContexts;
- }
-
private final Stack<String> currentTypeName = new Stack<>();
+ // For storing comments for complex types between enter/exit
+ private final Map<MSpecParser.ComplexTypeContext, String>
complexTypeComments = new HashMap<>();
+ private Deque<List<Field>> parserContexts;
+ private Deque<List<EnumValue>> enumContexts;
- public MessageFormatListener() {
+ public MessageFormatListener(CommonTokenStream tokenStream) {
+ this.tokenStream = tokenStream;
types = new HashMap<>();
typeDefinitionConsumers = new HashMap<>();
}
- public MessageFormatListener(TypeContext exitingTypeContext) {
+ public MessageFormatListener(CommonTokenStream tokenStream, TypeContext
exitingTypeContext) {
+ this.tokenStream = tokenStream;
types = new HashMap<>(exitingTypeContext.getTypeDefinitions());
typeDefinitionConsumers = new
HashMap<>(exitingTypeContext.getUnresolvedTypeReferences());
}
+ public Deque<List<Field>> getParserContexts() {
+ return parserContexts;
+ }
+
+ public Deque<List<EnumValue>> getEnumContexts() {
+ return enumContexts;
+ }
+
@Override
public void enterFile(MSpecParser.FileContext ctx) {
parserContexts = new LinkedList<>();
enumContexts = new LinkedList<>();
}
+ // Helper: Attach comment if directly above or on the same line
+ private String consumePendingComment(ParserRuleContext ctx) {
+ ctx = ctx.getParent(); // TODO: this is because of the stupid bracket
which is considered a previous token... figure out a smart way
+ Token startToken = ctx.getStart();
+
+ List<Token> frontComments = new LinkedList<>();
+ int tokenIndex = startToken.getTokenIndex();
+ List<Token> hiddenToLeft =
tokenStream.getHiddenTokensToLeft(tokenIndex);
+ if (hiddenToLeft != null) {
+ hiddenToLeft.reversed().stream()
+ .takeWhile(token -> frontComments.isEmpty() ||
(token.getType() != MSpecLexer.WS))
+ .filter(token -> token.getType() == MSpecLexer.LINE_COMMENT ||
token.getType() == MSpecLexer.BLOCK_COMMENT)
+ .forEach(frontComments::add);
+ }
+ Token eolComment = null;
+ List<Token> hiddenToRight =
tokenStream.getHiddenTokensToRight(tokenIndex);
+ if (hiddenToRight != null) {
+ eolComment = hiddenToRight.stream()
+ .filter(token -> token.getType() == MSpecLexer.LINE_COMMENT ||
token.getType() == MSpecLexer.BLOCK_COMMENT)
+ .findFirst()
+ .orElse(null);
+ }
+
+ StringBuilder comment = new StringBuilder();
+
+ var defLine = startToken.getLine();
+ if (!frontComments.isEmpty() && frontComments.getFirst().getLine() ==
defLine - 1) {
+ frontComments.reversed().forEach(token ->
comment.append(token.getText()));
+ }
+
+ if (eolComment != null && eolComment.getLine() == defLine) {
+ comment.append(eolComment.getText());
+ }
+
+ if (comment.isEmpty()) {
+ return null;
+ }
+ return comment.toString();
+ }
+
@Override
public void enterContantsDefinition(MSpecParser.ContantsDefinitionContext
ctx) {
currentTypeName.push("Constants");
@@ -107,9 +151,8 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
String typeName = "Constants";
// If the type has subtypes, it's an abstract type.
- final List<Field> fields = parserContexts.pop();
- DefaultConstantsTypeDefinition type = new
DefaultConstantsTypeDefinition(
- typeName, Collections.emptyMap(), Collections.emptyList(), fields);
+ var fields = parserContexts.pop();
+ var type = new DefaultConstantsTypeDefinition(typeName, fields,
consumePendingComment(ctx));
// Link the fields and the complex types.
if (fields != null) {
fields.forEach(field -> ((DefaultField) field).setOwner(type));
@@ -145,65 +188,66 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
// 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);
+ for (var attributeContext : ctx.attributes.attribute()) {
+ var attributeExpression =
getExpressionTerm(attributeContext.value);
curBatchSetAttributes.put(attributeContext.name.getText(),
attributeExpression);
}
// Make the new Map the top of the stack.
batchSetAttributes.push(curBatchSetAttributes);
+ // Attach comment if present (store for use in exit)
+ var comment = consumePendingComment(ctx);
+ if (comment != null) {
+ complexTypeComments.put(ctx, comment);
+ }
+
if ("enum".equals(ctx.getChild(0).getText())) {
- List<EnumValue> enumContext = new LinkedList<>();
+ var enumContext = new LinkedList<EnumValue>();
enumContexts.push(enumContext);
} else {
- List<Field> parserContext = new LinkedList<>();
+ var parserContext = new LinkedList<Field>();
parserContexts.push(parserContext);
}
}
@Override
public void exitComplexType(MSpecParser.ComplexTypeContext ctx) {
- String typeName = getIdString(ctx.name);
- List<Argument> parserArguments = null;
- if (ctx.params != null) {
- parserArguments = getParserArguments(ctx.params.argument());
- }
+ var typeName = getIdString(ctx.name);
+ var parserArguments = ctx.params != null ?
getParserArguments(ctx.params.argument()) : null;
- final Map<String, Term> attributes = batchSetAttributes.peek();
+ var attributes = batchSetAttributes.peek();
// Handle enum types.
if ("enum".equals(ctx.getChild(0).getText())) {
- SimpleTypeReference type = (ctx.type != null) ?
getSimpleTypeReference(ctx.type) : null;
- List<EnumValue> enumValues = getEnumValues();
+ var type = ctx.type != null ? getSimpleTypeReference(ctx.type) :
null;
+ var enumValues = getEnumValues();
if (type == null) {
// in case there is no type we default to uint32
type = new
DefaultIntegerTypeReference(SimpleTypeReference.SimpleBaseType.UINT, 32);
}
- DefaultEnumTypeDefinition enumType = new
DefaultEnumTypeDefinition(typeName, type, attributes, enumValues,
- parserArguments);
+ var enumType = new DefaultEnumTypeDefinition(typeName, type,
attributes, enumValues, parserArguments, consumePendingComment(ctx));
dispatchType(typeName, enumType);
enumContexts.pop();
- } else if (ctx.dataIoTypeSwitch != null) { // Handle data-io types.
- SwitchField switchField = getSwitchField();
- DefaultDataIoTypeDefinition type = new
DefaultDataIoTypeDefinition(typeName, attributes, parserArguments, switchField);
+ } else if (ctx.dataIoTypeSwitch != null) { // Handle data-io types.
+ var switchField = getSwitchField();
+ var type = new DefaultDataIoTypeDefinition(typeName, attributes,
parserArguments, switchField, consumePendingComment(ctx));
dispatchType(typeName, type);
// Set the parent type for all sub-types.
if (switchField != null) {
for (DiscriminatedComplexTypeDefinition subtype :
switchField.getCases()) {
- if (subtype instanceof
DefaultDiscriminatedComplexTypeDefinition) {
- LOGGER.debug("Setting parent {} for {}", type,
subtype);
- ((DefaultDiscriminatedComplexTypeDefinition)
subtype).setParentType(type);
+ if (subtype instanceof
DefaultDiscriminatedComplexTypeDefinition ddctd) {
+ LOGGER.debug("Setting parent {} for {}", type, ddctd);
+ ddctd.setParentType(type);
}
}
}
parserContexts.pop();
} else { // Handle all other types.
// If the type has sub-types it's an abstract type.
- SwitchField switchField = getSwitchField();
- boolean abstractType = switchField != null;
- final List<Field> fields = parserContexts.pop();
- DefaultComplexTypeDefinition type = new
DefaultComplexTypeDefinition(
- typeName, attributes, parserArguments, abstractType, fields);
+ var switchField = getSwitchField();
+ var abstractType = switchField != null;
+ var fields = parserContexts.pop();
+ var type = new DefaultComplexTypeDefinition(typeName, attributes,
parserArguments, abstractType, fields, complexTypeComments.remove(ctx));
// Link the fields and the complex types.
if (fields != null) {
fields.forEach(field -> ((DefaultField) field).setOwner(type));
@@ -220,10 +264,10 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
Optional<SwitchField> switchField = type.getSwitchField();
if (switchField.isPresent()) {
for (DiscriminatedComplexTypeDefinition subtype :
switchField.get().getCases()) {
- if (subtype instanceof
DefaultDiscriminatedComplexTypeDefinition) {
- LOGGER.debug("Setting parent {} for {}", type, subtype);
- ((DefaultDiscriminatedComplexTypeDefinition)
subtype).setParentType(type);
-
setParentRelationship((DefaultDiscriminatedComplexTypeDefinition) subtype);
+ if (subtype instanceof
DefaultDiscriminatedComplexTypeDefinition ddct) {
+ LOGGER.debug("Setting parent {} for {}", type, ddct);
+ ddct.setParentType(type);
+ setParentRelationship(ddct);
}
}
}
@@ -232,7 +276,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@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<>();
+ var curBatchSetAttributes = new HashMap<String, Term>();
// Add all attributes of the lower layers and initialize the new map
with it.
if (!batchSetAttributes.empty()) {
curBatchSetAttributes.putAll(batchSetAttributes.peek());
@@ -254,8 +298,8 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterAbstractField(MSpecParser.AbstractFieldContext ctx) {
- String name = getIdString(ctx.name);
- DefaultAbstractField field = new
DefaultAbstractField(getAttributes(ctx), name);
+ var name = getIdString(ctx.name);
+ var field = new DefaultAbstractField(getAttributes(ctx), name,
consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -271,10 +315,10 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterArrayField(MSpecParser.ArrayFieldContext ctx) {
- String name = getIdString(ctx.name);
- ArrayField.LoopType loopType =
ArrayField.LoopType.valueOf(ctx.loopType.getText().toUpperCase());
- Term loopExpression = getExpressionTerm(ctx.loopExpression);
- DefaultArrayField field = new DefaultArrayField(getAttributes(ctx),
name, loopType, loopExpression);
+ var name = getIdString(ctx.name);
+ var loopType =
ArrayField.LoopType.valueOf(ctx.loopType.getText().toUpperCase());
+ var loopExpression = getExpressionTerm(ctx.loopExpression);
+ var field = new DefaultArrayField(getAttributes(ctx), name, loopType,
loopExpression, consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -290,9 +334,9 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterAssertField(MSpecParser.AssertFieldContext ctx) {
- String name = getIdString(ctx.name);
- Term conditionExpression = getExpressionTerm(ctx.condition);
- DefaultAssertField field = new DefaultAssertField(getAttributes(ctx),
name, conditionExpression);
+ var name = getIdString(ctx.name);
+ var conditionExpression = getExpressionTerm(ctx.condition);
+ var field = new DefaultAssertField(getAttributes(ctx), name,
conditionExpression, consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -308,10 +352,10 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterChecksumField(MSpecParser.ChecksumFieldContext ctx) {
- SimpleTypeReference type = getSimpleTypeReference(ctx.type);
- String name = getIdString(ctx.name);
- Term checksumExpression = getExpressionTerm(ctx.checksumExpression);
- Field field = new DefaultChecksumField(getAttributes(ctx), type, name,
checksumExpression);
+ var type = getSimpleTypeReference(ctx.type);
+ var name = getIdString(ctx.name);
+ var checksumExpression = getExpressionTerm(ctx.checksumExpression);
+ var field = new DefaultChecksumField(getAttributes(ctx), type, name,
checksumExpression, consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -319,8 +363,8 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterConstField(MSpecParser.ConstFieldContext ctx) {
- String name = getIdString(ctx.name);
- DefaultConstField field = new DefaultConstField(getAttributes(ctx),
name, getValueLiteral(ctx.expected));
+ var name = getIdString(ctx.name);
+ var field = new DefaultConstField(getAttributes(ctx), name,
getValueLiteral(ctx.expected), consumePendingComment(ctx));
if (ctx.type.dataType() != null) {
field.setType(getSimpleTypeReference(ctx.type.dataType()));
} else {
@@ -340,8 +384,8 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterDiscriminatorField(MSpecParser.DiscriminatorFieldContext
ctx) {
- String name = getIdString(ctx.name);
- DefaultDiscriminatorField field = new
DefaultDiscriminatorField(getAttributes(ctx), name);
+ var name = getIdString(ctx.name);
+ var field = new DefaultDiscriminatorField(getAttributes(ctx), name,
consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -357,15 +401,15 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterEnumField(MSpecParser.EnumFieldContext ctx) {
- String typeRefName = ctx.type.complexTypeReference.getText();
- DefaultEnumTypeReference type = new
DefaultEnumTypeReference(typeRefName, null);
+ var typeRefName = ctx.type.complexTypeReference.getText();
+ var type = new DefaultEnumTypeReference(typeRefName, null);
setOrScheduleTypeDefinitionConsumer(typeRefName,
type::setTypeDefinition);
- String name = getIdString(ctx.name);
+ var name = getIdString(ctx.name);
String fieldName = null;
if (ctx.fieldName != null) {
fieldName = getIdString(ctx.fieldName);
}
- Field field = new DefaultEnumField(getAttributes(ctx), type, name,
fieldName);
+ var field = new DefaultEnumField(getAttributes(ctx), type, name,
fieldName, consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -373,10 +417,10 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterImplicitField(MSpecParser.ImplicitFieldContext ctx) {
- SimpleTypeReference type = getSimpleTypeReference(ctx.type);
- String name = getIdString(ctx.name);
- Term serializeExpression = getExpressionTerm(ctx.serializeExpression);
- Field field = new DefaultImplicitField(getAttributes(ctx), type, name,
serializeExpression);
+ var type = getSimpleTypeReference(ctx.type);
+ var name = getIdString(ctx.name);
+ var serializeExpression = getExpressionTerm(ctx.serializeExpression);
+ var field = new DefaultImplicitField(getAttributes(ctx), type, name,
serializeExpression, consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -392,7 +436,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
Term serializeExpression = getExpressionTerm(ctx.serializeExpression);
Term lengthExpression = getExpressionTerm(ctx.lengthExpression);
DefaultManualArrayField field = new
DefaultManualArrayField(getAttributes(ctx), name, loopType, loopExpression,
- parseExpression, serializeExpression, lengthExpression);
+ parseExpression, serializeExpression, lengthExpression,
consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -412,8 +456,9 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
Term parseExpression = getExpressionTerm(ctx.parseExpression);
Term serializeExpression = getExpressionTerm(ctx.serializeExpression);
Term lengthExpression = getExpressionTerm(ctx.lengthExpression);
- DefaultManualField field = new DefaultManualField(getAttributes(ctx),
name, parseExpression, serializeExpression,
- lengthExpression);
+ DefaultManualField field = new DefaultManualField(getAttributes(ctx),
name, parseExpression,
+ serializeExpression,
+ lengthExpression, consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -434,7 +479,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
if (ctx.condition != null) {
conditionExpression = getExpressionTerm(ctx.condition);
}
- DefaultOptionalField field = new
DefaultOptionalField(getAttributes(ctx), name, conditionExpression);
+ var field = new DefaultOptionalField(getAttributes(ctx), name,
conditionExpression, consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -450,11 +495,11 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterPaddingField(MSpecParser.PaddingFieldContext ctx) {
- SimpleTypeReference type = getSimpleTypeReference(ctx.type);
- String name = getIdString(ctx.name);
- Term paddingValue = getExpressionTerm(ctx.paddingValue);
- Term timesPadding = getExpressionTerm(ctx.timesPadding);
- Field field = new DefaultPaddingField(getAttributes(ctx), type, name,
paddingValue, timesPadding);
+ var type = getSimpleTypeReference(ctx.type);
+ var name = getIdString(ctx.name);
+ var paddingValue = getExpressionTerm(ctx.paddingValue);
+ var timesPadding = getExpressionTerm(ctx.timesPadding);
+ var field = new DefaultPaddingField(getAttributes(ctx), type, name,
paddingValue, timesPadding, consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -462,12 +507,12 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterPeekField(MSpecParser.PeekFieldContext ctx) {
- String name = getIdString(ctx.name);
+ var name = getIdString(ctx.name);
Term offsetExpression = null;
if (ctx.offset != null) {
offsetExpression = getExpressionTerm(ctx.offset);
}
- DefaultPeekField field = new DefaultPeekField(getAttributes(ctx),
name, offsetExpression);
+ var field = new DefaultPeekField(getAttributes(ctx), name,
offsetExpression, consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -483,9 +528,9 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterReservedField(MSpecParser.ReservedFieldContext ctx) {
- SimpleTypeReference type = getSimpleTypeReference(ctx.type);
- String expected = getExprString(ctx.expected);
- Field field = new DefaultReservedField(getAttributes(ctx), type,
expected);
+ var type = getSimpleTypeReference(ctx.type);
+ var expected = getExprString(ctx.expected);
+ var field = new DefaultReservedField(getAttributes(ctx), type,
expected, consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -493,8 +538,8 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterSimpleField(MSpecParser.SimpleFieldContext ctx) {
- String name = getIdString(ctx.name);
- DefaultSimpleField field = new DefaultSimpleField(getAttributes(ctx),
name);
+ var name = getIdString(ctx.name);
+ var field = new DefaultSimpleField(getAttributes(ctx), name,
consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -510,31 +555,35 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterStateField(MSpecParser.StateFieldContext ctx) {
- String name = getIdString(ctx.name);
+ var name = getIdString(ctx.name);
// Get the type information from the parents arguments.
- ParserRuleContext parent = ctx.getParent().getParent().getParent();
- if (!(parent instanceof MSpecParser.ComplexTypeContext) && !(parent
instanceof MSpecParser.CaseStatementContext)) {
+ var parent = ctx.getParent().getParent().getParent();
+ if (!(parent instanceof MSpecParser.ComplexTypeContext)
+ && !(parent instanceof MSpecParser.CaseStatementContext)) {
throw new RuntimeException("state fields must only be defined in
complex types");
}
Optional<MSpecParser.ArgumentContext> argumentContext;
- if (parent instanceof MSpecParser.ComplexTypeContext) {
- MSpecParser.ComplexTypeContext complexTypeContext =
(MSpecParser.ComplexTypeContext) parent;
- argumentContext =
complexTypeContext.params.argument().stream().filter(argContext ->
argContext.name.getText().equalsIgnoreCase(name)).findFirst();
+ if (parent instanceof MSpecParser.ComplexTypeContext
complexTypeContext) {
+ argumentContext = complexTypeContext.params.argument().stream()
+ .filter(argContext ->
argContext.name.getText().equalsIgnoreCase(name)).findFirst();
} else {
RuleContext curContext = parent;
- while((curContext.parent != null) && !(curContext.parent
instanceof MSpecParser.ComplexTypeContext)) {
+ while ((curContext.parent != null) && !(curContext.parent
instanceof MSpecParser.ComplexTypeContext)) {
curContext = curContext.parent;
}
if (curContext.parent == null) {
- throw new RuntimeException("state fields must refer to
arguments by using the same name. Parent context is null.");
+ throw new RuntimeException(
+ "state fields must refer to arguments by using the same
name. Parent context is null.");
}
- MSpecParser.ComplexTypeContext complexTypeContext =
(MSpecParser.ComplexTypeContext) curContext.parent;
- argumentContext =
complexTypeContext.params.argument().stream().filter(argContext ->
argContext.name.getText().equalsIgnoreCase(name)).findFirst();
+ var complexTypeContext = (MSpecParser.ComplexTypeContext)
curContext.parent;
+ argumentContext = complexTypeContext.params.argument().stream()
+ .filter(argContext ->
argContext.name.getText().equalsIgnoreCase(name)).findFirst();
}
- MSpecParser.TypeReferenceContext type = argumentContext.orElseThrow(()
-> new RuntimeException("state fields must refer to arguments by using the same
name.")).type;
+ var type = argumentContext.orElseThrow(
+ () -> new RuntimeException("state fields must refer to arguments
by using the same name.")).type;
// The variable term is always just a direct reference to the parser
argument.
- Term valueExpression = new DefaultVariableLiteral(name, null, null,
null);
- DefaultStateField field = new DefaultStateField(getAttributes(ctx),
name, valueExpression);
+ var valueExpression = new DefaultVariableLiteral(name, null, null,
null);
+ var field = new DefaultStateField(getAttributes(ctx), name,
valueExpression, consumePendingComment(ctx));
getTypeReference(type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -550,10 +599,10 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterTypeSwitchField(MSpecParser.TypeSwitchFieldContext ctx) {
- List<VariableLiteral> variableLiterals =
ctx.discriminators.variableLiteral().stream()
+ var variableLiterals = ctx.discriminators.variableLiteral().stream()
.map(this::getVariableLiteral)
.collect(Collectors.toList());
- DefaultSwitchField field = new DefaultSwitchField(getAttributes(ctx),
variableLiterals);
+ var field = new DefaultSwitchField(getAttributes(ctx),
variableLiterals, consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -561,8 +610,8 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterUnknownField(MSpecParser.UnknownFieldContext ctx) {
- SimpleTypeReference type = getSimpleTypeReference(ctx.type);
- Field field = new DefaultUnknownField(getAttributes(ctx), type);
+ var type = getSimpleTypeReference(ctx.type);
+ var field = new DefaultUnknownField(getAttributes(ctx), type,
consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -570,8 +619,8 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterValidationField(MSpecParser.ValidationFieldContext ctx) {
- Term validationExpression =
getExpressionTerm(ctx.validationExpression);
- boolean shouldFail = true;
+ var validationExpression = getExpressionTerm(ctx.validationExpression);
+ var shouldFail = true;
if (ctx.shouldFail != null) {
shouldFail = "true".equalsIgnoreCase(ctx.shouldFail.getText());
}
@@ -579,7 +628,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
if (ctx.description != null) {
description = ctx.description.getText();
}
- Field field = new DefaultValidationField(getAttributes(ctx),
validationExpression, description, shouldFail);
+ var field = new DefaultValidationField(getAttributes(ctx),
validationExpression, description, shouldFail, consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -587,9 +636,9 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterVirtualField(MSpecParser.VirtualFieldContext ctx) {
- String name = getIdString(ctx.name);
- Term valueExpression = getExpressionTerm(ctx.valueExpression);
- DefaultVirtualField field = new
DefaultVirtualField(getAttributes(ctx), name, valueExpression);
+ var name = getIdString(ctx.name);
+ var valueExpression = getExpressionTerm(ctx.valueExpression);
+ var field = new DefaultVirtualField(getAttributes(ctx), name,
valueExpression, consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -608,11 +657,11 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
List<Field> parserContext = new LinkedList<>();
// Calculate the name of the current type
- String namePrefix = "";
- if(ctx.nameWildcard != null) {
+ var namePrefix = "";
+ if (ctx.nameWildcard != null) {
namePrefix = getCurrentTypeName();
}
- String typeName = namePrefix + ctx.name.getText();
+ var typeName = namePrefix + ctx.name.getText();
currentTypeName.push(typeName);
// For DataIo we don't generate types.
@@ -625,24 +674,29 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void exitCaseStatement(MSpecParser.CaseStatementContext ctx) {
- String typeName = currentTypeName.pop();
+ var typeName = currentTypeName.pop();
// For DataIo we don't generate types.
if (ctx.parent.parent instanceof MSpecParser.DataIoDefinitionContext) {
currentTypeName.push(typeName);
typeName = ctx.name.getText();
}
- boolean abstractType = getSwitchField() != null;
+ var abstractType = getSwitchField() != null;
- final Map<String, Term> attributes = batchSetAttributes.peek();
+ var attributes = batchSetAttributes.peek();
- List<Argument> parserArguments = new LinkedList<>();
+ var parserArguments = new LinkedList<Argument>();
// For DataIO types, add all the arguments from the parent type.
-/* if (!(ctx.parent.parent.parent.parent instanceof
MSpecParser.ComplexTypeContext)
- && ((MSpecParser.ComplexTypeContext)
ctx.parent.parent.parent).params != null) {
- parserArguments.addAll(getParserArguments(
- ((MSpecParser.ComplexTypeContext)
ctx.parent.parent.parent).params.argument()));
- }*/
+ /*
+ * if (!(ctx.parent.parent.parent.parent instanceof
+ * MSpecParser.ComplexTypeContext)
+ * && ((MSpecParser.ComplexTypeContext)
ctx.parent.parent.parent).params !=
+ * null) {
+ * parserArguments.addAll(getParserArguments(
+ * ((MSpecParser.ComplexTypeContext)
+ * ctx.parent.parent.parent).params.argument()));
+ * }
+ */
// Add all eventually existing local arguments.
if (ctx.argumentList() != null) {
parserArguments.addAll(getParserArguments(ctx.argumentList().argument()));
@@ -656,22 +710,21 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
} else {
discriminatorValues = Collections.emptyList();
}
- final List<Field> fields = parserContexts.pop();
- DefaultDiscriminatedComplexTypeDefinition type =
- new DefaultDiscriminatedComplexTypeDefinition(typeName,
attributes, parserArguments, abstractType,
- fields, discriminatorValues);
+ var fields = parserContexts.pop();
+ var type = new DefaultDiscriminatedComplexTypeDefinition(typeName,
attributes, parserArguments, abstractType, fields, discriminatorValues,
consumePendingComment(ctx));
// Link the fields and the complex types.
if (fields != null) {
fields.forEach(field -> ((DefaultField) field).setOwner(type));
}
- // For DataIO we don't need to generate the sub-types as these will be
PlcValues.
+ // For DataIO we don't need to generate the sub-types as these will be
+ // PlcValues.
if (!(ctx.parent.parent instanceof
MSpecParser.DataIoDefinitionContext)) {
dispatchType(typeName, type);
}
// Add the type to the switch field definition.
- DefaultSwitchField switchField = getSwitchField();
+ var switchField = getSwitchField();
if (switchField == null) {
throw new RuntimeException("This shouldn't have happened");
}
@@ -680,14 +733,15 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void
enterEnumValueDefinition(MSpecParser.EnumValueDefinitionContext ctx) {
- String value = (ctx.valueExpression != null) ?
unquoteString(ctx.valueExpression.getText()) : null;
- String name = ctx.name.getText();
+ var value = (ctx.valueExpression != null) ?
unquoteString(ctx.valueExpression.getText()) : null;
+ var name = ctx.name.getText();
Map<String, String> constants = 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
+ var parentCtx = (MSpecParser.ComplexTypeContext) ctx.parent;
+ var numConstantValues = parentCtx.params.argument().size();
+ var numExpressionValues =
ctx.constantValueExpressions.expression().size();
+ // This only works if we provide exactly the same number of
expressions as we
+ // defined constants
if (numConstantValues != numExpressionValues) {
throw new RuntimeException("Number of constant value
expressions doesn't match the number of " +
"defined constants. Expecting " + numConstantValues + "
but got " + numExpressionValues);
@@ -696,10 +750,10 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
// Build a map of the constant expressions (With the constant name
as key)
constants = new HashMap<>();
for (int i = 0; i < numConstantValues; i++) {
- MSpecParser.ArgumentContext argumentContext =
parentCtx.params.argument(i);
- String constantName = argumentContext.name.getText();
- MSpecParser.ExpressionContext expression =
ctx.constantValueExpressions.expression(i);
- String constant = unquoteString(expression.getText());
+ var argumentContext = parentCtx.params.argument(i);
+ var constantName = argumentContext.name.getText();
+ var expression = ctx.constantValueExpressions.expression(i);
+ var constant = unquoteString(expression.getText());
// String expressions are double escaped
if (constant != null && constant.startsWith("\"")) {
constant = unquoteString(constant);
@@ -707,18 +761,18 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
constants.put(constantName, constant);
}
}
- List<EnumValue> enumValues =
Objects.requireNonNull(this.enumContexts.peek());
+ var enumValues = Objects.requireNonNull(this.enumContexts.peek());
if (value == null) {
// If no values are specified we count
- String counted = "0";
- if (enumValues.size() > 0) {
- String previousValue = enumValues.get(enumValues.size() -
1).getValue();
- int parsedPreviousValue = Integer.parseInt(previousValue);
+ var counted = "0";
+ if (!enumValues.isEmpty()) {
+ var previousValue = enumValues.getLast().getValue();
+ var parsedPreviousValue = Integer.parseInt(previousValue);
counted = "" + (parsedPreviousValue + 1);
}
value = counted;
}
- final DefaultEnumValue enumValue = new DefaultEnumValue(value, name,
constants);
+ var enumValue = new DefaultEnumValue(value, name, constants,
consumePendingComment(ctx));
enumValues.add(enumValue);
}
@@ -726,12 +780,12 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
if (expressionContext.ASTERISK() != null) {
return WildcardTerm.INSTANCE;
}
- String expressionString = getExprString(expressionContext);
+ var expressionString = getExprString(expressionContext);
Objects.requireNonNull(expressionString, "Expression string should not
be null");
- InputStream inputStream = IOUtils.toInputStream(expressionString,
Charset.defaultCharset());
+ var inputStream = IOUtils.toInputStream(expressionString,
Charset.defaultCharset());
Objects.requireNonNull(getCurrentTypeName(), "expression term can only
occur within a type");
- ExpressionStringParser parser = new ExpressionStringParser(this,
getCurrentTypeName());
+ var parser = new ExpressionStringParser(this, getCurrentTypeName());
try {
return parser.parse(inputStream);
} catch (Exception e) {
@@ -742,29 +796,32 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
private VariableLiteral
getVariableLiteral(MSpecParser.VariableLiteralContext variableLiteralContext) {
// TODO: make nullsafe
- final String variableLiteral = variableLiteralContext.getText();
- InputStream inputStream = IOUtils.toInputStream(variableLiteral,
Charset.defaultCharset());
- ExpressionStringParser parser = new ExpressionStringParser(this,
getCurrentTypeName());
+ var variableLiteral = variableLiteralContext.getText();
+ var inputStream = IOUtils.toInputStream(variableLiteral,
Charset.defaultCharset());
+ var parser = new ExpressionStringParser(this, getCurrentTypeName());
try {
- // As this come from a VariableLiteralContext we know that it is a
VariableLiteral
+ // As this come from a VariableLiteralContext we know that it is a
+ // VariableLiteral
return (VariableLiteral) parser.parse(inputStream);
} catch (Exception e) {
throw new RuntimeException(String.format("Error parsing variable
literal: '%s' at line %d column %d",
- variableLiteral, variableLiteralContext.start.getLine(),
variableLiteralContext.start.getStartIndex()), e);
+ variableLiteral, variableLiteralContext.start.getLine(),
+ variableLiteralContext.start.getStartIndex()), e);
}
}
private Literal getValueLiteral(MSpecParser.ValueLiteralContext
valueLiteralContext) {
// TODO: make nullsafe
- final String valueLiteralContextText = valueLiteralContext.getText();
- InputStream inputStream =
IOUtils.toInputStream(valueLiteralContextText, Charset.defaultCharset());
- ExpressionStringParser parser = new ExpressionStringParser(this,
getCurrentTypeName());
+ var valueLiteralContextText = valueLiteralContext.getText();
+ var inputStream = IOUtils.toInputStream(valueLiteralContextText,
Charset.defaultCharset());
+ var parser = new ExpressionStringParser(this, getCurrentTypeName());
try {
// As this come from a ValueLiteralContext we know that it is a
Literal
return (Literal) parser.parse(inputStream);
} catch (Exception e) {
throw new RuntimeException(String.format("Error parsing variable
literal: '%s' at line %d column %d",
- valueLiteralContextText, valueLiteralContext.start.getLine(),
valueLiteralContext.start.getStartIndex()), e);
+ valueLiteralContextText, valueLiteralContext.start.getLine(),
+ valueLiteralContext.start.getStartIndex()), e);
}
}
@@ -773,18 +830,20 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
return
CompletableFuture.completedFuture(getSimpleTypeReference(ctx.simpleTypeReference));
} else {
CompletableFuture<TypeReference> typeReferenceCompletableFuture =
new CompletableFuture<>();
- String typeRefName = ctx.complexTypeReference.getText();
+ var typeRefName = ctx.complexTypeReference.getText();
setOrScheduleTypeDefinitionConsumer(typeRefName, typeDefinition ->
{
if (typeDefinition.isDataIoTypeDefinition()) {
- DefaultDataIoTypeReference value = new
DefaultDataIoTypeReference(typeRefName, getParams(ctx.params));
+ var value = new DefaultDataIoTypeReference(typeRefName,
+ getParams(ctx.params));
value.setTypeDefinition(typeDefinition);
typeReferenceCompletableFuture.complete(value);
} else if (typeDefinition.isComplexTypeDefinition()) {
- DefaultComplexTypeReference value = new
DefaultComplexTypeReference(typeRefName, getParams(ctx.params));
+ var value = new DefaultComplexTypeReference(typeRefName,
+ getParams(ctx.params));
value.setTypeDefinition(typeDefinition);
typeReferenceCompletableFuture.complete(value);
} else if (typeDefinition.isEnumTypeDefinition()) {
- DefaultEnumTypeReference value = new
DefaultEnumTypeReference(typeRefName, getParams(ctx.params));
+ var value = new DefaultEnumTypeReference(typeRefName,
getParams(ctx.params));
value.setTypeDefinition(typeDefinition);
typeReferenceCompletableFuture.complete(value);
} else {
@@ -796,12 +855,12 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
}
private SimpleTypeReference
getSimpleTypeReference(MSpecParser.DataTypeContext ctx) {
- SimpleTypeReference.SimpleBaseType simpleBaseType =
-
SimpleTypeReference.SimpleBaseType.valueOf(ctx.base.getText().toUpperCase());
+ var simpleBaseType = SimpleTypeReference.SimpleBaseType
+ .valueOf(ctx.base.getText().toUpperCase());
// String types need an additional length expression.
if (simpleBaseType == SimpleTypeReference.SimpleBaseType.VSTRING) {
if (ctx.length != null) {
- Term lengthExpression = getExpressionTerm(ctx.length);
+ var lengthExpression = getExpressionTerm(ctx.length);
return new DefaultVstringTypeReference(simpleBaseType,
lengthExpression);
} else {
return new DefaultVstringTypeReference(simpleBaseType, null);
@@ -810,21 +869,22 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
switch (simpleBaseType) {
case INT:
case UINT:
- int integerSize = Integer.parseInt(ctx.size.getText());
+ var integerSize = Integer.parseInt(ctx.size.getText());
return new DefaultIntegerTypeReference(simpleBaseType,
integerSize);
case VINT: {
- final Map<String, Term> attributes =
getAttributes(ctx.parent.parent);
+ var attributes = getAttributes(ctx.parent.parent);
SimpleTypeReference propertyType;
- int propertySizeInBits = 32;
+ var propertySizeInBits = 32;
if (attributes.containsKey("propertySizeInBits")) {
- final Term propertySizeInBitsTerm =
attributes.get("propertySizeInBits");
- if (!(propertySizeInBitsTerm instanceof NumericLiteral)) {
- throw new RuntimeException("'propertySizeInBits'
attribute is required to be a numeric literal");
+ var propertySizeInBitsTerm =
attributes.get("propertySizeInBits");
+ if (!(propertySizeInBitsTerm instanceof NumericLiteral
propertySizeInBitsLiteral)) {
+ throw new RuntimeException(
+ "'propertySizeInBits' attribute is required to be
a numeric literal");
}
- NumericLiteral propertySizeInBitsLiteral =
(NumericLiteral) propertySizeInBitsTerm;
propertySizeInBits =
propertySizeInBitsLiteral.getNumber().intValue();
}
- propertyType = new
DefaultIntegerTypeReference(SimpleTypeReference.SimpleBaseType.INT,
propertySizeInBits);
+ propertyType = new
DefaultIntegerTypeReference(SimpleTypeReference.SimpleBaseType.INT,
+ propertySizeInBits);
return new DefaultVintegerTypeReference(simpleBaseType,
propertyType);
}
case VUINT: {
@@ -833,13 +893,14 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
int propertySizeInBits = 32;
if (attributes.containsKey("propertySizeInBits")) {
final Term propertySizeInBitsTerm =
attributes.get("propertySizeInBits");
- if (!(propertySizeInBitsTerm instanceof NumericLiteral)) {
- throw new RuntimeException("'propertySizeInBits'
attribute is required to be a numeric literal");
+ if (!(propertySizeInBitsTerm instanceof NumericLiteral
propertySizeInBitsLiteral)) {
+ throw new RuntimeException(
+ "'propertySizeInBits' attribute is required to be
a numeric literal");
}
- NumericLiteral propertySizeInBitsLiteral =
(NumericLiteral) propertySizeInBitsTerm;
propertySizeInBits =
propertySizeInBitsLiteral.getNumber().intValue();
}
- propertyType = new
DefaultIntegerTypeReference(SimpleTypeReference.SimpleBaseType.UINT,
propertySizeInBits);
+ propertyType = new
DefaultIntegerTypeReference(SimpleTypeReference.SimpleBaseType.UINT,
+ propertySizeInBits);
return new DefaultVintegerTypeReference(simpleBaseType,
propertyType);
}
case FLOAT:
@@ -863,7 +924,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
}
private DefaultSwitchField getSwitchField() {
- for (Field field : Objects.requireNonNull(parserContexts.peek())) {
+ for (var field : Objects.requireNonNull(parserContexts.peek())) {
if (field instanceof DefaultSwitchField) {
return (DefaultSwitchField) field;
}
@@ -903,8 +964,8 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
}
private Term parseExpression(String expressionString) {
- InputStream inputStream = IOUtils.toInputStream(expressionString,
Charset.defaultCharset());
- ExpressionStringParser parser = new ExpressionStringParser(this,
getCurrentTypeName());
+ var inputStream = IOUtils.toInputStream(expressionString,
Charset.defaultCharset());
+ var parser = new ExpressionStringParser(this, getCurrentTypeName());
try {
return parser.parse(inputStream);
} catch (Exception e) {
@@ -913,7 +974,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
}
private String getCurrentTypeName() {
- if(currentTypeName.isEmpty()) {
+ if (currentTypeName.isEmpty()) {
return null;
}
return currentTypeName.peek();
@@ -926,8 +987,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
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;
+ if (ctx.parent.parent instanceof MSpecParser.FieldDefinitionContext
fieldDefinitionContext) {
for (MSpecParser.AttributeContext attributeContext :
fieldDefinitionContext.attributes.attribute()) {
Term attributeExpression =
getExpressionTerm(attributeContext.value);
attributes.put(attributeContext.name.getText(),
attributeExpression);
@@ -962,12 +1022,13 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
if (types.containsKey(typeName)) {
LOGGER.warn("{} being overridden", typeName);
- // TODO: we need to implement replace logic... means we need to
replace all old references with the new one in that case otherwise we just get
an exception
+ // TODO: we need to implement replace logic... means we need to
replace all old
+ // references with the new one in that case otherwise we just get
an exception
}
types.put(typeName, type);
- while (typeDefinitionConsumers.getOrDefault(typeName, new
LinkedList<>()).size() != 0) {
+ while (!typeDefinitionConsumers.getOrDefault(typeName, new
LinkedList<>()).isEmpty()) {
consumerDispatchType(typeName, type);
}
@@ -976,11 +1037,11 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
}
private void consumerDispatchType(String typeName, TypeDefinition type) {
- List<Consumer<TypeDefinition>> waitingConsumers =
typeDefinitionConsumers.getOrDefault(typeName, new LinkedList<>());
+ var waitingConsumers = typeDefinitionConsumers.getOrDefault(typeName,
new LinkedList<>());
LOGGER.debug("{} waiting for {}", waitingConsumers.size(), typeName);
- Iterator<Consumer<TypeDefinition>> consumerIterator =
waitingConsumers.iterator();
- List<Consumer<TypeDefinition>> removedItems = new ArrayList<>();
+ var consumerIterator = waitingConsumers.iterator();
+ var removedItems = new ArrayList<Consumer<TypeDefinition>>();
while (consumerIterator.hasNext()) {
Consumer<TypeDefinition> setter = consumerIterator.next();
@@ -999,14 +1060,15 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
public void setOrScheduleTypeDefinitionConsumer(String typeRefName,
Consumer<TypeDefinition> setTypeDefinition) {
LOGGER.debug("set or schedule {}", typeRefName);
- TypeDefinition typeDefinition = types.get(typeRefName);
+ var typeDefinition = types.get(typeRefName);
if (typeDefinition != null) {
LOGGER.debug("{} present so setting for {}", typeRefName,
setTypeDefinition);
setTypeDefinition.accept(typeDefinition);
} else {
// put up order
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("{} already waiting for {}",
typeDefinitionConsumers.getOrDefault(typeRefName, new LinkedList<>()).size(),
typeRefName);
+ LOGGER.debug("{} already waiting for {}",
+ typeDefinitionConsumers.getOrDefault(typeRefName, new
LinkedList<>()).size(), typeRefName);
}
typeDefinitionConsumers.putIfAbsent(typeRefName, new
LinkedList<>());
typeDefinitionConsumers.get(typeRefName).add(setTypeDefinition);
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java
index 53cacc19a2..62e6274f19 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java
@@ -51,9 +51,12 @@ public class MessageFormatParser {
} catch (IOException e) {
throw new RuntimeException(e);
}
+
+ var tokenStream = new CommonTokenStream(lexer);
+
MessageFormatListener listener;
if (existingTypeContext == null) {
- listener = new MessageFormatListener();
+ listener = new MessageFormatListener(tokenStream);
} else {
if (LOGGER.isDebugEnabled()) {
Map<String, TypeDefinition> exitingTypeDefinitions =
existingTypeContext.getTypeDefinitions();
@@ -66,10 +69,13 @@ public class MessageFormatParser {
}
}
- listener = new MessageFormatListener(existingTypeContext);
+ listener = new MessageFormatListener(tokenStream,
existingTypeContext);
}
- new ParseTreeWalker().walk(listener, new MSpecParser(new
CommonTokenStream(lexer)).file());
+ var parser = new MSpecParser(tokenStream);
+
+ ParseTreeWalker parseTreeWalker = new ParseTreeWalker();
+ parseTreeWalker.walk(listener, parser.file());
LOGGER.info("Checking for open consumers");
listener.typeDefinitionConsumers.forEach((key, value) ->
LOGGER.warn("{} has {} open consumers", key, value.size()));
return new ValidatableTypeContext() {
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/protocol/ValidatableTypeContext.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/protocol/ValidatableTypeContext.java
index 7e55072933..e23448fd45 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/protocol/ValidatableTypeContext.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/protocol/ValidatableTypeContext.java
@@ -30,7 +30,7 @@ public interface ValidatableTypeContext extends TypeContext {
*/
default void validate() throws GenerationException {
// TODO: check that we have at least of parsed type
- if (getUnresolvedTypeReferences().size() > 0) {
+ if (!getUnresolvedTypeReferences().isEmpty()) {
throw new GenerationException("Unresolved types left: " +
getUnresolvedTypeReferences());
}
}