transient new CloseablesHolder resources; A ownResource(A resource) { resources?.add(resource); ret resource; } void ownResources(IResourceHolder holder) { assertNotNull(resources); if (holder == null) ret; resources.addAll(holder.takeAll()); } close { resources?.close(); }