johnzon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Struberg <strub...@yahoo.de.INVALID>
Subject Re: [johnzon] branch master updated: JOHNZON-226 use own Array.length
Date Tue, 30 Jul 2019 12:19:04 GMT

Will do.
LieGrue,
strub


> Am 29.07.2019 um 23:12 schrieb Romain Manni-Bucau <rmannibucau@gmail.com>:
> 
> Hmm, this breaks the isolation between our modules - jsonp impl must stay
> switchable in mapper and jsonb modules.
> 
> Can we just duplicate the class - the old shade+relocation hack is fine for
> me?
> 
> Also, does Foo[] match Object[] or do we have some regression - think we
> should harness such an utility with an exhaustive test kit?
> 
> Romain
> 
> 
> ---------- Forwarded message ---------
> De : <struberg@apache.org>
> Date: lun. 29 juil. 2019 à 23:08
> Subject: [johnzon] branch master updated: JOHNZON-226 use own Array.length
> To: commits@johnzon.apache.org <commits@johnzon.apache.org>
> 
> 
> This is an automated email from the ASF dual-hosted git repository.
> 
> struberg pushed a commit to branch master
> in repository https://gitbox.apache.org/repos/asf/johnzon.git
> 
> 
> The following commit(s) were added to refs/heads/master by this push:
>     new 41e0fdc  JOHNZON-226 use own Array.length
> 41e0fdc is described below
> 
> commit 41e0fdc50c59153a03e49e85afac534949ece4e6
> Author: Mark Struberg <struberg@apache.org>
> AuthorDate: Mon Jul 29 22:49:54 2019 +0200
> 
>    JOHNZON-226 use own Array.length
> ---
> .../apache/johnzon/core/JsonArrayBuilderImpl.java  |  4 ++-
> .../org/apache/johnzon/core}/util/ArrayUtil.java   | 36
> +++++++++++++++++++++-
> .../org/apache/johnzon/jsonb/JohnzonJsonb.java     | 15 ++++-----
> .../java/org/apache/johnzon/mapper/Mapper.java     |  2 +-
> .../johnzon/mapper/MappingGeneratorImpl.java       | 35
> ++-------------------
> 5 files changed, 49 insertions(+), 43 deletions(-)
> 
> diff --git
> a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
> b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
> index f105eaf..effd30a 100644
> ---
> a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
> +++
> b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
> @@ -33,6 +33,8 @@ import java.util.Collections;
> import java.util.List;
> import java.util.Map;
> 
> +import org.apache.johnzon.core.util.ArrayUtil;
> +
> class JsonArrayBuilderImpl implements JsonArrayBuilder, Serializable {
>     private List<JsonValue> tmpList;
>     private BufferStrategy.BufferProvider<char[]> bufferProvider;
> @@ -223,7 +225,7 @@ class JsonArrayBuilderImpl implements JsonArrayBuilder,
> Serializable {
>         } else if (value instanceof Collection) {
>             add(new JsonArrayBuilderImpl(Collection.class.cast(value),
> bufferProvider).build());
>         } else if (value.getClass().isArray()) {
> -            final int length = Array.getLength(value);
> +            final int length = ArrayUtil.getArrayLength(value);
>             final Collection<Object> collection = new ArrayList<>(length);
>             for (int i = 0; i < length; i++) {
>                 collection.add(Array.get(value, i));
> diff --git
> a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/util/ArrayUtil.java
> b/johnzon-core/src/main/java/org/apache/johnzon/core/util/ArrayUtil.java
> similarity index 75%
> rename from
> johnzon-mapper/src/main/java/org/apache/johnzon/mapper/util/ArrayUtil.java
> rename to
> johnzon-core/src/main/java/org/apache/johnzon/core/util/ArrayUtil.java
> index a7a6c57..646c112 100644
> ---
> a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/util/ArrayUtil.java
> +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/util/ArrayUtil.java
> @@ -14,7 +14,7 @@
>  * See the License for the specific language governing permissions and
>  * limitations under the License.
>  */
> -package org.apache.johnzon.mapper.util;
> +package org.apache.johnzon.core.util;
> 
> import java.util.AbstractList;
> import java.util.List;
> @@ -27,6 +27,40 @@ public final class ArrayUtil {
>         // utility class ct
>     }
> 
> +    public static int getArrayLength(Object array) {
> +        // Note: all types of multidimensional arrays are instanceof
> Object[]
> +        if (array instanceof Object[]) {
> +            return ((Object[]) array).length;
> +        }
> +        if (array instanceof boolean[]) {
> +            return ((boolean[])array).length;
> +        }
> +        if (array instanceof byte[]) {
> +            return ((byte[])array).length;
> +        }
> +        if (array instanceof char[]) {
> +            return ((char[]) array).length;
> +        }
> +        if (array instanceof short[]) {
> +            return ((short[]) array).length;
> +        }
> +        if (array instanceof int[]) {
> +            return ((int[]) array).length;
> +        }
> +        if (array instanceof long[]) {
> +            return ((long[]) array).length;
> +        }
> +        if (array instanceof float[]) {
> +            return ((float[]) array).length;
> +        }
> +        if (array instanceof double[]) {
> +            return ((double[]) array).length;
> +        }
> +
> +        throw new IllegalArgumentException("This is not an array! " +
> array);
> +    }
> +
> +
>     public static List<Integer> asList(final int[] vals) {
>         return new AbstractList<Integer>() {
>             @Override
> diff --git
> a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java
> b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java
> index a9adada..7965519 100644
> --- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java
> +++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java
> @@ -18,6 +18,7 @@
>  */
> package org.apache.johnzon.jsonb;
> 
> +import org.apache.johnzon.core.util.ArrayUtil;
> import org.apache.johnzon.jsonb.api.experimental.JsonbExtension;
> import org.apache.johnzon.jsonb.extension.JsonValueReader;
> import org.apache.johnzon.jsonb.extension.JsonValueWriter;
> @@ -254,43 +255,43 @@ public class JohnzonJsonb implements Jsonb,
> AutoCloseable, JsonbExtension {
>         final Class<?> componentType =
> object.getClass().getComponentType();
>         Object[] array;
>         if (int.class == componentType) {
> -            final int length = Array.getLength(object);
> +            final int length = ArrayUtil.getArrayLength(object);
>             array = new Integer[length];
>             for (int i = 0; i < length; i++) {
>                 array[i] = Array.getInt(object, i);
>             }
>         } else if (double.class == componentType) {
> -            final int length = Array.getLength(object);
> +            final int length = ArrayUtil.getArrayLength(object);
>             array = new Integer[length];
>             for (int i = 0; i < length; i++) {
>                 array[i] = Array.getDouble(object, i);
>             }
>         } else if (byte.class == componentType) {
> -            final int length = Array.getLength(object);
> +            final int length = ArrayUtil.getArrayLength(object);
>             array = new Integer[length];
>             for (int i = 0; i < length; i++) {
>                 array[i] = Array.getByte(object, i);
>             }
>         } else if (char.class == componentType) {
> -            final int length = Array.getLength(object);
> +            final int length = ArrayUtil.getArrayLength(object);
>             array = new Integer[length];
>             for (int i = 0; i < length; i++) {
>                 array[i] = Array.getChar(object, i);
>             }
>         } else if (float.class == componentType) {
> -            final int length = Array.getLength(object);
> +            final int length = ArrayUtil.getArrayLength(object);
>             array = new Integer[length];
>             for (int i = 0; i < length; i++) {
>                 array[i] = Array.getFloat(object, i);
>             }
>         } else if (long.class == componentType) {
> -            final int length = Array.getLength(object);
> +            final int length = ArrayUtil.getArrayLength(object);
>             array = new Integer[length];
>             for (int i = 0; i < length; i++) {
>                 array[i] = Array.getLong(object, i);
>             }
>         } else if (short.class == componentType) {
> -            final int length = Array.getLength(object);
> +            final int length = ArrayUtil.getArrayLength(object);
>             array = new Integer[length];
>             for (int i = 0; i < length; i++) {
>                 array[i] = Array.getShort(object, i);
> diff --git
> a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
> b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
> index 1027fca..b95935e 100644
> --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
> +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
> @@ -53,7 +53,7 @@ import javax.json.stream.JsonGeneratorFactory;
> 
> import org.apache.johnzon.mapper.internal.JsonPointerTracker;
> import org.apache.johnzon.mapper.reflection.JohnzonCollectionType;
> -import org.apache.johnzon.mapper.util.ArrayUtil;
> +import org.apache.johnzon.core.util.ArrayUtil;
> 
> public class Mapper implements Closeable {
> 
> diff --git
> a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
> b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
> index 1b4d4e8..27de775 100644
> ---
> a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
> +++
> b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
> @@ -21,6 +21,7 @@ package org.apache.johnzon.mapper;
> import static java.util.Collections.emptyList;
> 
> import org.apache.johnzon.mapper.internal.JsonPointerTracker;
> +import org.apache.johnzon.core.util.ArrayUtil;
> 
> import javax.json.JsonValue;
> import javax.json.stream.JsonGenerator;
> @@ -470,7 +471,7 @@ public class MappingGeneratorImpl implements
> MappingGenerator {
>      * @param key either the attribute key or {@code null} if the array
> should be rendered without key
>      */
>     private void writeArray(Class<?> type, Adapter itemConverter, String
> key, Object arrayValue, Collection<String> ignoredProperties,
> JsonPointerTracker jsonPointer) {
> -        final int length = getArrayLength(arrayValue);
> +        final int length = ArrayUtil.getArrayLength(arrayValue);
>         if (length == 0 && config.isSkipEmptyArray()) {
>             return;
>         }
> @@ -582,38 +583,6 @@ public class MappingGeneratorImpl implements
> MappingGenerator {
>         generator.writeEnd();
>     }
> 
> -    private int getArrayLength(Object array) {
> -        // Note: all types of multidimensional arrays are instanceof
> Object[]
> -        if (array instanceof Object[]) {
> -            return ((Object[]) array).length;
> -        }
> -        if (array instanceof boolean[]) {
> -            return ((boolean[])array).length;
> -        }
> -        if (array instanceof byte[]) {
> -            return ((byte[])array).length;
> -        }
> -        if (array instanceof char[]) {
> -            return ((char[]) array).length;
> -        }
> -        if (array instanceof short[]) {
> -            return ((short[]) array).length;
> -        }
> -        if (array instanceof int[]) {
> -            return ((int[]) array).length;
> -        }
> -        if (array instanceof long[]) {
> -            return ((long[]) array).length;
> -        }
> -        if (array instanceof float[]) {
> -            return ((float[]) array).length;
> -        }
> -        if (array instanceof double[]) {
> -            return ((double[]) array).length;
> -        }
> -
> -        throw new IllegalArgumentException("This is not an array! " +
> array);
> -    }
> 
>     private void writeItem(final Object o, final Collection<String>
> ignoredProperties, JsonPointerTracker jsonPointer) {
>         if (o == null) {


Mime
View raw message