/** * Close the given {@code closeables} <strong>immediately</strong>, * swallowing any throwable in order to * {@link Throwable#addSuppressed(Throwable) add it as suppressed} to the main throwable. *<p> * See also {@link #pushAll(ClosingOperator, Object[])} * for when the objects to close do not implement {@link AutoCloseable}. * * @param closeables An iterable of {@link AutoCloseable}s to close. * @return {@code this}, for method chaining. */ public SuppressingCloser pushAll(Iterable<? extends AutoCloseable> closeables) { return pushAll( AutoCloseable::close, closeables ); }
/** * Close the given {@code closeables} <strong>immediately</strong>, * swallowing any throwable in order to * {@link Throwable#addSuppressed(Throwable) add it as suppressed} to the main throwable. *<p> * See also {@link #pushAll(ClosingOperator, Object[])} * for when the objects to close do not implement {@link AutoCloseable}. * * @param closeables An array of {@link AutoCloseable}s to close. * @return {@code this}, for method chaining. */ public SuppressingCloser pushAll(AutoCloseable ... closeables) { return pushAll( AutoCloseable::close, closeables ); }
private Collection<PojoIndexingProcessor<? super V>> doBuild( PojoIndexingDependencyCollectorPropertyNode<?, P> parentDependencyCollector) { PojoIndexingDependencyCollectorValueNode<P, V> valueDependencyCollector = parentDependencyCollector.value( modelPath.getBoundExtractorPath() ); Collection<PojoIndexingProcessor<? super V>> immutableNestedNodes = boundBridges.isEmpty() && typeNodeBuilders.isEmpty() ? Collections.emptyList() : new ArrayList<>( boundBridges.size() + typeNodeBuilders.size() ); try { for ( BoundValueBridge<? super V, ?> boundBridge : boundBridges ) { immutableNestedNodes.add( createValueBridgeNode( boundBridge ) ); } typeNodeBuilders.stream() .map( builder -> builder.build( valueDependencyCollector.type() ) ) .filter( Optional::isPresent ) .map( Optional::get ) .forEach( immutableNestedNodes::add ); if ( !immutableNestedNodes.isEmpty() ) { valueDependencyCollector.collectDependency(); } return immutableNestedNodes; } catch (RuntimeException e) { // Close the nested processors created so far before aborting new SuppressingCloser( e ).pushAll( PojoIndexingProcessor::close, immutableNestedNodes ); throw e; } }
private Collection<PojoIndexingProcessor<? super V>> doBuild( PojoIndexingDependencyCollectorPropertyNode<?, P> parentDependencyCollector) { PojoIndexingDependencyCollectorValueNode<P, V> valueDependencyCollector = parentDependencyCollector.value( modelPath.getBoundExtractorPath() ); Collection<PojoIndexingProcessor<? super V>> immutableNestedNodes = boundBridges.isEmpty() && typeNodeBuilders.isEmpty() ? Collections.emptyList() : new ArrayList<>( boundBridges.size() + typeNodeBuilders.size() ); try { for ( BoundValueBridge<? super V, ?> boundBridge : boundBridges ) { immutableNestedNodes.add( createValueBridgeNode( boundBridge ) ); } typeNodeBuilders.stream() .map( builder -> builder.build( valueDependencyCollector.type() ) ) .filter( Optional::isPresent ) .map( Optional::get ) .forEach( immutableNestedNodes::add ); if ( !immutableNestedNodes.isEmpty() ) { valueDependencyCollector.collectDependency(); } return immutableNestedNodes; } catch (RuntimeException e) { // Close the nested processors created so far before aborting new SuppressingCloser( e ).pushAll( PojoIndexingProcessor::close, immutableNestedNodes ); throw e; } }
new SuppressingCloser( e ).pushAll( BeanHolder::close, beanHolders ); throw e;
.pushAll( PojoIndexingProcessor::close, immutablePropertyNodes ); throw e;
new SuppressingCloser( e ).pushAll( BeanHolder::close, beanHolders ); throw e;
.pushAll( PojoIndexingProcessor::close, immutablePropertyNodes ); throw e;
.pushAll( PojoIndexingProcessor::close, immutableNestedNodes ); throw e;
.pushAll( PojoIndexingProcessor::close, immutableNestedNodes ); throw e;
new SuppressingCloser( e ).pushAll( BeanHolder::close, beanHolders ); throw e;
new SuppressingCloser( e ).pushAll( BeanHolder::close, beanHolders ); throw e;