@@ -574,44 +574,55 @@ public NullToleranceTest build() {
574574 }
575575
576576 private void addDefaultTypeValues () {
577- final Customizer <String > stringCustomizer = new Customizer <>(STRING_DEFAULT_VALUE , defaultValues );
578- final Customizer <Queue > queueCustomizer = new Customizer <>(newPriorityQueue (), defaultValues );
579- final Customizer <Set > setCustomizer = new Customizer <>(emptySet (), defaultValues );
580- final Customizer <List > listCustomizer = new Customizer <>(emptyList (), defaultValues );
581- final Customizer <Map > mapCustomizer = new Customizer <>(emptyMap (), defaultValues );
582- final String defaultStringValue = stringCustomizer .getCustomizedValue (String .class );
583- defaultValues .put (String .class , defaultStringValue );
584- final Queue <?> defaultQueue = queueCustomizer .getCustomizedValue (Queue .class );
585- defaultValues .put (Queue .class , defaultQueue );
586- final Set <?> defaultSet = setCustomizer .getCustomizedValue (Set .class );
587- defaultValues .put (Set .class , defaultSet );
588- final List <?> defaultList = listCustomizer .getCustomizedValue (List .class );
589- defaultValues .put (List .class , defaultList );
590- final Map <?, ?> defaultMap = mapCustomizer .getCustomizedValue (Map .class );
591- defaultValues .put (Map .class , defaultMap );
577+ final DefaultValueCustomizer <String > stringCustomizer =
578+ new DefaultValueCustomizer <>(STRING_DEFAULT_VALUE , defaultValues );
579+ stringCustomizer .customize (String .class );
580+
581+ final DefaultValueCustomizer <Queue > queueCustomizer =
582+ new DefaultValueCustomizer <>(newPriorityQueue (), defaultValues );
583+ queueCustomizer .customize (Queue .class );
584+
585+ final DefaultValueCustomizer <Set > setCustomizer =
586+ new DefaultValueCustomizer <>(emptySet (), defaultValues );
587+ setCustomizer .customize (Set .class );
588+
589+ final DefaultValueCustomizer <List > listCustomizer =
590+ new DefaultValueCustomizer <>(emptyList (), defaultValues );
591+ listCustomizer .customize (List .class );
592+
593+ final DefaultValueCustomizer <Map > mapCustomizer =
594+ new DefaultValueCustomizer <>(emptyMap (), defaultValues );
595+ mapCustomizer .customize (Map .class );
592596 }
593597 }
594598
595- private static class Customizer <T > {
599+ /**
600+ * Customizes the default value for the provided type.
601+ */
602+ private static class DefaultValueCustomizer <T > {
596603 private final T defaultValue ;
597- private final Map <Class <?>, ?> defaultValues ;
604+ private final Map <Class <?>, ? super Object > defaultValues ;
598605
599- <B extends T > Customizer (B defaultValue , Map <Class <?>, ?> defaultValues ) {
606+ private <B extends T > DefaultValueCustomizer (B defaultValue , Map <Class <?>, ? super Object > defaultValues ) {
600607 this .defaultValue = defaultValue ;
601608 this .defaultValues = defaultValues ;
602609 }
603610
604- T getCustomizedValue (Class <T > typeOfInterest ) {
611+ /**
612+ * Adds the {@code defaultValue} for the {@code typeOfInterest},
613+ * if no default value has been set.
614+ *
615+ * @param typeOfInterest the type for which will be provided default value
616+ */
617+ private void customize (Class <T > typeOfInterest ) {
605618 for (Map .Entry <Class <?>, ?> entry : defaultValues .entrySet ()) {
606619 final boolean customValuePresent = typeOfInterest .isAssignableFrom (entry .getKey ());
607620 if (customValuePresent ) {
608- @ SuppressWarnings ("unchecked" ) // It's OK, since we check for the type compliance above.
609- final T result = (T ) entry .getValue ();
610- return result ;
621+ return ;
611622 }
612623 }
613- return defaultValue ;
624+
625+ defaultValues .put (typeOfInterest , defaultValue );
614626 }
615627 }
616-
617628}
0 commit comments