This is an automated email from the ASF dual-hosted git repository.

jamesfredley pushed a commit to branch bridge-backward-compat-shims
in repository https://gitbox.apache.org/repos/asf/grails-core.git


The following commit(s) were added to refs/heads/bridge-backward-compat-shims 
by this push:
     new 1f2507bb4e Make deprecated plugin manager shims call reset/init on 
discovery
1f2507bb4e is described below

commit 1f2507bb4ea076eb2ad055c179b5ffb5d5c0f85b
Author: James Fredley <[email protected]>
AuthorDate: Fri Mar 13 09:30:47 2026 -0400

    Make deprecated plugin manager shims call reset/init on discovery
    
    Instead of being no-ops, setLoadCorePlugins and setPluginFilter now
    forward settings to GrailsPluginDiscovery and trigger reset/init when
    an application context is available. This makes the deprecated shims
    behave the same as the original API per PR review feedback.
    
    - Add initialized flag to DefaultGrailsPluginDiscovery so reset+init
      actually rediscovers plugins instead of being blocked by the old
      null-check guard on the plugins field
    - Override init() as no-op in MockGrailsPluginDiscovery to prevent
      classpath scanning on mocks
    - Add reinitializeDiscovery() in AbstractGrailsPluginManager with
      applicationContext null guard for pre-startup safety
    
    Assisted-by: Claude Code <[email protected]>
---
 .../core/plugins/DefaultGrailsPluginDiscovery.java |  5 ++++-
 .../plugins/AbstractGrailsPluginManager.java       | 22 ++++++++++++++++++++--
 .../grails/plugins/MockGrailsPluginDiscovery.java  |  9 +++++++++
 3 files changed, 33 insertions(+), 3 deletions(-)

diff --git 
a/grails-core/src/main/groovy/org/apache/grails/core/plugins/DefaultGrailsPluginDiscovery.java
 
