Skip to content

Commit 1808253

Browse files
committed
Fix watch pattern support for Groovy classes. Fixes #9848
1 parent fa2c2f3 commit 1808253

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

grails-core/src/main/groovy/grails/plugins/GrailsPluginManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ public interface GrailsPluginManager extends ApplicationContextAware {
224224
* @return true if the plugin supports the current build scope
225225
* @see grails.util.BuildScope#getCurrent()
226226
*/
227+
@Deprecated
227228
boolean supportsCurrentBuildScope(String pluginName);
228229

229230
/**

grails-core/src/main/groovy/org/grails/plugins/AbstractGrailsPluginManager.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import grails.core.GrailsApplication;
4545

4646
import org.grails.core.legacy.LegacyGrailsApplication;
47+
import org.grails.plugins.support.WatchPattern;
4748
import org.grails.spring.RuntimeSpringConfiguration;
4849
import org.grails.io.support.GrailsResourceUtils;
4950

@@ -87,7 +88,7 @@ public abstract class AbstractGrailsPluginManager implements GrailsPluginManager
8788
protected ApplicationContext applicationContext;
8889
protected Map<String, GrailsPlugin> failedPlugins = new HashMap<String, GrailsPlugin>();
8990
protected boolean loadCorePlugins = true;
90-
91+
9192
private static final String CONFIG_BINDING_USER_HOME = "userHome";
9293
private static final String CONFIG_BINDING_GRAILS_HOME = "grailsHome";
9394
private static final String CONFIG_BINDING_APP_NAME = "appName";
@@ -356,6 +357,7 @@ public void setPluginFilter(PluginFilter pluginFilter) {
356357
// no-op
357358
}
358359

360+
@Deprecated
359361
public boolean supportsCurrentBuildScope(String pluginName) {
360362
GrailsPlugin plugin = getGrailsPlugin(pluginName);
361363
return plugin == null || plugin.supportsScope(BuildScope.getCurrent());
@@ -385,6 +387,33 @@ public void informOfClassChange(Class<?> aClass) {
385387
if(!plugin.isEnabled(applicationContext.getEnvironment().getActiveProfiles())) return;
386388
plugin.notifyOfEvent(GrailsPlugin.EVENT_ON_CHANGE, aClass);
387389
}
390+
else {
391+
String classNameAsPath = aClass.getName().replace('.', File.separatorChar);
392+
String groovyClass = classNameAsPath + ".groovy";
393+
String javaClass = classNameAsPath + ".java";
394+
for (GrailsPlugin grailsPlugin : pluginList) {
395+
List<WatchPattern> watchPatterns = grailsPlugin.getWatchedResourcePatterns();
396+
if(watchPatterns != null) {
397+
for (WatchPattern watchPattern : watchPatterns) {
398+
File parent = watchPattern.getDirectory();
399+
String extension = watchPattern.getExtension();
400+
401+
if(parent != null && extension != null) {
402+
File f = new File(parent, groovyClass);
403+
if(f.exists() && f.getName().endsWith(extension)) {
404+
grailsPlugin.notifyOfEvent(GrailsPlugin.EVENT_ON_CHANGE, aClass);
405+
}
406+
else {
407+
f = new File(parent, javaClass);
408+
if(f.exists() && f.getName().endsWith(extension)) {
409+
grailsPlugin.notifyOfEvent(GrailsPlugin.EVENT_ON_CHANGE, aClass);
410+
}
411+
}
412+
}
413+
}
414+
}
415+
}
416+
}
388417
}
389418

390419
public String getPluginPath(String name) {

grails-core/src/main/groovy/org/grails/plugins/support/WatchPattern.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616
package org.grails.plugins.support
1717

1818
import groovy.transform.CompileStatic
19+
import groovy.transform.ToString
1920

2021
/**
2122
* @author Graeme Rocher
2223
* @since 2.0
2324
*/
2425
@CompileStatic
26+
@ToString
2527
class WatchPattern {
2628

2729
/**

0 commit comments

Comments
 (0)