diff --git a/rewrite-maven/src/main/java/org/openrewrite/maven/marketplace/CachingMavenRecipeBundleResolver.java b/rewrite-maven/src/main/java/org/openrewrite/maven/marketplace/CachingMavenRecipeBundleResolver.java index b83b9b891c2..018d4338ffb 100644 --- a/rewrite-maven/src/main/java/org/openrewrite/maven/marketplace/CachingMavenRecipeBundleResolver.java +++ b/rewrite-maven/src/main/java/org/openrewrite/maven/marketplace/CachingMavenRecipeBundleResolver.java @@ -69,6 +69,27 @@ public synchronized RecipeBundleResolver resolverFor(RecipeBundle bundle) { return entry.createProxyResolver(); } + @Override + public void close() throws Exception { + Exception deferredException = null; + for (Map.Entry entry : resolverCache.entrySet()) { + try { + ResolverEntry resolverEntry = entry.getValue(); + resolverEntry.resolver.close(); + if (resolverEntry.leases.get() > 0) { + throw new IllegalStateException("Apparent resolver leak detected"); + } + } catch (Exception e) { + if (deferredException == null) { + deferredException = e; + } + } + } + if (deferredException != null) { + throw deferredException; + } + } + @RequiredArgsConstructor private static class ResolverEntry { private final RecipeBundle bundle;