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); }
