@@ -14,31 +14,38 @@ public class DatatypeFeatures
1414
1515 protected final static int FEATURE_INDEX_ENUM = 0 ;
1616 protected final static int FEATURE_INDEX_JSON_NODE = 1 ;
17+ protected final static int FEATURE_INDEX_DATETIME = 2 ;
1718
18- private final int _enabledFor1 , _enabledFor2 ;
19+ private final int _enabledFor1 , _enabledFor2 , _enabledFor3 ;
1920
20- private final int _explicitFor1 , _explicitFor2 ;
21+ private final int _explicitFor1 , _explicitFor2 , _explicitFor3 ;
2122
2223 protected DatatypeFeatures (int enabledFor1 , int explicitFor1 ,
23- int enabledFor2 , int explicitFor2 ) {
24+ int enabledFor2 , int explicitFor2 ,
25+ int enabledFor3 , int explicitFor3 ) {
2426 _enabledFor1 = enabledFor1 ;
2527 _explicitFor1 = explicitFor1 ;
2628 _enabledFor2 = enabledFor2 ;
2729 _explicitFor2 = explicitFor2 ;
30+ _enabledFor3 = enabledFor3 ;
31+ _explicitFor3 = explicitFor3 ;
2832 }
2933
3034 public static DatatypeFeatures defaultFeatures () {
3135 return DefaultHolder .getDefault ();
3236 }
3337
3438 private DatatypeFeatures _with (int enabledFor1 , int explicitFor1 ,
35- int enabledFor2 , int explicitFor2 ) {
39+ int enabledFor2 , int explicitFor2 ,
40+ int enabledFor3 , int explicitFor3 ) {
3641 if ((_enabledFor1 == enabledFor1 ) && (_explicitFor1 == explicitFor1 )
37- && (_enabledFor2 == enabledFor2 ) && (_explicitFor2 == explicitFor2 )) {
42+ && (_enabledFor2 == enabledFor2 ) && (_explicitFor2 == explicitFor2 )
43+ && (_enabledFor3 == enabledFor3 ) && (_explicitFor3 == explicitFor3 )) {
3844 return this ;
3945 }
4046 return new DatatypeFeatures (enabledFor1 , explicitFor1 ,
41- enabledFor2 , explicitFor2 );
47+ enabledFor2 , explicitFor2 ,
48+ enabledFor3 , explicitFor3 );
4249 }
4350
4451 /*
@@ -61,10 +68,16 @@ public DatatypeFeatures with(DatatypeFeature f) {
6168 switch (f .featureIndex ()) {
6269 case 0 :
6370 return _with (_enabledFor1 | mask , _explicitFor1 | mask ,
64- _enabledFor2 , _explicitFor2 );
71+ _enabledFor2 , _explicitFor2 ,
72+ _enabledFor3 , _explicitFor3 );
6573 case 1 :
6674 return _with (_enabledFor1 , _explicitFor1 ,
67- _enabledFor2 | mask , _explicitFor2 | mask );
75+ _enabledFor2 | mask , _explicitFor2 | mask ,
76+ _enabledFor3 , _explicitFor3 );
77+ case 2 :
78+ return _with (_enabledFor1 , _explicitFor1 ,
79+ _enabledFor2 , _explicitFor2 ,
80+ _enabledFor3 | mask , _explicitFor3 | mask );
6881 default :
6982 VersionUtil .throwInternal ();
7083 return this ;
@@ -88,10 +101,16 @@ public DatatypeFeatures withFeatures(DatatypeFeature... features) {
88101 switch (features [0 ].featureIndex ()) {
89102 case 0 :
90103 return _with (_enabledFor1 | mask , _explicitFor1 | mask ,
91- _enabledFor2 , _explicitFor2 );
104+ _enabledFor2 , _explicitFor2 ,
105+ _enabledFor3 , _explicitFor3 );
92106 case 1 :
93107 return _with (_enabledFor1 , _explicitFor1 ,
94- _enabledFor2 | mask , _explicitFor2 | mask );
108+ _enabledFor2 | mask , _explicitFor2 | mask ,
109+ _enabledFor3 , _explicitFor3 );
110+ case 2 :
111+ return _with (_enabledFor1 , _explicitFor1 ,
112+ _enabledFor2 , _explicitFor2 ,
113+ _enabledFor3 | mask , _explicitFor3 | mask );
95114 default :
96115 VersionUtil .throwInternal ();
97116 return this ;
@@ -112,10 +131,16 @@ public DatatypeFeatures without(DatatypeFeature f) {
112131 switch (f .featureIndex ()) {
113132 case 0 :
114133 return _with (_enabledFor1 & ~mask , _explicitFor1 | mask ,
115- _enabledFor2 , _explicitFor2 );
134+ _enabledFor2 , _explicitFor2 ,
135+ _enabledFor3 , _explicitFor3 );
116136 case 1 :
117137 return _with (_enabledFor1 , _explicitFor1 ,
118- _enabledFor2 & ~mask , _explicitFor2 | mask );
138+ _enabledFor2 & ~mask , _explicitFor2 | mask ,
139+ _enabledFor3 , _explicitFor3 );
140+ case 2 :
141+ return _with (_enabledFor1 , _explicitFor1 ,
142+ _enabledFor2 , _explicitFor2 ,
143+ _enabledFor3 & ~mask , _explicitFor3 | mask );
119144 default :
120145 VersionUtil .throwInternal ();
121146 return this ;
@@ -139,10 +164,16 @@ public DatatypeFeatures withoutFeatures(DatatypeFeature... features) {
139164 switch (features [0 ].featureIndex ()) {
140165 case 0 :
141166 return _with (_enabledFor1 & ~mask , _explicitFor1 | mask ,
142- _enabledFor2 , _explicitFor2 );
167+ _enabledFor2 , _explicitFor2 ,
168+ _enabledFor3 , _explicitFor3 );
143169 case 1 :
144170 return _with (_enabledFor1 , _explicitFor1 ,
145- _enabledFor2 & ~mask , _explicitFor2 | mask );
171+ _enabledFor2 & ~mask , _explicitFor2 | mask ,
172+ _enabledFor3 , _explicitFor3 );
173+ case 2 :
174+ return _with (_enabledFor1 , _explicitFor1 ,
175+ _enabledFor2 , _explicitFor2 ,
176+ _enabledFor3 & ~mask , _explicitFor3 | mask );
146177 default :
147178 VersionUtil .throwInternal ();
148179 return this ;
@@ -179,6 +210,8 @@ public boolean isEnabled(DatatypeFeature f) {
179210 return f .enabledIn (_enabledFor1 );
180211 case 1 :
181212 return f .enabledIn (_enabledFor2 );
213+ case 2 :
214+ return f .enabledIn (_enabledFor3 );
182215 default :
183216 VersionUtil .throwInternal ();
184217 return false ;
@@ -200,6 +233,8 @@ public boolean isExplicitlySet(DatatypeFeature f) {
200233 return f .enabledIn (_explicitFor1 );
201234 case 1 :
202235 return f .enabledIn (_explicitFor2 );
236+ case 2 :
237+ return f .enabledIn (_explicitFor3 );
203238 default :
204239 VersionUtil .throwInternal ();
205240 return false ;
@@ -215,15 +250,15 @@ public boolean isExplicitlySet(DatatypeFeature f) {
215250 * @param f Feature to check
216251 *
217252 * @return Whether given feature has been explicitly enabled
218- *
219- * @since 2.15
220253 */
221254 public boolean isExplicitlyEnabled (DatatypeFeature f ) {
222255 switch (f .featureIndex ()) {
223256 case 0 :
224257 return f .enabledIn (_explicitFor1 & _enabledFor1 );
225258 case 1 :
226259 return f .enabledIn (_explicitFor2 & _enabledFor2 );
260+ case 2 :
261+ return f .enabledIn (_explicitFor3 & _enabledFor3 );
227262 default :
228263 VersionUtil .throwInternal ();
229264 return false ;
@@ -239,15 +274,15 @@ public boolean isExplicitlyEnabled(DatatypeFeature f) {
239274 * @param f Feature to check
240275 *
241276 * @return Whether given feature has been explicitly disabled
242- *
243- * @since 2.15
244277 */
245278 public boolean isExplicitlyDisabled (DatatypeFeature f ) {
246279 switch (f .featureIndex ()) {
247280 case 0 :
248281 return f .enabledIn (_explicitFor1 & ~_enabledFor1 );
249282 case 1 :
250283 return f .enabledIn (_explicitFor2 & ~_enabledFor2 );
284+ case 2 :
285+ return f .enabledIn (_explicitFor3 & ~_enabledFor3 );
251286 default :
252287 VersionUtil .throwInternal ();
253288 return false ;
@@ -276,6 +311,11 @@ public Boolean getExplicitState(DatatypeFeature f) {
276311 return f .enabledIn (_enabledFor2 );
277312 }
278313 return null ;
314+ case 2 :
315+ if (f .enabledIn (_explicitFor3 )) {
316+ return f .enabledIn (_enabledFor3 );
317+ }
318+ return null ;
279319 default :
280320 VersionUtil .throwInternal ();
281321 return null ;
@@ -298,7 +338,8 @@ private static class DefaultHolder
298338 static {
299339 DEFAULT_FEATURES = new DatatypeFeatures (
300340 collectDefaults (EnumFeature .values ()), 0 ,
301- collectDefaults (JsonNodeFeature .values ()), 0
341+ collectDefaults (JsonNodeFeature .values ()), 0 ,
342+ collectDefaults (DateTimeFeature .values ()), 0
302343 );
303344 }
304345
0 commit comments