public <T> T instantiate(final Class<T> clazz, final ProviderContext providerContext) { try { for ( final CustomClassConstructor constructor : customClassConstructors ) if ( constructor.isAbleToInstantiate( clazz, providerContext ) ) return constructor.instantiate( clazz, providerContext ); } catch ( final Exception cause ) { if ( !isAbstract( clazz.getModifiers() ) && !isInterface( clazz.getModifiers() )) { throw new RuntimeException( "Can't instantiate " + clazz + ": " + cause.getMessage(), cause ); } } return null; }