b/grails-core/src/main/groovy/org/apache/grails/core/plugins/DefaultGrailsPluginDiscovery.java
index bb0cc49341..02c7a94f55 100644
--- 
a/grails-core/src/main/groovy/org/apache/grails/core/plugins/DefaultGrailsPluginDiscovery.java
+++ 
b/grails-core/src/main/groovy/org/apache/grails/core/plugins/DefaultGrailsPluginDiscovery.java
@@ -53,6 +53,7 @@ public class DefaultGrailsPluginDiscovery implements 
GrailsPluginDiscovery {
     protected boolean loadClasspathPlugins = true;
     protected boolean requireClasspathPlugin = true;
     protected final PluginFilterRetriever filterRetriever;
+    private boolean initialized = false;
 
     public DefaultGrailsPluginDiscovery() {
         this(new PluginFilterRetriever());
@@ -109,7 +110,7 @@ public class DefaultGrailsPluginDiscovery implements 
GrailsPluginDiscovery {
     }
 
     public void init(Environment environment) {
-        if (plugins == null) {
+        if (!initialized) {
             if (environment == null) {
                 throw new IllegalArgumentException("Environment must be 
provided to determine plugin order");
             }
@@ -267,6 +268,7 @@ public class DefaultGrailsPluginDiscovery implements 
GrailsPluginDiscovery {
                 GrailsPluginInfo::loadAfterNames,
                 GrailsPluginInfo::loadBeforeNames
         );
+        initialized = true;
     }
 
     private void processDelayedEvictions() {
@@ -552,6 +554,7 @@ public class DefaultGrailsPluginDiscovery implements 
GrailsPluginDiscovery {
 
     @Override
     public void reset() {
+        initialized = false;
         plugins = new LinkedHashMap<>();
         loadOrderedPlugins = new ArrayList<>();
         pluginToObserverMap = new HashMap<>();
diff --git 
a/grails-core/src/main/groovy/org/grails/plugins/AbstractGrailsPluginManager.java
 
b/grails-core/src/main/groovy/org/grails/plugins/AbstractGrailsPluginManager.java
index b17e5520cd..110c159b03 100644
--- 
a/grails-core/src/main/groovy/org/grails/plugins/AbstractGrailsPluginManager.java
+++ 
b/grails-core/src/main/groovy/org/grails/plugins/AbstractGrailsPluginManager.java
@@ -389,20 +389,38 @@ public abstract class AbstractGrailsPluginManager 
implements GrailsPluginManager
 
     /**
      * @deprecated Core plugin loading is now handled by {@link 
org.apache.grails.core.plugins.GrailsPluginDiscovery}.
-     * This method is a no-op and will be removed in Grails 8.0.0.
+     * Use {@link 
org.apache.grails.core.plugins.GrailsPluginDiscovery#setLoadClasspathPlugins(boolean)}
 instead.
+     * This method will be removed in Grails 8.0.0.
      */
     @Deprecated(forRemoval = true, since = "7.1")
     @Override
     public void setLoadCorePlugins(boolean shouldLoadCorePlugins) {
+        pluginDiscovery.setLoadClasspathPlugins(shouldLoadCorePlugins);
+        reinitializeDiscovery();
     }
 
     /**
      * @deprecated Plugin filtering is now handled by {@link 
org.apache.grails.core.plugins.GrailsPluginDiscovery}.
-     * This method is a no-op and will be removed in Grails 8.0.0.
+     * Use {@link 
org.apache.grails.core.plugins.GrailsPluginDiscovery#setPluginFilter(PluginFilter)}
 instead.
+     * This method will be removed in Grails 8.0.0.
      */
     @Deprecated(forRemoval = true, since = "7.1")
     @Override
     public void setPluginFilter(PluginFilter pluginFilter) {
+        pluginDiscovery.setPluginFilter(pluginFilter);
+        reinitializeDiscovery();
+    }
+
+    /**
+     * Resets and reinitializes plugin discovery if an application context is 
available.
+     * When called before the application context is set (the typical 
pre-startup case),
+     * the forwarded settings will be picked up during normal lifecycle 
initialization.
+     */
+    private void reinitializeDiscovery() {
+        if (applicationContext != null) {
+            pluginDiscovery.reset();
+            pluginDiscovery.init(applicationContext.getEnvironment());
+        }
     }
 
     public void informOfClassChange(Class<?> aClass) {
diff --git 
a/grails-core/src/main/groovy/org/grails/plugins/MockGrailsPluginDiscovery.java 
b/grails-core/src/main/groovy/org/grails/plugins/MockGrailsPluginDiscovery.java
index 306451c5b9..10930e3bed 100644
--- 
a/grails-core/src/main/groovy/org/grails/plugins/MockGrailsPluginDiscovery.java
+++ 
b/grails-core/src/main/groovy/org/grails/plugins/MockGrailsPluginDiscovery.java
@@ -22,6 +22,7 @@ import grails.plugins.GrailsPlugin;
 import org.apache.grails.core.plugins.DefaultGrailsPluginDiscovery;
 import org.apache.grails.core.plugins.GrailsPluginInfo;
 import org.apache.grails.core.plugins.GrailsPluginUtils;
+import org.springframework.core.env.Environment;
 
 public class MockGrailsPluginDiscovery extends DefaultGrailsPluginDiscovery {
 
@@ -34,6 +35,14 @@ public class MockGrailsPluginDiscovery extends 
DefaultGrailsPluginDiscovery {
         super(pluginClasses);
     }
 
+    /**
+     * No-op: mock discovery does not scan the classpath.
+     * Plugins are registered manually via {@link #registerMockPlugin}.
+     */
+    @Override
+    public void init(Environment environment) {
+    }
+
     public void registerMockPlugin(GrailsPlugin plugin) {
         
registerMockPlugin(GrailsPluginUtils.createPluginInfo(plugin.getPluginClass(), 
null, true));
     }

Reply via email to