@@ -162,36 +162,39 @@ public void addDelegatingCreator(AnnotatedWithParams creator, boolean explicit,
162
162
SettableBeanProperty [] injectables )
163
163
{
164
164
if (creator .getParameterType (0 ).isCollectionLikeType ()) {
165
- verifyNonDup (creator , C_ARRAY_DELEGATE , explicit );
166
- _arrayDelegateArgs = injectables ;
165
+ if (verifyNonDup (creator , C_ARRAY_DELEGATE , explicit )) {
166
+ _arrayDelegateArgs = injectables ;
167
+ }
167
168
} else {
168
- verifyNonDup (creator , C_DELEGATE , explicit );
169
- _delegateArgs = injectables ;
169
+ if (verifyNonDup (creator , C_DELEGATE , explicit )) {
170
+ _delegateArgs = injectables ;
171
+ }
170
172
}
171
173
}
172
174
173
175
public void addPropertyCreator (AnnotatedWithParams creator , boolean explicit ,
174
176
SettableBeanProperty [] properties )
175
177
{
176
- verifyNonDup (creator , C_PROPS , explicit );
177
- // Better ensure we have no duplicate names either...
178
- if (properties .length > 1 ) {
179
- HashMap <String ,Integer > names = new HashMap <String ,Integer >();
180
- for (int i = 0 , len = properties .length ; i < len ; ++i ) {
181
- String name = properties [i ].getName ();
182
- /* [Issue-13]: Need to consider Injectables, which may not have
183
- * a name at all, and need to be skipped
184
- */
185
- if (name .length () == 0 && properties [i ].getInjectableValueId () != null ) {
186
- continue ;
187
- }
188
- Integer old = names .put (name , Integer .valueOf (i ));
189
- if (old != null ) {
190
- throw new IllegalArgumentException ("Duplicate creator property \" " +name +"\" (index " +old +" vs " +i +")" );
178
+ if (verifyNonDup (creator , C_PROPS , explicit )) {
179
+ // Better ensure we have no duplicate names either...
180
+ if (properties .length > 1 ) {
181
+ HashMap <String ,Integer > names = new HashMap <String ,Integer >();
182
+ for (int i = 0 , len = properties .length ; i < len ; ++i ) {
183
+ String name = properties [i ].getName ();
184
+ /* [Issue-13]: Need to consider Injectables, which may not have
185
+ * a name at all, and need to be skipped
186
+ */
187
+ if (name .length () == 0 && properties [i ].getInjectableValueId () != null ) {
188
+ continue ;
189
+ }
190
+ Integer old = names .put (name , Integer .valueOf (i ));
191
+ if (old != null ) {
192
+ throw new IllegalArgumentException ("Duplicate creator property \" " +name +"\" (index " +old +" vs " +i +")" );
193
+ }
191
194
}
192
195
}
196
+ _propertyBasedArgs = properties ;
193
197
}
194
- _propertyBasedArgs = properties ;
195
198
}
196
199
197
200
public void addIncompeteParameter (AnnotatedParameter parameter ) {
@@ -293,19 +296,21 @@ private <T extends AnnotatedMember> T _fixAccess(T member)
293
296
return member ;
294
297
}
295
298
296
- protected void verifyNonDup (AnnotatedWithParams newOne , int typeIndex , boolean explicit )
299
+ /**
300
+ * @return True if specified Creator is to be used
301
+ */
302
+ protected boolean verifyNonDup (AnnotatedWithParams newOne , int typeIndex , boolean explicit )
297
303
{
298
304
final int mask = (1 << typeIndex );
299
305
_hasNonDefaultCreator = true ;
300
306
AnnotatedWithParams oldOne = _creators [typeIndex ];
301
307
// already had an explicitly marked one?
302
308
if (oldOne != null ) {
303
309
boolean verify ;
304
-
305
310
if ((_explicitCreators & mask ) != 0 ) { // already had explicitly annotated, leave as-is
306
311
// but skip, if new one not annotated
307
312
if (!explicit ) {
308
- return ;
313
+ return false ;
309
314
}
310
315
// both explicit: verify
311
316
verify = true ;
@@ -327,7 +332,7 @@ protected void verifyNonDup(AnnotatedWithParams newOne, int typeIndex, boolean e
327
332
// otherwise, which one to choose?
328
333
if (newType .isAssignableFrom (oldType )) {
329
334
// new type more generic, use old
330
- return ;
335
+ return false ;
331
336
}
332
337
// new type more specific, use it
333
338
}
@@ -336,6 +341,7 @@ protected void verifyNonDup(AnnotatedWithParams newOne, int typeIndex, boolean e
336
341
_explicitCreators |= mask ;
337
342
}
338
343
_creators [typeIndex ] = _fixAccess (newOne );
344
+ return true ;
339
345
}
340
346
341
347
/*
0 commit comments