Skip to content

Package: DeserializationContextImpl

DeserializationContextImpl

nameinstructionbranchcomplexitylinemethod
DeserializationContextImpl(DeserializationContextImpl)
M: 17 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 5 C: 0
0%
M: 1 C: 0
0%
DeserializationContextImpl(JsonbContext)
M: 12 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 4 C: 0
0%
M: 1 C: 0
0%
checkState()
M: 10 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
deserialize(Class, JsonParser)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
deserialize(Type, JsonParser)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
deserializeItem(Type, JsonParser)
M: 38 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 9 C: 0
0%
M: 1 C: 0
0%
getCustomization()
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getDeferredDeserializers()
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getInstance()
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getLastValueEvent()
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
setCustomization(Customization)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
setInstance(Object)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
setLastValueEvent(JsonParser.Event)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*
2: * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
3: *
4: * This program and the accompanying materials are made available under the
5: * terms of the Eclipse Public License v. 2.0 which is available at
6: * http://www.eclipse.org/legal/epl-2.0,
7: * or the Eclipse Distribution License v. 1.0 which is available at
8: * http://www.eclipse.org/org/documents/edl-v10.php.
9: *
10: * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
11: */
12:
13: package org.eclipse.yasson.internal;
14:
15: import java.lang.reflect.Type;
16: import java.util.ArrayList;
17: import java.util.List;
18:
19: import jakarta.json.bind.JsonbException;
20: import jakarta.json.bind.serializer.DeserializationContext;
21: import jakarta.json.stream.JsonParser;
22:
23: import org.eclipse.yasson.internal.deserializer.ModelDeserializer;
24: import org.eclipse.yasson.internal.model.customization.ClassCustomization;
25: import org.eclipse.yasson.internal.model.customization.Customization;
26: import org.eclipse.yasson.internal.properties.MessageKeys;
27: import org.eclipse.yasson.internal.properties.Messages;
28:
29: /**
30: * Deserialization context implementation.
31: */
32: public class DeserializationContextImpl extends ProcessingContext implements DeserializationContext {
33: private final List<Runnable> delayedSetters = new ArrayList<>();
34: private JsonParser.Event lastValueEvent;
35: private Customization customization = ClassCustomization.empty();
36: private Object instance;
37:
38: /**
39: * Parent instance for marshaller and unmarshaller.
40: *
41: * @param jsonbContext context of Jsonb
42: */
43: public DeserializationContextImpl(JsonbContext jsonbContext) {
44: super(jsonbContext);
45: }
46:
47: /**
48: * Create new instance based on previous context.
49: *
50: * @param context previous deserialization context
51: */
52: public DeserializationContextImpl(DeserializationContextImpl context) {
53: super(context.getJsonbContext());
54: this.lastValueEvent = context.lastValueEvent;
55: }
56:
57: /**
58: * Return instance of currently deserialized type.
59: *
60: * @return null if instance has not been created yet
61: */
62: public Object getInstance() {
63: return instance;
64: }
65:
66: /**
67: * Set currently deserialized type instance.
68: *
69: * @param instance deserialized type instance
70: */
71: public void setInstance(Object instance) {
72: this.instance = instance;
73: }
74:
75: /**
76: * Return the list of deferred deserializers.
77: *
78: * @return list of deferred deserializers
79: */
80: public List<Runnable> getDeferredDeserializers() {
81: return delayedSetters;
82: }
83:
84: /**
85: * Return last obtained {@link JsonParser.Event} event.
86: *
87: * @return last obtained event
88: */
89: public JsonParser.Event getLastValueEvent() {
90: return lastValueEvent;
91: }
92:
93: /**
94: * Set last obtained {@link JsonParser.Event} event.
95: *
96: * @param lastValueEvent last obtained event
97: */
98: public void setLastValueEvent(JsonParser.Event lastValueEvent) {
99: this.lastValueEvent = lastValueEvent;
100: }
101:
102: /**
103: * Return customization used by currently processed user defined deserializer.
104: *
105: * @return currently used customization
106: */
107: public Customization getCustomization() {
108: return customization;
109: }
110:
111: /**
112: * Set customization used by currently processed user defined deserializer.
113: *
114: * @param customization currently used customization
115: */
116: public void setCustomization(Customization customization) {
117: this.customization = customization;
118: }
119:
120: @Override
121: public <T> T deserialize(Class<T> clazz, JsonParser parser) {
122: return deserializeItem(clazz, parser);
123: }
124:
125: @Override
126: public <T> T deserialize(Type type, JsonParser parser) {
127: return deserializeItem(type, parser);
128: }
129:
130: @SuppressWarnings("unchecked")
131: private <T> T deserializeItem(Type type, JsonParser parser) {
132: try {
133:• if (lastValueEvent == null) {
134: lastValueEvent = parser.next();
135: checkState();
136: }
137: ModelDeserializer<JsonParser> modelDeserializer = getJsonbContext().getChainModelCreator().deserializerChain(type);
138: return (T) modelDeserializer.deserialize(parser, this);
139: } catch (JsonbException e) {
140: throw e;
141: } catch (RuntimeException e) {
142: throw new JsonbException(Messages.getMessage(MessageKeys.INTERNAL_ERROR, e.getMessage()), e);
143: }
144: }
145:
146: private void checkState() {
147:• if (lastValueEvent == JsonParser.Event.KEY_NAME) {
148: throw new JsonbException("JsonParser has incorrect position as the first event: KEY_NAME");
149: }
150: }
151:
152: }