/** * Returns a destination object via a provider with the current Mapping's provider used first, * else the TypeMap's property provider, else the TypeMap's provider, else the configuration's * provider. */ @SuppressWarnings("unchecked") private <S, D> D createDestinationViaProvider(MappingContextImpl<S, D> context) { Provider<D> provider = null; if (context.getMapping() != null) { provider = (Provider<D>) context.getMapping().getProvider(); if (provider == null && context.parentTypeMap() != null) provider = (Provider<D>) context.parentTypeMap().getPropertyProvider(); } if (provider == null && context.getTypeMap() != null) provider = context.getTypeMap().getProvider(); if (provider == null && configuration.getProvider() != null) provider = (Provider<D>) configuration.getProvider(); if (provider == null) return null; D destination = provider.get(context); if (destination != null && !context.getDestinationType().isAssignableFrom(destination.getClass())) context.errors.invalidProvidedDestinationInstance(destination, context.getDestinationType()); context.setDestination(destination); return destination; }