This is an automated email from the ASF dual-hosted git repository.
cdutz 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 71be51b9d7 feat: Added an option to be able to see which attributes
are actively set on the current level (and hereby which ones are inherited)
71be51b9d7 is described below
commit 71be51b9d7bfb4244cf29253bcfba0a499b00050
Author: Christofer Dutz <[email protected]>
AuthorDate: Mon Sep 22 10:23:14 2025 +0200
feat: Added an option to be able to see which attributes are actively set
on the current level (and hereby which ones are inherited)
---
.../mspec/model/fields/DefaultAbstractField.java | 5 ++-
.../mspec/model/fields/DefaultArrayField.java | 5 ++-
.../mspec/model/fields/DefaultAssertField.java | 5 ++-
.../mspec/model/fields/DefaultChecksumField.java | 5 ++-
.../mspec/model/fields/DefaultConstField.java | 5 ++-
.../model/fields/DefaultDiscriminatorField.java | 5 ++-
.../mspec/model/fields/DefaultEnumField.java | 5 ++-
.../language/mspec/model/fields/DefaultField.java | 18 +++++++-
.../mspec/model/fields/DefaultImplicitField.java | 5 ++-
.../model/fields/DefaultManualArrayField.java | 5 ++-
.../mspec/model/fields/DefaultManualField.java | 5 ++-
.../mspec/model/fields/DefaultOptionalField.java | 5 ++-
.../mspec/model/fields/DefaultPaddingField.java | 5 ++-
.../mspec/model/fields/DefaultPeekField.java | 5 ++-
.../mspec/model/fields/DefaultReservedField.java | 5 ++-
.../mspec/model/fields/DefaultSimpleField.java | 5 ++-
.../mspec/model/fields/DefaultStateField.java | 5 ++-
.../mspec/model/fields/DefaultSwitchField.java | 4 +-
.../mspec/model/fields/DefaultTypedField.java | 5 ++-
.../mspec/model/fields/DefaultTypedNamedField.java | 5 ++-
.../mspec/model/fields/DefaultUnknownField.java | 5 ++-
.../mspec/model/fields/DefaultValidationField.java | 5 ++-
.../mspec/model/fields/DefaultVirtualField.java | 5 ++-
.../mspec/parser/MessageFormatListener.java | 50 +++++++++++++---------
24 files changed, 112 insertions(+), 65 deletions(-)
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 a627d5a3ee..5e0af86827 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
@@ -22,11 +22,12 @@ import
org.apache.plc4x.plugins.codegenerator.types.fields.AbstractField;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
+import java.util.Set;
public class DefaultAbstractField extends DefaultTypedNamedField implements
AbstractField {
- public DefaultAbstractField(Map<String, Term> attributes, String name,
String comment) {
- super(attributes, name, comment);
+ public DefaultAbstractField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, String comment) {
+ super(attributes, currentAttributeNames, 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 4f8934317c..9f3dcc174f 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
@@ -25,14 +25,15 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultArrayField extends DefaultTypedNamedField implements
ArrayField {
private final LoopType loopType;
private final Term loopExpression;
- public DefaultArrayField(Map<String, Term> attributes, String name,
LoopType loopType, Term loopExpression, String comment) {
- super(attributes, name, comment);
+ public DefaultArrayField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, LoopType loopType, Term loopExpression,
String comment) {
+ super(attributes, currentAttributeNames, name, comment);
this.loopType = Objects.requireNonNull(loopType);
this.loopExpression = Objects.requireNonNull(loopExpression);
}
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 5758f2bdc0..62c8a42741 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultAssertField.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultAssertField.java
@@ -23,13 +23,14 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultAssertField extends DefaultTypedNamedField implements
AssertField {
private final Term conditionExpression;
- public DefaultAssertField(Map<String, Term> attributes, String name, Term
conditionExpression, String comment) {
- super(attributes, name, comment);
+ public DefaultAssertField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, Term conditionExpression, String comment) {
+ super(attributes, currentAttributeNames, 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 e923d53ac1..54afe1b726 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
@@ -24,13 +24,14 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultChecksumField extends DefaultTypedNamedField implements
ChecksumField {
private final Term checksumExpression;
- public DefaultChecksumField(Map<String, Term> attributes,
SimpleTypeReference type, String name, Term checksumExpression, String comment)
{
- super(attributes, name, comment);
+ public DefaultChecksumField(Map<String, Term> attributes, Set<String>
currentAttributeNames, SimpleTypeReference type, String name, Term
checksumExpression, String comment) {
+ super(attributes, currentAttributeNames, 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 44f3c364f3..3532c8f27a 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
@@ -24,13 +24,14 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultConstField extends DefaultTypedNamedField implements
ConstField {
private final Literal referenceValue;
- public DefaultConstField(Map<String, Term> attributes, String name,
Literal referenceValue, String comment) {
- super(attributes, name, comment);
+ public DefaultConstField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, Literal referenceValue, String comment) {
+ super(attributes, currentAttributeNames, 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 51756e88be..baba58a1eb 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultDiscriminatorField.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultDiscriminatorField.java
@@ -22,11 +22,12 @@ import
org.apache.plc4x.plugins.codegenerator.types.fields.DiscriminatorField;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
+import java.util.Set;
public class DefaultDiscriminatorField extends DefaultTypedNamedField
implements DiscriminatorField {
- public DefaultDiscriminatorField(Map<String, Term> attributes, String
name, String comment) {
- super(attributes, name, comment);
+ public DefaultDiscriminatorField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, String comment) {
+ super(attributes, currentAttributeNames, 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 7aaefbba30..6000f13e80 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
@@ -24,13 +24,14 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultEnumField extends DefaultTypedNamedField implements
EnumField {
private final String fieldName;
- public DefaultEnumField(Map<String, Term> attributes, EnumTypeReference
type, String name, String fieldName, String comment) {
- super(attributes, name, comment);
+ public DefaultEnumField(Map<String, Term> attributes, Set<String>
currentAttributeNames, EnumTypeReference type, String name, String fieldName,
String comment) {
+ super(attributes, currentAttributeNames, 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 9c08d08007..bbb13d35d4 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
@@ -24,16 +24,24 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
public abstract class DefaultField {
protected final Map<String, Term> attributes;
+ protected final Set<String> currentAttributeNames;
protected final String comment;
protected TypeDefinition owner;
- protected DefaultField(Map<String, Term> attributes, String comment) {
+ protected DefaultField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String comment) {
this.attributes = Objects.requireNonNull(attributes);
+ currentAttributeNames.forEach(attributeName -> {
+ if (!attributes.containsKey(attributeName)) {
+ throw new IllegalArgumentException("Attribute '" +
attributeName + "' is not defined for field " + this);
+ }
+ });
+ this.currentAttributeNames =
Objects.requireNonNull(currentAttributeNames);
this.comment = comment;
}
@@ -49,6 +57,14 @@ public abstract class DefaultField {
this.owner = owner;
}
+ public Set<String> getAllAttributeNames() {
+ return attributes.keySet();
+ }
+
+ public Set<String> getCurrentAttributeNames() {
+ return attributes.keySet();
+ }
+
public Optional<Term> getAttribute(String attributeName) {
if (attributes.containsKey(attributeName)) {
return Optional.of(attributes.get(attributeName));
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 ef88fcb863..d0be2408ff 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
@@ -24,13 +24,14 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultImplicitField extends DefaultTypedNamedField implements
ImplicitField {
private final Term serializeExpression;
- public DefaultImplicitField(Map<String, Term> attributes,
SimpleTypeReference type, String name, Term serializeExpression, String
comment) {
- super(attributes, name, comment);
+ public DefaultImplicitField(Map<String, Term> attributes, Set<String>
currentAttributeNames, SimpleTypeReference type, String name, Term
serializeExpression, String comment) {
+ super(attributes, currentAttributeNames, 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 a715e5926f..9220c3f4c0 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
@@ -25,6 +25,7 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultManualArrayField extends DefaultTypedNamedField implements
ManualArrayField {
@@ -34,8 +35,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, String comment) {
- super(attributes, name, comment);
+ public DefaultManualArrayField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, LoopType loopType, Term loopExpression,
Term parseExpression, Term serializeExpression, Term lengthExpression, String
comment) {
+ super(attributes, currentAttributeNames, name, comment);
this.loopType = Objects.requireNonNull(loopType);
this.loopExpression = Objects.requireNonNull(loopExpression);
this.parseExpression = Objects.requireNonNull(parseExpression);
diff --git
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualField.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualField.java
index dfb7e8c01c..a7c23ef430 100644
---
a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualField.java
+++
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/fields/DefaultManualField.java
@@ -23,6 +23,7 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultManualField extends DefaultTypedNamedField implements
ManualField {
@@ -30,8 +31,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, String
comment) {
- super(attributes, name, comment);
+ public DefaultManualField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, Term parseExpression, Term
serializeExpression, Term lengthExpression, String comment) {
+ super(attributes, currentAttributeNames, 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 30fc871f9d..22b563c7af 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
@@ -24,13 +24,14 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
public class DefaultOptionalField extends DefaultTypedNamedField implements
OptionalField {
private final Term conditionExpression;
- public DefaultOptionalField(Map<String, Term> attributes, String name,
Term conditionExpression, String comment) {
- super(attributes, name, comment);
+ public DefaultOptionalField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, Term conditionExpression, String comment) {
+ super(attributes, currentAttributeNames, 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 22b849ce6a..98d373ac47 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
@@ -24,14 +24,15 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultPaddingField extends DefaultTypedNamedField implements
PaddingField {
private final Term paddingValue;
private final Term paddingCondition;
- public DefaultPaddingField(Map<String, Term> attributes,
SimpleTypeReference type, String name, Term paddingValue, Term
paddingCondition, String comment) {
- super(attributes, name, comment);
+ public DefaultPaddingField(Map<String, Term> attributes, Set<String>
currentAttributeNames, SimpleTypeReference type, String name, Term
paddingValue, Term paddingCondition, String comment) {
+ super(attributes, currentAttributeNames, 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 a1b97f4cc5..7eb41d251a 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
@@ -24,13 +24,14 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
public class DefaultPeekField extends DefaultTypedNamedField implements
PeekField {
private final Term offsetExpression;
- public DefaultPeekField(Map<String, Term> attributes, String name, Term
offsetExpression, String comment) {
- super(attributes, name, comment);
+ public DefaultPeekField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, Term offsetExpression, String comment) {
+ super(attributes, currentAttributeNames, name, comment);
this.offsetExpression = 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 b7637dcfe6..f3035f37f3 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
@@ -24,13 +24,14 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultReservedField extends DefaultTypedField implements
ReservedField {
private final Object referenceValue;
- public DefaultReservedField(Map<String, Term> attributes,
SimpleTypeReference type, Object referenceValue, String comment) {
- super(attributes, comment);
+ public DefaultReservedField(Map<String, Term> attributes, Set<String>
currentAttributeNames, SimpleTypeReference type, Object referenceValue, String
comment) {
+ super(attributes, currentAttributeNames, 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 9a6183a415..adfaeb2dc0 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
@@ -22,11 +22,12 @@ import
org.apache.plc4x.plugins.codegenerator.types.fields.SimpleField;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
+import java.util.Set;
public class DefaultSimpleField extends DefaultTypedNamedField implements
SimpleField {
- public DefaultSimpleField(Map<String, Term> attributes, String name,
String comment) {
- super(attributes, name, comment);
+ public DefaultSimpleField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, String comment) {
+ super(attributes, currentAttributeNames, 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 9fe013c9be..bb7c09e582 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
@@ -23,13 +23,14 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultStateField extends DefaultTypedNamedField implements
StateField {
private final Term valueExpression;
- public DefaultStateField(Map<String, Term> attributes, String name, Term
valueExpression, String comment) {
- super(attributes, name, comment);
+ public DefaultStateField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, Term valueExpression, String comment) {
+ super(attributes, currentAttributeNames, 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 7e44127948..d8064b2ebc 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, String comment) {
- super(attributes, comment);
+ public DefaultSwitchField(Map<String, Term> attributes, Set<String>
currentAttributeNames, List<VariableLiteral> variableLiterals, String comment) {
+ super(attributes, currentAttributeNames, 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 5f9d4ca4e0..d7ade3618c 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
@@ -23,6 +23,7 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
@@ -31,8 +32,8 @@ public abstract class DefaultTypedField extends DefaultField {
protected final CompletableFuture<TypeReference>
typeReferenceCompletionStage = new CompletableFuture<>();
protected TypeReference type;
- public DefaultTypedField(Map<String, Term> attributes, String comment) {
- super(attributes, comment);
+ public DefaultTypedField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String comment) {
+ super(attributes, currentAttributeNames, 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 27e541f124..d688867ebd 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
@@ -22,13 +22,14 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultTypedNamedField extends DefaultTypedField {
protected final String name;
- public DefaultTypedNamedField(Map<String, Term> attributes, String name,
String comment) {
- super(attributes, comment);
+ public DefaultTypedNamedField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, String comment) {
+ super(attributes, currentAttributeNames, 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 695dbecb5d..bbcc598e7e 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
@@ -23,11 +23,12 @@ import
org.apache.plc4x.plugins.codegenerator.types.references.SimpleTypeReferen
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
+import java.util.Set;
public class DefaultUnknownField extends DefaultTypedField implements
UnknownField {
- public DefaultUnknownField(Map<String, Term> attributes,
SimpleTypeReference type, String comment) {
- super(attributes, comment);
+ public DefaultUnknownField(Map<String, Term> attributes, Set<String>
currentAttributeNames, SimpleTypeReference type, String comment) {
+ super(attributes, currentAttributeNames, 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 17f049819a..4885f3280c 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
@@ -24,6 +24,7 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
public class DefaultValidationField extends DefaultField implements
ValidationField {
@@ -31,8 +32,8 @@ public class DefaultValidationField extends DefaultField
implements ValidationFi
private final String description;
private final boolean shouldFail;
- public DefaultValidationField(Map<String, Term> attributes, Term
validationExpression, String description, boolean shouldFail, String comment) {
- super(attributes, comment);
+ public DefaultValidationField(Map<String, Term> attributes, Set<String>
currentAttributeNames, Term validationExpression, String description, boolean
shouldFail, String comment) {
+ super(attributes, currentAttributeNames, 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 ca5d7a84e4..e8eba71ade 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
@@ -24,13 +24,14 @@ import
org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
public class DefaultVirtualField extends DefaultTypedNamedField implements
VirtualField {
private final Term valueExpression;
- public DefaultVirtualField(Map<String, Term> attributes, String name, Term
valueExpression, String comment) {
- super(attributes, name, comment);
+ public DefaultVirtualField(Map<String, Term> attributes, Set<String>
currentAttributeNames, String name, Term valueExpression, String comment) {
+ super(attributes, currentAttributeNames, 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/parser/MessageFormatListener.java
b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java
index 38ca85049f..1adb680c55 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
@@ -308,7 +308,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterAbstractField(MSpecParser.AbstractFieldContext ctx) {
var name = getIdString(ctx.name);
- var field = new DefaultAbstractField(getAttributes(ctx), name,
consumePendingComment(ctx));
+ var field = new DefaultAbstractField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), name, consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -327,7 +327,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
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));
+ var field = new DefaultArrayField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), name, loopType, loopExpression,
consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -345,7 +345,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
public void enterAssertField(MSpecParser.AssertFieldContext ctx) {
var name = getIdString(ctx.name);
var conditionExpression = getExpressionTerm(ctx.condition);
- var field = new DefaultAssertField(getAttributes(ctx), name,
conditionExpression, consumePendingComment(ctx));
+ var field = new DefaultAssertField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), name, conditionExpression,
consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -364,7 +364,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
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));
+ var field = new DefaultChecksumField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), type, name, checksumExpression,
consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -373,7 +373,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterConstField(MSpecParser.ConstFieldContext ctx) {
var name = getIdString(ctx.name);
- var field = new DefaultConstField(getAttributes(ctx), name,
getValueLiteral(ctx.expected), consumePendingComment(ctx));
+ var field = new DefaultConstField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), name, getValueLiteral(ctx.expected),
consumePendingComment(ctx));
if (ctx.type.dataType() != null) {
field.setType(getSimpleTypeReference(ctx.type.dataType()));
} else {
@@ -394,7 +394,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterDiscriminatorField(MSpecParser.DiscriminatorFieldContext
ctx) {
var name = getIdString(ctx.name);
- var field = new DefaultDiscriminatorField(getAttributes(ctx), name,
consumePendingComment(ctx));
+ var field = new DefaultDiscriminatorField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), name, consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -418,7 +418,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
if (ctx.fieldName != null) {
fieldName = getIdString(ctx.fieldName);
}
- var field = new DefaultEnumField(getAttributes(ctx), type, name,
fieldName, consumePendingComment(ctx));
+ var field = new DefaultEnumField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), type, name, fieldName,
consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -429,7 +429,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
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));
+ var field = new DefaultImplicitField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), type, name, serializeExpression,
consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -444,7 +444,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
Term parseExpression = getExpressionTerm(ctx.parseExpression);
Term serializeExpression = getExpressionTerm(ctx.serializeExpression);
Term lengthExpression = getExpressionTerm(ctx.lengthExpression);
- DefaultManualArrayField field = new
DefaultManualArrayField(getAttributes(ctx), name, loopType, loopExpression,
+ DefaultManualArrayField field = new
DefaultManualArrayField(getAttributes(ctx), getCurFieldAttributeNames(ctx),
name, loopType, loopExpression,
parseExpression, serializeExpression, lengthExpression,
consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
@@ -465,7 +465,7 @@ 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,
+ DefaultManualField field = new DefaultManualField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), name, parseExpression,
serializeExpression,
lengthExpression, consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
@@ -488,7 +488,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
if (ctx.condition != null) {
conditionExpression = getExpressionTerm(ctx.condition);
}
- var field = new DefaultOptionalField(getAttributes(ctx), name,
conditionExpression, consumePendingComment(ctx));
+ var field = new DefaultOptionalField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), name, conditionExpression,
consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -508,7 +508,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
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));
+ var field = new DefaultPaddingField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), type, name, paddingValue, timesPadding,
consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -521,7 +521,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
if (ctx.offset != null) {
offsetExpression = getExpressionTerm(ctx.offset);
}
- var field = new DefaultPeekField(getAttributes(ctx), name,
offsetExpression, consumePendingComment(ctx));
+ var field = new DefaultPeekField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), name, offsetExpression,
consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -539,7 +539,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
public void enterReservedField(MSpecParser.ReservedFieldContext ctx) {
var type = getSimpleTypeReference(ctx.type);
var expected = getExprString(ctx.expected);
- var field = new DefaultReservedField(getAttributes(ctx), type,
expected, consumePendingComment(ctx));
+ var field = new DefaultReservedField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), type, expected, consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -548,7 +548,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterSimpleField(MSpecParser.SimpleFieldContext ctx) {
var name = getIdString(ctx.name);
- var field = new DefaultSimpleField(getAttributes(ctx), name,
consumePendingComment(ctx));
+ var field = new DefaultSimpleField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), name, consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -592,7 +592,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
() -> 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.
var valueExpression = new DefaultVariableLiteral(name, null, null,
null);
- var field = new DefaultStateField(getAttributes(ctx), name,
valueExpression, consumePendingComment(ctx));
+ var field = new DefaultStateField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), name, valueExpression,
consumePendingComment(ctx));
getTypeReference(type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -611,7 +611,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
var variableLiterals = ctx.discriminators.variableLiteral().stream()
.map(this::getVariableLiteral)
.collect(Collectors.toList());
- var field = new DefaultSwitchField(getAttributes(ctx),
variableLiterals, consumePendingComment(ctx));
+ var field = new DefaultSwitchField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), variableLiterals, consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -620,7 +620,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
@Override
public void enterUnknownField(MSpecParser.UnknownFieldContext ctx) {
var type = getSimpleTypeReference(ctx.type);
- var field = new DefaultUnknownField(getAttributes(ctx), type,
consumePendingComment(ctx));
+ var field = new DefaultUnknownField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), type, consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -637,7 +637,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
if (ctx.description != null) {
description = ctx.description.getText();
}
- var field = new DefaultValidationField(getAttributes(ctx),
validationExpression, description, shouldFail, consumePendingComment(ctx));
+ var field = new DefaultValidationField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), validationExpression, description, shouldFail,
consumePendingComment(ctx));
if (parserContexts.peek() != null) {
parserContexts.peek().add(field);
}
@@ -647,7 +647,7 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
public void enterVirtualField(MSpecParser.VirtualFieldContext ctx) {
var name = getIdString(ctx.name);
var valueExpression = getExpressionTerm(ctx.valueExpression);
- var field = new DefaultVirtualField(getAttributes(ctx), name,
valueExpression, consumePendingComment(ctx));
+ var field = new DefaultVirtualField(getAttributes(ctx),
getCurFieldAttributeNames(ctx), name, valueExpression,
consumePendingComment(ctx));
getTypeReference(ctx.type).whenComplete((typeReference, throwable) -> {
if (throwable != null) {
// TODO: proper error collection in type context error bucket
@@ -1005,6 +1005,16 @@ public class MessageFormatListener extends
MSpecBaseListener implements LazyType
return attributes;
}
+ private Set<String> getCurFieldAttributeNames(RuleContext ctx) {
+ Set<String> attributeNames = new HashSet<>();
+ if (ctx.parent.parent instanceof MSpecParser.FieldDefinitionContext
fieldDefinitionContext) {
+ for (MSpecParser.AttributeContext attributeContext :
fieldDefinitionContext.attributes.attribute()) {
+ attributeNames.add(attributeContext.name.getText());
+ }
+ }
+ return attributeNames;
+ }
+
private String unquoteString(String quotedString) {
if (quotedString == null || quotedString.length() < 2) {
return quotedString;