From abc57eb84ec778c319a0f6bf22adad7037ee0f85 Mon Sep 17 00:00:00 2001 From: Stefan Oehme Date: Thu, 6 Apr 2023 15:36:32 +0200 Subject: [PATCH] Fix PluginDescriptorCache The second get-method wasn't actually overloaded, but had a different signature than the superclass. This resulted in the superclass cache being filled and never cleared, even when flush is called. --- .../InvalidatingPluginDescriptorCache.java | 10 ++++------ .../InvalidatingPluginDescriptorCache.java | 16 +++++----------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/daemon-m39/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java b/daemon-m39/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java index 23862274e..0d8b924f2 100644 --- a/daemon-m39/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java +++ b/daemon-m39/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java @@ -48,12 +48,6 @@ @Priority(10) public class InvalidatingPluginDescriptorCache extends DefaultPluginDescriptorCache { - @FunctionalInterface - public interface PluginDescriptorSupplier { - PluginDescriptor load() - throws PluginResolutionException, PluginDescriptorParsingException, InvalidPluginDescriptorException; - } - protected static class Record implements CacheRecord { private final PluginDescriptor descriptor; @@ -71,6 +65,9 @@ public Stream getDependencyPaths() { @Override public void invalidate() { ClassRealm realm = descriptor.getClassRealm(); + if (realm == null) { + return; + } try { realm.getWorld().disposeRealm(realm.getId()); } catch (NoSuchRealmException e) { @@ -97,6 +94,7 @@ public PluginDescriptor get(Key key) { return r != null ? clone(r.descriptor) : null; } + @Override public PluginDescriptor get(Key key, PluginDescriptorSupplier supplier) throws PluginDescriptorParsingException, PluginResolutionException, InvalidPluginDescriptorException { try { diff --git a/daemon-m40/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java b/daemon-m40/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java index 23862274e..18f4205c2 100644 --- a/daemon-m40/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java +++ b/daemon-m40/src/main/java/org/mvndaemon/mvnd/cache/invalidating/InvalidatingPluginDescriptorCache.java @@ -29,10 +29,7 @@ import java.util.stream.Stream; import org.apache.maven.model.Plugin; -import org.apache.maven.plugin.DefaultPluginDescriptorCache; -import org.apache.maven.plugin.InvalidPluginDescriptorException; -import org.apache.maven.plugin.PluginDescriptorParsingException; -import org.apache.maven.plugin.PluginResolutionException; +import org.apache.maven.plugin.*; import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.codehaus.plexus.classworlds.realm.ClassRealm; import org.codehaus.plexus.classworlds.realm.NoSuchRealmException; @@ -47,13 +44,6 @@ @Named @Priority(10) public class InvalidatingPluginDescriptorCache extends DefaultPluginDescriptorCache { - - @FunctionalInterface - public interface PluginDescriptorSupplier { - PluginDescriptor load() - throws PluginResolutionException, PluginDescriptorParsingException, InvalidPluginDescriptorException; - } - protected static class Record implements CacheRecord { private final PluginDescriptor descriptor; @@ -71,6 +61,9 @@ public Stream getDependencyPaths() { @Override public void invalidate() { ClassRealm realm = descriptor.getClassRealm(); + if (realm == null) { + return; + } try { realm.getWorld().disposeRealm(realm.getId()); } catch (NoSuchRealmException e) { @@ -97,6 +90,7 @@ public PluginDescriptor get(Key key) { return r != null ? clone(r.descriptor) : null; } + @Override public PluginDescriptor get(Key key, PluginDescriptorSupplier supplier) throws PluginDescriptorParsingException, PluginResolutionException, InvalidPluginDescriptorException { try {