From 1df78523072ad9d0cc1ae8480dd623e1d8dc3124 Mon Sep 17 00:00:00 2001 From: Michael Yan Date: Tue, 20 Aug 2024 15:34:27 +0800 Subject: [PATCH] Update `DynamicPlugin`, change `void doWithDynamicModules()` to `Closure doWithDynamicModules()` --- .../grails/plugins/DynamicPlugin.groovy | 24 +++---------------- .../plugins/DefaultDynamicGrailsPlugin.java | 21 ++++++++++++++-- .../plugins/DynamicBinaryGrailsPlugin.java | 21 ++++++++++++++-- 3 files changed, 41 insertions(+), 25 deletions(-) diff --git a/grace-plugin-api/src/main/groovy/grails/plugins/DynamicPlugin.groovy b/grace-plugin-api/src/main/groovy/grails/plugins/DynamicPlugin.groovy index e84649d3ce..f44bfad440 100644 --- a/grace-plugin-api/src/main/groovy/grails/plugins/DynamicPlugin.groovy +++ b/grace-plugin-api/src/main/groovy/grails/plugins/DynamicPlugin.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2021-2022 the original author or authors. + * Copyright 2021-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,27 +31,9 @@ abstract class DynamicPlugin extends Plugin { * Invoked in a phase where plugins can add dynamic modules. * Subclasses should override */ - void doWithDynamicModules() { + Closure doWithDynamicModules() { // TODO Implement registering dynamic modules to application (optional) - } - - @Override - Object invokeMethod(String name, Object args) { - if (plugin !instanceof DynamicGrailsPlugin) { - return false - } - - DynamicGrailsPlugin dynamicPlugin = (DynamicGrailsPlugin) plugin - Object[] array = (Object[]) args - if (array.length > 0) { - if (array.length > 1) { - dynamicPlugin.addModuleDescriptor(name, array[0] as Map, array[1] as Closure) - } - else { - dynamicPlugin.addModuleDescriptor(name, array[0] as Map) - } - } - true + null } } diff --git a/grace-plugin-api/src/main/groovy/org/grails/plugins/DefaultDynamicGrailsPlugin.java b/grace-plugin-api/src/main/groovy/org/grails/plugins/DefaultDynamicGrailsPlugin.java index f632e58fc6..7d50b0d5d1 100644 --- a/grace-plugin-api/src/main/groovy/org/grails/plugins/DefaultDynamicGrailsPlugin.java +++ b/grace-plugin-api/src/main/groovy/org/grails/plugins/DefaultDynamicGrailsPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright 2021-2023 the original author or authors. + * Copyright 2021-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -74,7 +74,10 @@ private void evaluateProvidedModules() { public void doWithDynamicModules() { if (getInstance() instanceof DynamicPlugin) { DynamicPlugin dynamicPlugin = (DynamicPlugin) getInstance(); - dynamicPlugin.doWithDynamicModules(); + Closure dynamicModules = dynamicPlugin.doWithDynamicModules(); + dynamicModules.setResolveStrategy(Closure.DELEGATE_FIRST); + dynamicModules.setDelegate(this); + dynamicModules.call(); } } @@ -124,4 +127,18 @@ public List> getModuleDescriptorsByModuleClass(Class return result; } + @Override + public Object invokeMethod(String name, Object args) { + Object[] array = (Object[]) args; + if (array.length > 0) { + if (array.length > 1) { + addModuleDescriptor(name, (Map) array[0], (Closure) array[1]); + } + else { + addModuleDescriptor(name, (Map) array[0]); + } + } + return true; + } + } diff --git a/grace-plugin-api/src/main/groovy/org/grails/plugins/DynamicBinaryGrailsPlugin.java b/grace-plugin-api/src/main/groovy/org/grails/plugins/DynamicBinaryGrailsPlugin.java index d6dee54b25..caa4b8e9a2 100644 --- a/grace-plugin-api/src/main/groovy/org/grails/plugins/DynamicBinaryGrailsPlugin.java +++ b/grace-plugin-api/src/main/groovy/org/grails/plugins/DynamicBinaryGrailsPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright 2021-2023 the original author or authors. + * Copyright 2021-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -75,7 +75,10 @@ private void evaluateProvidedModules() { public void doWithDynamicModules() { if (getInstance() instanceof DynamicPlugin) { DynamicPlugin dynamicPlugin = (DynamicPlugin) getInstance(); - dynamicPlugin.doWithDynamicModules(); + Closure dynamicModules = dynamicPlugin.doWithDynamicModules(); + dynamicModules.setResolveStrategy(Closure.DELEGATE_FIRST); + dynamicModules.setDelegate(this); + dynamicModules.call(); } } @@ -125,4 +128,18 @@ public List> getModuleDescriptorsByModuleClass(Class return result; } + @Override + public Object invokeMethod(String name, Object args) { + Object[] array = (Object[]) args; + if (array.length > 0) { + if (array.length > 1) { + addModuleDescriptor(name, (Map) array[0], (Closure) array[1]); + } + else { + addModuleDescriptor(name, (Map) array[0]); + } + } + return true; + } + }