You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/02/23 10:39:37 UTC
[plc4x] branch feature/cleaned-up-type-references updated (8afd22e -> 9ac5c0c)
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a change to branch feature/cleaned-up-type-references
in repository https://gitbox.apache.org/repos/asf/plc4x.git.
from 8afd22e feat(codegen): Started clening up the type references
add 3e72b95 build(deps): bump asciidoctorj from 2.5.1 to 2.5.3 (#322)
add 7599dba chore(plc4c): fixed jumping const fields
new 8d36f18 Merge branch 'develop' into feature/cleaned-up-type-references
new 9ac5c0c refactor(codegen): cleanup type definitions
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../plc4x/language/c/CLanguageTemplateHelper.java | 11 ++++---
.../resources/templates/c/pojo-template.c.ftlh | 4 ++-
.../resources/templates/c/pojo-template.h.ftlh | 4 ++-
.../language/mspec/LazyTypeDefinitionConsumer.java | 3 +-
.../definitions/DefaultComplexTypeDefinition.java | 36 +++++++++++++++++-----
.../DefaultDiscriminatedComplexTypeDefinition.java | 14 +++++----
.../model/definitions/DefaultTypeDefinition.java | 23 +++-----------
.../mspec/parser/MessageFormatListener.java | 28 ++++++-----------
.../s7/include/s7_data_alarm_message.h | 2 +-
.../s7/include/s7_payload_user_data_item.h | 8 ++---
.../s7/src/s7_data_alarm_message.c | 8 ++---
.../s7/src/s7_payload_user_data_item.c | 28 ++++++++---------
.../opcua/src/test/resources/log4j.properties | 2 +-
pom.xml | 2 +-
14 files changed, 91 insertions(+), 82 deletions(-)
[plc4x] 02/02: refactor(codegen): cleanup type definitions
Posted by sr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch feature/cleaned-up-type-references
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 9ac5c0cef6b685d607846c1088ec2c4267714c24
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Feb 23 11:37:13 2022 +0100
refactor(codegen): cleanup type definitions
---
.../language/mspec/LazyTypeDefinitionConsumer.java | 3 +-
.../definitions/DefaultComplexTypeDefinition.java | 36 +++++++++++++++++-----
.../DefaultDiscriminatedComplexTypeDefinition.java | 14 +++++----
.../model/definitions/DefaultTypeDefinition.java | 23 +++-----------
.../mspec/parser/MessageFormatListener.java | 28 ++++++-----------
.../opcua/src/test/resources/log4j.properties | 2 +-
6 files changed, 55 insertions(+), 51 deletions(-)
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/LazyTypeDefinitionConsumer.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/LazyTypeDefinitionConsumer.java
index 8945ccf..eb41858 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/LazyTypeDefinitionConsumer.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/LazyTypeDefinitionConsumer.java
@@ -19,11 +19,12 @@
package org.apache.plc4x.plugins.codegenerator.language.mspec;
import org.apache.plc4x.plugins.codegenerator.types.definitions.ComplexTypeDefinition;
+import org.apache.plc4x.plugins.codegenerator.types.definitions.TypeDefinition;
import java.util.function.Consumer;
public interface LazyTypeDefinitionConsumer {
- void setOrScheduleTypeDefinitionConsumer(String typeRefName, Consumer<ComplexTypeDefinition> setComplexTypeDefinition);
+ void setOrScheduleTypeDefinitionConsumer(String typeRefName, Consumer<TypeDefinition> setTypeDefinition);
}
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 231b178..bc878dd 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
@@ -30,6 +30,7 @@ public class DefaultComplexTypeDefinition extends DefaultTypeDefinition implemen
private final boolean isAbstract;
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);
@@ -37,6 +38,30 @@ public class DefaultComplexTypeDefinition extends DefaultTypeDefinition implemen
this.fields = Objects.requireNonNull(fields);
}
+ public Optional<ComplexTypeDefinition> getParentType() {
+ return Optional.ofNullable(parentType);
+ }
+
+ public void setParentType(ComplexTypeDefinition parentType) {
+ this.parentType = parentType;
+ }
+
+ public Optional<List<Argument>> getAllParserArguments() {
+ List<Argument> allArguments = new ArrayList<>();
+ getParentType()
+ .map(ComplexTypeDefinition::getParserArguments)
+ .map(arguments -> arguments.orElse(Collections.emptyList()))
+ .map(allArguments::addAll);
+ if (parserArguments != null) {
+ allArguments.addAll(parserArguments);
+ }
+ if (allArguments.isEmpty()) {
+ return Optional.empty();
+ }
+ return Optional.of(allArguments);
+ }
+
+
public boolean isAbstract() {
return isAbstract;
}
@@ -104,19 +129,16 @@ public class DefaultComplexTypeDefinition extends DefaultTypeDefinition implemen
@Override
public List<PropertyField> getAllPropertyFields() {
List<PropertyField> fields = new LinkedList<>();
- if (getParentType() != null) {
- fields.addAll(((ComplexTypeDefinition) getParentType()).getAllPropertyFields());
- }
+ getParentType()
+ .map(ComplexTypeDefinition::getAllPropertyFields)
+ .map(fields::addAll);
fields.addAll(getPropertyFields());
return fields;
}
@Override
public List<PropertyField> getParentPropertyFields() {
- if (getParentType() == null) {
- return Collections.emptyList();
- }
- return ((ComplexTypeDefinition) getParentType()).getAllPropertyFields();
+ return getParentType().map(ComplexTypeDefinition::getAllPropertyFields).orElse(Collections.emptyList());
}
@Override
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 8ee2dda..7a9bacd 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
@@ -27,6 +27,7 @@ import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.Optional;
public class DefaultDiscriminatedComplexTypeDefinition extends DefaultComplexTypeDefinition implements DiscriminatedComplexTypeDefinition {
@@ -37,14 +38,15 @@ public class DefaultDiscriminatedComplexTypeDefinition extends DefaultComplexTyp
this.discriminatorValueTerms = Objects.requireNonNull(discriminatorValueTerms);
}
- public DiscriminatorField getDiscriminatorField() {
+ public Optional<DiscriminatorField> getDiscriminatorField() {
// For a discriminated type, the discriminator is always defined in the parent type,
// which is always a DefaultComplexTypeDefinition instance.
- return ((DefaultComplexTypeDefinition) getParentType()).getFields().stream()
- .filter(field -> field instanceof DiscriminatorField)
- .map(field -> (DiscriminatorField) field)
- .findFirst()
- .orElse(null);
+ return getParentType()
+ .flatMap(parentType -> parentType.getFields().stream()
+ .filter(field -> field instanceof DiscriminatorField)
+ .map(DiscriminatorField.class::cast)
+ .findFirst()
+ );
}
public List<Term> getDiscriminatorValueTerms() {
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 3da1c70..89145fd 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
@@ -20,7 +20,6 @@ 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.TypeDefinition;
import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
import java.util.*;
@@ -30,13 +29,11 @@ public abstract class DefaultTypeDefinition {
protected final String name;
private final Map<String, Term> attributes;
protected final List<Argument> parserArguments;
- protected TypeDefinition parentType;
public DefaultTypeDefinition(String name, Map<String, Term> attributes, List<Argument> parserArguments) {
this.name = Objects.requireNonNull(name);
this.attributes = attributes;
this.parserArguments = parserArguments;
- this.parentType = null;
}
public String getName() {
@@ -56,31 +53,21 @@ public abstract class DefaultTypeDefinition {
public Optional<List<Argument>> getAllParserArguments() {
List<Argument> allArguments = new ArrayList<>();
- if (getParentType() != null) {
- final TypeDefinition parentType = getParentType();
- allArguments.addAll(parentType.getParserArguments().orElse(Collections.emptyList()));
- }
if (parserArguments != null) {
allArguments.addAll(parserArguments);
}
+ if (allArguments.isEmpty()) {
+ return Optional.empty();
+ }
return Optional.of(allArguments);
}
- public TypeDefinition getParentType() {
- return parentType;
- }
-
- public void setParentType(TypeDefinition parentType) {
- this.parentType = parentType;
- }
-
@Override
public String toString() {
return "DefaultTypeDefinition{" +
"name='" + name + '\'' +
", attributes=" + attributes +
", parserArguments=" + parserArguments +
- ", parentType=" + parentType +
'}';
}
@@ -89,11 +76,11 @@ 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) && Objects.equals(parentType, that.parentType);
+ return name.equals(that.name) && Objects.equals(attributes, that.attributes) && Objects.equals(parserArguments, that.parserArguments);
}
@Override
public int hashCode() {
- return Objects.hash(name, attributes, parserArguments, parentType);
+ return Objects.hash(name, attributes, parserArguments);
}
}
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 3f81f25..01dae27 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
@@ -58,7 +58,7 @@ public class MessageFormatListener extends MSpecBaseListener implements LazyType
protected Map<String, TypeDefinition> types;
- protected Map<String, List<Consumer<ComplexTypeDefinition>>> typeDefinitionConsumers = new HashMap<>();
+ protected Map<String, List<Consumer<TypeDefinition>>> typeDefinitionConsumers = new HashMap<>();
private Stack<Map<String, Term>> batchSetAttributes = new Stack<>();
@@ -127,14 +127,6 @@ public class MessageFormatListener extends MSpecBaseListener implements LazyType
DefaultDataIoTypeDefinition type = new DefaultDataIoTypeDefinition(typeName, attributes, parserArguments, switchField);
dispatchType(typeName, type);
- // Set the parent type for all sub-types.
- if (switchField != null) {
- for (DiscriminatedComplexTypeDefinition subtype : switchField.getCases()) {
- if (subtype instanceof DefaultDiscriminatedComplexTypeDefinition) {
- ((DefaultDiscriminatedComplexTypeDefinition) subtype).setParentType(type);
- }
- }
- }
parserContexts.pop();
} else { // Handle all other types.
// If the type has sub-types it's an abstract type.
@@ -236,7 +228,7 @@ public class MessageFormatListener extends MSpecBaseListener implements LazyType
public void enterEnumField(MSpecParser.EnumFieldContext ctx) {
String typeRefName = ctx.type.complexTypeReference.getText();
DefaultComplexTypeReference type = new DefaultComplexTypeReference(typeRefName, null);
- setOrScheduleTypeDefinitionConsumer(typeRefName, type::setComplexTypeDefinition);
+ setOrScheduleTypeDefinitionConsumer(typeRefName, type::setTypeDefinition);
String name = getIdString(ctx.name);
String fieldName = null;
if (ctx.fieldName != null) {
@@ -542,7 +534,7 @@ public class MessageFormatListener extends MSpecBaseListener implements LazyType
} else {
String typeRefName = ctx.complexTypeReference.getText();
DefaultComplexTypeReference type = new DefaultComplexTypeReference(typeRefName, getParams(ctx.params));
- setOrScheduleTypeDefinitionConsumer(typeRefName, type::setComplexTypeDefinition);
+ setOrScheduleTypeDefinitionConsumer(typeRefName, type::setTypeDefinition);
return type;
}
}
@@ -664,11 +656,11 @@ public class MessageFormatListener extends MSpecBaseListener implements LazyType
public void dispatchType(String typeName, TypeDefinition type) {
LOGGER.debug("dispatching {}:{}", typeName, type);
- List<Consumer<ComplexTypeDefinition>> waitingConsumers = typeDefinitionConsumers.getOrDefault(typeName, new LinkedList<>());
+ List<Consumer<TypeDefinition>> waitingConsumers = typeDefinitionConsumers.getOrDefault(typeName, new LinkedList<>());
LOGGER.debug("{} waiting for {}", waitingConsumers.size(), typeName);
- Iterator<Consumer<ComplexTypeDefinition>> consumerIterator = waitingConsumers.iterator();
+ Iterator<Consumer<TypeDefinition>> consumerIterator = waitingConsumers.iterator();
while (consumerIterator.hasNext()) {
- Consumer<ComplexTypeDefinition> setter = consumerIterator.next();
+ Consumer<TypeDefinition> setter = consumerIterator.next();
LOGGER.debug("setting {} for {}", typeName, setter);
setter.accept(type);
consumerIterator.remove();
@@ -678,20 +670,20 @@ public class MessageFormatListener extends MSpecBaseListener implements LazyType
}
@Override
- public void setOrScheduleTypeDefinitionConsumer(String typeRefName, Consumer<ComplexTypeDefinition> setComplexTypeDefinition) {
+ public void setOrScheduleTypeDefinitionConsumer(String typeRefName, Consumer<TypeDefinition> setTypeDefinition) {
LOGGER.debug("set or schedule {}", typeRefName);
TypeDefinition typeDefinition = types.get(typeRefName);
if (typeDefinition != null) {
- LOGGER.debug("{} present so setting for {}", typeRefName, setComplexTypeDefinition);
+ LOGGER.debug("{} present so setting for {}", typeRefName, setTypeDefinition);
// TODO: This should actually only be a complex-type, right?
- setComplexTypeDefinition.accept((ComplexTypeDefinition) typeDefinition);
+ setTypeDefinition.accept((ComplexTypeDefinition) typeDefinition);
} else {
// put up order
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("{} already waiting for {}", typeDefinitionConsumers.getOrDefault(typeRefName, new LinkedList<>()).size(), typeRefName);
}
typeDefinitionConsumers.putIfAbsent(typeRefName, new LinkedList<>());
- typeDefinitionConsumers.get(typeRefName).add(setComplexTypeDefinition);
+ typeDefinitionConsumers.get(typeRefName).add(setTypeDefinition);
}
}
diff --git a/plc4j/drivers/opcua/src/test/resources/log4j.properties b/plc4j/drivers/opcua/src/test/resources/log4j.properties
index 593679f..39bd8cb 100644
--- a/plc4j/drivers/opcua/src/test/resources/log4j.properties
+++ b/plc4j/drivers/opcua/src/test/resources/log4j.properties
@@ -20,5 +20,5 @@ appender.out.type=Console
appender.out.name=out
appender.out.layout.type=PatternLayout
appender.out.layout.pattern=[%30.30t] %-30.30c{1} %-5p %m%n
-rootLogger.level=TRACE
+rootLogger.level=ERROR
rootLogger.appenderRef.out.ref=out
[plc4x] 01/02: Merge branch 'develop' into feature/cleaned-up-type-references
Posted by sr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch feature/cleaned-up-type-references
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 8d36f18be57356c0b3549de4d8c85d90a360b546
Merge: 8afd22e 7599dba
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Feb 23 11:11:10 2022 +0100
Merge branch 'develop' into feature/cleaned-up-type-references
.../plc4x/language/c/CLanguageTemplateHelper.java | 11 +++++----
.../resources/templates/c/pojo-template.c.ftlh | 4 +++-
.../resources/templates/c/pojo-template.h.ftlh | 4 +++-
.../s7/include/s7_data_alarm_message.h | 2 +-
.../s7/include/s7_payload_user_data_item.h | 8 +++----
.../s7/src/s7_data_alarm_message.c | 8 +++----
.../s7/src/s7_payload_user_data_item.c | 28 +++++++++++-----------
pom.xml | 2 +-
8 files changed, 36 insertions(+), 31 deletions(-)