@@ -157,37 +157,40 @@ public void addBooleanCreator(AnnotatedWithParams creator,
157
157
public void addDelegatingCreator (AnnotatedWithParams creator ,
158
158
boolean explicit , SettableBeanProperty [] injectables ) {
159
159
if (creator .getParameterType (0 ).isCollectionLikeType ()) {
160
- verifyNonDup (creator , C_ARRAY_DELEGATE , explicit );
161
- _arrayDelegateArgs = injectables ;
160
+ if (verifyNonDup (creator , C_ARRAY_DELEGATE , explicit )) {
161
+ _arrayDelegateArgs = injectables ;
162
+ }
162
163
} else {
163
- verifyNonDup (creator , C_DELEGATE , explicit );
164
- _delegateArgs = injectables ;
164
+ if (verifyNonDup (creator , C_DELEGATE , explicit )) {
165
+ _delegateArgs = injectables ;
166
+ }
165
167
}
166
168
}
167
169
168
170
public void addPropertyCreator (AnnotatedWithParams creator ,
169
171
boolean explicit , SettableBeanProperty [] properties ) {
170
- verifyNonDup (creator , C_PROPS , explicit );
171
- // Better ensure we have no duplicate names either...
172
- if (properties .length > 1 ) {
173
- HashMap <String , Integer > names = new HashMap <String , Integer >();
174
- for (int i = 0 , len = properties .length ; i < len ; ++i ) {
175
- String name = properties [i ].getName ();
176
- // Need to consider Injectables, which may not have
177
- // a name at all, and need to be skipped
178
- if (name .length () == 0
179
- && properties [i ].getInjectableValueId () != null ) {
180
- continue ;
181
- }
182
- Integer old = names .put (name , Integer .valueOf (i ));
183
- if (old != null ) {
184
- throw new IllegalArgumentException (String .format (
185
- "Duplicate creator property \" %s\" (index %s vs %d)" ,
186
- name , old , i ));
172
+ if (verifyNonDup (creator , C_PROPS , explicit )) {
173
+ // Better ensure we have no duplicate names either...
174
+ if (properties .length > 1 ) {
175
+ HashMap <String , Integer > names = new HashMap <String , Integer >();
176
+ for (int i = 0 , len = properties .length ; i < len ; ++i ) {
177
+ String name = properties [i ].getName ();
178
+ // Need to consider Injectables, which may not have
179
+ // a name at all, and need to be skipped
180
+ if (name .length () == 0
181
+ && properties [i ].getInjectableValueId () != null ) {
182
+ continue ;
183
+ }
184
+ Integer old = names .put (name , Integer .valueOf (i ));
185
+ if (old != null ) {
186
+ throw new IllegalArgumentException (String .format (
187
+ "Duplicate creator property \" %s\" (index %s vs %d)" ,
188
+ name , old , i ));
189
+ }
187
190
}
188
191
}
192
+ _propertyBasedArgs = properties ;
189
193
}
190
- _propertyBasedArgs = properties ;
191
194
}
192
195
193
196
public void addIncompeteParameter (AnnotatedParameter parameter ) {
@@ -292,20 +295,21 @@ private <T extends AnnotatedMember> T _fixAccess(T member) {
292
295
return member ;
293
296
}
294
297
295
- protected void verifyNonDup (AnnotatedWithParams newOne , int typeIndex ,
296
- boolean explicit ) {
298
+ /**
299
+ * @return True if specified Creator is to be used
300
+ */
301
+ protected boolean verifyNonDup (AnnotatedWithParams newOne , int typeIndex , boolean explicit )
302
+ {
297
303
final int mask = (1 << typeIndex );
298
304
_hasNonDefaultCreator = true ;
299
305
AnnotatedWithParams oldOne = _creators [typeIndex ];
300
306
// already had an explicitly marked one?
301
307
if (oldOne != null ) {
302
308
boolean verify ;
303
-
304
- if ((_explicitCreators & mask ) != 0 ) { // already had explicitly
305
- // annotated, leave as-is
309
+ if ((_explicitCreators & mask ) != 0 ) { // already had explicitly annotated, leave as-is
306
310
// but skip, if new one not annotated
307
311
if (!explicit ) {
308
- return ;
312
+ return false ;
309
313
}
310
314
// both explicit: verify
311
315
verify = true ;
@@ -327,7 +331,7 @@ protected void verifyNonDup(AnnotatedWithParams newOne, int typeIndex,
327
331
// other implicit
328
332
// creator (`fromString()`)
329
333
if (_isEnumValueOf (newOne )) {
330
- return ; // ignore
334
+ return false ; // ignore
331
335
}
332
336
if (_isEnumValueOf (oldOne )) {
333
337
;
@@ -343,7 +347,7 @@ protected void verifyNonDup(AnnotatedWithParams newOne, int typeIndex,
343
347
// otherwise, which one to choose?
344
348
else if (newType .isAssignableFrom (oldType )) {
345
349
// new type more generic, use old
346
- return ;
350
+ return false ;
347
351
}
348
352
// new type more specific, use it
349
353
}
@@ -352,6 +356,7 @@ else if (newType.isAssignableFrom(oldType)) {
352
356
_explicitCreators |= mask ;
353
357
}
354
358
_creators [typeIndex ] = _fixAccess (newOne );
359
+ return true ;
355
360
}
356
361
357
362
/**
@@ -365,8 +370,9 @@ protected boolean _isEnumValueOf(AnnotatedWithParams creator) {
365
370
}
366
371
367
372
/*
368
- * /********************************************************** /* Helper
369
- * class(es) /**********************************************************
373
+ /**********************************************************
374
+ /* Helper class(es)
375
+ /**********************************************************
370
376
*/
371
377
372
378
/**
0 commit comments