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;