Skip to content

Package: BuiltInTypes

BuiltInTypes

nameinstructionbranchcomplexitylinemethod
BuiltInTypes()
M: 7 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
findIfClassIsSupported(Class)
M: 15 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 6 C: 0
0%
M: 1 C: 0
0%
isClassAvailable(String)
M: 8 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 4 C: 0
0%
M: 1 C: 0
0%
isKnownType(Class)
M: 32 C: 0
0%
M: 14 C: 0
0%
M: 8 C: 0
0%
M: 6 C: 0
0%
M: 1 C: 0
0%
static {...}
M: 190 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 49 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.math.BigDecimal;
16: import java.math.BigInteger;
17: import java.net.URI;
18: import java.net.URL;
19: import java.nio.file.Path;
20: import java.time.Duration;
21: import java.time.Instant;
22: import java.time.LocalDate;
23: import java.time.LocalDateTime;
24: import java.time.LocalTime;
25: import java.time.OffsetDateTime;
26: import java.time.OffsetTime;
27: import java.time.Period;
28: import java.time.ZoneId;
29: import java.time.ZoneOffset;
30: import java.time.ZonedDateTime;
31: import java.util.Calendar;
32: import java.util.Collection;
33: import java.util.Date;
34: import java.util.HashSet;
35: import java.util.Map;
36: import java.util.Optional;
37: import java.util.OptionalDouble;
38: import java.util.OptionalInt;
39: import java.util.OptionalLong;
40: import java.util.Set;
41: import java.util.TimeZone;
42: import java.util.UUID;
43:
44: import javax.xml.datatype.XMLGregorianCalendar;
45:
46: import jakarta.json.JsonValue;
47:
48: /**
49: * Types which are supported by the Yasson by default.
50: */
51: public class BuiltInTypes {
52:
53: private static final Set<Class<?>> BUILD_IN_SUPPORT;
54:
55: static {
56: Set<Class<?>> buildInTypes = new HashSet<>();
57: buildInTypes.add(Byte.class);
58: buildInTypes.add(Byte.TYPE);
59: buildInTypes.add(BigDecimal.class);
60: buildInTypes.add(BigInteger.class);
61: buildInTypes.add(Boolean.class);
62: buildInTypes.add(Boolean.TYPE);
63: buildInTypes.add(Calendar.class);
64: buildInTypes.add(Character.class);
65: buildInTypes.add(Character.TYPE);
66: buildInTypes.add(Date.class);
67: buildInTypes.add(Double.class);
68: buildInTypes.add(Double.TYPE);
69: buildInTypes.add(Duration.class);
70: buildInTypes.add(Float.class);
71: buildInTypes.add(Float.TYPE);
72: buildInTypes.add(Integer.class);
73: buildInTypes.add(Integer.TYPE);
74: buildInTypes.add(Instant.class);
75: buildInTypes.add(LocalDateTime.class);
76: buildInTypes.add(LocalDate.class);
77: buildInTypes.add(LocalTime.class);
78: buildInTypes.add(Long.class);
79: buildInTypes.add(Long.TYPE);
80: buildInTypes.add(Number.class);
81: buildInTypes.add(OffsetDateTime.class);
82: buildInTypes.add(OffsetTime.class);
83: buildInTypes.add(OptionalDouble.class);
84: buildInTypes.add(OptionalInt.class);
85: buildInTypes.add(OptionalLong.class);
86: buildInTypes.add(Path.class);
87: buildInTypes.add(Period.class);
88: buildInTypes.add(Short.class);
89: buildInTypes.add(Short.TYPE);
90: buildInTypes.add(String.class);
91: buildInTypes.add(TimeZone.class);
92: buildInTypes.add(URI.class);
93: buildInTypes.add(URL.class);
94: buildInTypes.add(UUID.class);
95:• if (isClassAvailable("javax.xml.datatype.XMLGregorianCalendar")) {
96: buildInTypes.add(XMLGregorianCalendar.class);
97: }
98: buildInTypes.add(ZonedDateTime.class);
99: buildInTypes.add(ZoneId.class);
100: buildInTypes.add(ZoneOffset.class);
101:• if (isClassAvailable("java.sql.Date")) {
102: buildInTypes.add(java.sql.Date.class);
103: buildInTypes.add(java.sql.Timestamp.class);
104: }
105: BUILD_IN_SUPPORT = Set.copyOf(buildInTypes);
106: }
107:
108: private BuiltInTypes() {
109: throw new IllegalStateException("Util class cannot be instantiated");
110: }
111:
112: /**
113: * Check whether the class is available.
114: *
115: * @param className name of the checked class
116: * @return true if available, otherwise false
117: */
118: public static boolean isClassAvailable(String className) {
119: try {
120: Class.forName(className);
121: return true;
122: } catch (ClassNotFoundException | LinkageError e) {
123: return false;
124: }
125: }
126:
127: /**
128: * Whether the type is a supported type by default.
129: *
130: * @param clazz type to check
131: * @return whether is supported
132: */
133: public static boolean isKnownType(Class<?> clazz) {
134:• boolean knownContainerValueType = Collection.class.isAssignableFrom(clazz)
135:• || Map.class.isAssignableFrom(clazz)
136:• || JsonValue.class.isAssignableFrom(clazz)
137:• || Optional.class.isAssignableFrom(clazz)
138:• || clazz.isArray();
139:
140:• return knownContainerValueType || findIfClassIsSupported(clazz);
141: }
142:
143: private static boolean findIfClassIsSupported(Class<?> clazz) {
144: Class<?> current = clazz;
145: do {
146:• if (BUILD_IN_SUPPORT.contains(current)) {
147: return true;
148: }
149: current = current.getSuperclass();
150:• } while (current != null);
151: return false;
152: }
153: }