Replace java.util.Stack with Deque / ArrayDeque, refine error message. Signed-off-by: Roman Grigoriadi <roman.grigoriadi@oracle.com>
diff --git a/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java b/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java index 18e31d2..c473dbd 100644 --- a/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java +++ b/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java
@@ -23,10 +23,11 @@ import javax.json.stream.JsonLocation; import javax.json.stream.JsonParser; import java.math.BigDecimal; +import java.util.ArrayDeque; import java.util.Arrays; +import java.util.Deque; import java.util.Map; import java.util.Objects; -import java.util.Stack; import java.util.stream.Stream; /** @@ -109,7 +110,7 @@ private final JsonParser jsonParser; - private final Stack<LevelContext> level = new Stack<>(); + private final Deque<LevelContext> level = new ArrayDeque<>(); /** * Creates a parser. @@ -188,7 +189,7 @@ @Override public void moveTo(JsonParser.Event required) { - if (!level.empty() && level.peek().getLastEvent() == required) { + if (!level.isEmpty() && level.peek().getLastEvent() == required) { return; } @@ -211,7 +212,7 @@ } private Event moveTo(Event... events) { - if (!level.empty() && contains(events, level.peek().getLastEvent())) { + if (!level.isEmpty() && contains(events, level.peek().getLastEvent())) { return level.peek().getLastEvent(); }
diff --git a/src/main/java/org/eclipse/yasson/internal/MappingContext.java b/src/main/java/org/eclipse/yasson/internal/MappingContext.java index 0b3cea1..2f3c098 100644 --- a/src/main/java/org/eclipse/yasson/internal/MappingContext.java +++ b/src/main/java/org/eclipse/yasson/internal/MappingContext.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. @@ -12,14 +12,15 @@ ******************************************************************************/ package org.eclipse.yasson.internal; -import org.eclipse.yasson.internal.serializer.ContainerSerializerProvider; import org.eclipse.yasson.internal.model.ClassModel; import org.eclipse.yasson.internal.model.JsonbAnnotatedElement; import org.eclipse.yasson.internal.model.customization.ClassCustomization; +import org.eclipse.yasson.internal.serializer.ContainerSerializerProvider; +import java.util.ArrayDeque; +import java.util.Deque; import java.util.Iterator; import java.util.Objects; -import java.util.Stack; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; @@ -89,7 +90,7 @@ if (classModel != null) { return classModel; } - final Stack<Class> newClassModels = new Stack<>(); + final Deque<Class> newClassModels = new ArrayDeque<>(); for (Class classToParse = clazz; classToParse != Object.class; classToParse = classToParse.getSuperclass()) { if (classToParse == null){ break; @@ -102,7 +103,7 @@ } ClassModel parentClassModel = null; - while (!newClassModels.empty()) { + while (!newClassModels.isEmpty()) { Class toParse = newClassModels.pop(); parentClassModel = classes.computeIfAbsent(toParse, new ParseClassModelFunction(parentClassModel, classParser, jsonbContext)); }
diff --git a/src/main/java/org/eclipse/yasson/internal/VariableTypeInheritanceSearch.java b/src/main/java/org/eclipse/yasson/internal/VariableTypeInheritanceSearch.java index 84791e7..3532f19 100644 --- a/src/main/java/org/eclipse/yasson/internal/VariableTypeInheritanceSearch.java +++ b/src/main/java/org/eclipse/yasson/internal/VariableTypeInheritanceSearch.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. @@ -20,7 +20,8 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.lang.reflect.TypeVariable; -import java.util.Stack; +import java.util.ArrayDeque; +import java.util.Deque; /** * Search for type variable in inheritance hierarchy and resolve if possible. @@ -29,7 +30,7 @@ */ public class VariableTypeInheritanceSearch { - private final Stack<ParameterizedType> parameterizedSubclasses = new Stack<>(); + private final Deque<ParameterizedType> parameterizedSubclasses = new ArrayDeque<>(); /** * Searches the hierarchy of classes to resolve a type variable. If typevar resolved value is another typevar redirection (propagated from wrapping class),
diff --git a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonGeneratorToStructureAdapter.java b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonGeneratorToStructureAdapter.java index d32d42b..ba0871c 100644 --- a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonGeneratorToStructureAdapter.java +++ b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonGeneratorToStructureAdapter.java
@@ -20,7 +20,8 @@ import javax.json.stream.JsonGenerator; import java.math.BigDecimal; import java.math.BigInteger; -import java.util.Stack; +import java.util.ArrayDeque; +import java.util.Deque; /** * Adapter for {@link JsonGenerator}, that builds a {@link JsonStructure} content tree instead of JSON text. @@ -31,7 +32,7 @@ */ public class JsonGeneratorToStructureAdapter implements JsonGenerator { - private final Stack<JsonStructureBuilder> builders; + private final Deque<JsonStructureBuilder> builders; private JsonStructure root; @@ -43,7 +44,7 @@ * @param provider Cached json provider to create builders on. */ public JsonGeneratorToStructureAdapter(JsonProvider provider) { - this.builders = new Stack<>(); + this.builders = new ArrayDeque<>(); this.provider = provider; } @@ -131,7 +132,8 @@ JsonStructureBuilder current = builders.peek(); if (!(current instanceof JsonObjectBuilder)) { throw new JsonbException(Messages.getMessage( - MessageKeys.INTERNAL_ERROR, "Can't write key [" + keyName + "] into " + current.getClass())); + MessageKeys.INTERNAL_ERROR, "Can't write key [" + keyName + "] into " + current.getClass() + + "because "+current.getClass() + " is not an instance of "+ JsonObjectBuilder.class)); } return (JsonObjectBuilder) current; }
diff --git a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java index 50c4592..1041473 100644 --- a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java +++ b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java
@@ -19,7 +19,8 @@ import javax.json.stream.JsonLocation; import javax.json.stream.JsonParser; import java.math.BigDecimal; -import java.util.Stack; +import java.util.ArrayDeque; +import java.util.Deque; /** * Adapter for {@link JsonParser}, that reads a {@link JsonStructure} content tree instead of JSON text. @@ -30,7 +31,7 @@ */ public class JsonStructureToParserAdapter implements JsonParser { - private Stack<JsonStructureIterator> iterators = new Stack<>(); + private Deque<JsonStructureIterator> iterators = new ArrayDeque<>(); private final JsonStructure rootStructure;