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/03/07 13:57:15 UTC

[plc4x-build-tools] branch develop updated: fix(codegen): fix ComplexTypeDefinition#isNonDiscriminatorField so it respects virtual fields too

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-build-tools.git


The following commit(s) were added to refs/heads/develop by this push:
     new ffbec8f  fix(codegen): fix ComplexTypeDefinition#isNonDiscriminatorField so it respects virtual fields too
ffbec8f is described below

commit ffbec8f639d5bc753f5cba66ed0f2dd4f9ce0dd9
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Mar 7 14:52:06 2022 +0100

    fix(codegen): fix ComplexTypeDefinition#isNonDiscriminatorField so it respects virtual fields too
---
 .../types/definitions/ComplexTypeDefinition.java             | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/ComplexTypeDefinition.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/ComplexTypeDefinition.java
index f1c9ba6..4e81a02 100644
--- a/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/ComplexTypeDefinition.java
+++ b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/ComplexTypeDefinition.java
@@ -50,6 +50,13 @@ public interface ComplexTypeDefinition extends TypeDefinition {
     List<PropertyField> getAllPropertyFields();
 
     /**
+     * In contrast to getVirtualFields, this also gets all virtual fields of any parent type.
+     *
+     * @return all virtual fields including any parents simple fields
+     */
+    List<PropertyField> getAllVirtualFields();
+
+    /**
      * Get only the fields which are of type ConstField.
      *
      * @return all constant fields
@@ -258,8 +265,11 @@ public interface ComplexTypeDefinition extends TypeDefinition {
      * @return true if a field with the given name already exists in the same type.
      */
     default boolean isNonDiscriminatorField(String discriminatorName) {
-        return getAllPropertyFields().stream()
+        boolean hasMatchingPropertyField = getAllPropertyFields().stream()
                 .anyMatch(field -> !(field instanceof DiscriminatorField) && field.getName().equals(discriminatorName));
+        boolean hasMatchingVirtualField = getAllVirtualFields().stream()
+                .anyMatch(field -> field.getName().equals(discriminatorName));
+        return hasMatchingPropertyField && hasMatchingVirtualField;
     }
 
     default boolean isParserArgument(String discriminatorName) {