Will do. LieGrue, strub
> Am 29.07.2019 um 23:12 schrieb Romain Manni-Bucau <[email protected]>: > > 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 : <[email protected]> > Date: lun. 29 juil. 2019 à 23:08 > Subject: [johnzon] branch master updated: JOHNZON-226 use own Array.length > To: [email protected] <[email protected]> > > > 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 <[email protected]> > 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) {
