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

commit 54ec98f2a834eea18d7c08ac9dbead016ef7f50a
Author: Sebastian Rühl <[email protected]>
AuthorDate: Sat Feb 26 11:18:00 2022 +0100

    fix(codegen/plc4j): hotfix for missing BitInteger support
---
 .../src/main/resources/templates/java/model-template.java.ftlh |  8 ++++++--
 .../plc4x/java/spi/codegen/fields/FieldReaderFactory.java      | 10 ++++++++++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git 
a/code-generation/language-java/src/main/resources/templates/java/model-template.java.ftlh
 
b/code-generation/language-java/src/main/resources/templates/java/model-template.java.ftlh
index b793f61..9a8f76d 100644
--- 
a/code-generation/language-java/src/main/resources/templates/java/model-template.java.ftlh
+++ 
b/code-generation/language-java/src/main/resources/templates/java/model-template.java.ftlh
@@ -200,8 +200,12 @@ public<#if type.isDiscriminatedParentTypeDefinition()> 
abstract</#if> class ${ty
     public ${helper.getLanguageTypeNameForField(field)} 
get${field.name?cap_first}() {
         <#if helper.getLanguageTypeNameForField(field) = 'String'>
         return 
${helper.getLanguageTypeNameForField(field)}.valueOf(${helper.toSerializationExpression(field,
 field.type, field.valueExpression, parserArguments)});
-        <#elseif helper.getLanguageTypeNameForField(field) = 'BigInteger' && 
!helper.isBigIntegerSource(field.valueExpression)>
-        return BigInteger.valueOf(${helper.toSerializationExpression(field, 
field.type, field.valueExpression, parserArguments)});
+        <#--elseif helper.getLanguageTypeNameForField(field) = 'BigInteger' && 
!helper.isBigIntegerSource(field.valueExpression)-->
+        <#elseif helper.getLanguageTypeNameForField(field) = 'BigInteger'>
+        Object o = ${helper.toSerializationExpression(field, field.type, 
field.valueExpression, parserArguments)};
+        if (o instanceof BigInteger)
+            return (BigInteger) o;
+        return BigInteger.valueOf(((Number)o).longValue());
         <#else>
         return (${helper.getLanguageTypeNameForField(field)}) 
(${helper.toSerializationExpression(field, field.type, field.valueExpression, 
parserArguments)});
         </#if>
diff --git 
a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderFactory.java
 
b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderFactory.java
index c65a767..2aae3cf 100644
--- 
a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderFactory.java
+++ 
b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderFactory.java
@@ -24,6 +24,7 @@ import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.ReadBuffer;
 import org.apache.plc4x.java.spi.generation.WithReaderArgs;
 
+import java.math.BigInteger;
 import java.util.List;
 import java.util.function.Function;
 import java.util.function.Supplier;
@@ -35,6 +36,15 @@ public class FieldReaderFactory {
         return new FieldReaderAbstract<T>().readAbstractField(logicalName, 
dataReader, readerArgs);
     }
 
+    // TODO: only used as lazy workaround
+    @Deprecated
+    public static <T> List<T> readCountArrayField(String logicalName, 
DataReader<T> dataReader, BigInteger count, WithReaderArgs... readerArgs) 
throws ParseException {
+        if (count.bitLength() > 64) {
+            throw new IllegalStateException("can't handle more than 64 bit. 
Actual: " + count.bitLength());
+        }
+        return readCountArrayField(logicalName, dataReader, count.longValue(), 
readerArgs);
+    }
+
     public static <T> List<T> readCountArrayField(String logicalName, 
DataReader<T> dataReader, long count, WithReaderArgs... readerArgs) throws 
ParseException {
         return new FieldReaderArray<T>().readFieldCount(logicalName, 
dataReader, count, readerArgs);
     }

Reply via email to