Jacques, Cédric, Keegan. I apologize if I jump in this conversation but I am interested in this issue reported by Jacques and I would like to share more information about how the code is used in OFBiz.
The GroovyBaseScript.groovy [*] is in the classpath, and here is how we use it (I have simplified the code for readability): CompilerConfiguration conf = new CompilerConfiguration(); conf.setScriptBaseClass("org.ofbiz.service.engine.GroovyBaseScript"); GroovyClassLoader groovyClassLoader = new GroovyClassLoader(GroovyUtil.class.getClassLoader(), conf); Then we use "groovyClassLoader" to parse our scripts with something like this: groovyClassLoader.parseClass(UtilIO.readString(in), location); Kind regards, Jacopo [*] You can review the content of GroovyBaseScript.groovy here: http://svn.apache.org/repos/asf/ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GroovyBaseScript.groovy On Aug 14, 2015, at 2:32 PM, Keegan Witt <keeganw...@gmail.com> wrote: > FYI, it is possible to apply ASTs to scripts. Remember that at the end of > the day, scripts are compiled too (just compiled on the fly). How are you > extending org.ofbiz.service.engine.GroovyBaseScript? Is it in a jar on the > classpath? And are you sure there are no ASTs in it? > > -Keegan > > On Fri, Aug 14, 2015 at 6:19 AM, Jacques Le Roux > <jacques.le.r...@les7arts.com> wrote: > Since we don't compile groovy code I think we don't do AST transformations. > https://glaforge.appspot.com/article/groovy-ast-transformations-tutorials > > Jacques > > > > Le 14/08/2015 11:02, Cédric Champeau a écrit : >> Are you writing your own AST transformations? If so, it is likely a bug in >> one of them, and the error message is there to tell you something is wrong >> with it. >> >> 2015-08-14 10:52 GMT+02:00 Jacques Le Roux <jacques.le.r...@les7arts.com>: >> Hi, >> >> We heavily rely on Groovy in Apache OFBiz where it replaced BeanShell 7 >> years ago. We only use it for scripts, we don't use the compiler. >> >> I thought upgrading from 2.2.1 to 2.4.4 would be a breeze. So I simply >> deleted groovy-all-2.2.1.jar and added groovy-all-2.4.4.jar locally before >> committing. But I was surprised to get this error, which exists in all our >> scripts. >> >> [java] Caused by: >> org.codehaus.groovy.control.MultipleCompilationErrorsException: startup >> failed: >> [java] >> component://commonext/webapp/ofbizsetup/organization/changeOrgPartyId.groovy: >> 23: A transform used a generics containing ClassNode >> org.ofbiz.service.engine.GroovyBaseScript for the super class cha >> ngeOrgPartyId directly. You are not supposed to do this. Please create a new >> ClassNode referring to the old ClassNode and use the new ClassNode instead >> of the old one. Otherwise the compiler will create wrong >> descriptors and a potential NullPointerException in TypeResolver in the >> OpenJDK. If this is not your own doing, please report this bug to the writer >> of the transform. >> [java] @ line 23, column 1. >> [java] partyAcctgPrefAndGroupList = []; >> [java] ^ >> [java] >> [java] 1 error >> [java] >> [java] at >> org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310) >> ~[groovy-all-2.4.4.jar:2.4.4] >> [java] at >> org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1075) >> ~[groovy-all-2.4.4.jar:2.4.4] >> [java] at >> org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591) >> ~[groovy-all-2.4.4.jar:2.4.4] >> [java] at >> org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569) >> ~[groovy-all-2.4.4.jar:2.4.4] >> [java] at >> org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546) >> ~[groovy-all-2.4.4.jar:2.4.4] >> [java] at >> groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298) >> ~[groovy-all-2.4.4.jar:2.4.4] >> [java] at >> groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268) >> ~[groovy-all-2.4.4.jar:2.4.4] >> [java] at >> groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:254) >> ~[groovy-all-2.4.4.jar:2.4.4] >> [java] at >> groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:212) >> ~[groovy-all-2.4.4.jar:2.4.4] >> [java] at >> org.ofbiz.base.util.GroovyUtil.parseClass(GroovyUtil.java:162) >> ~[ofbiz-base.jar:?] >> [java] at >> org.ofbiz.base.util.GroovyUtil.getScriptClassFromLocation(GroovyUtil.java:134) >> ~[ofbiz-base.jar:?] >> [java] at >> org.ofbiz.base.util.GroovyUtil.runScriptAtLocation(GroovyUtil.java:170) >> ~[ofbiz-base.jar:?] >> [java] at >> org.ofbiz.base.util.ScriptUtil.executeScript(ScriptUtil.java:342) >> ~[ofbiz-base.jar:?] >> [java] at >> org.ofbiz.base.util.ScriptUtil.executeScript(ScriptUtil.java:324) >> ~[ofbiz-base.jar:?] >> [java] at >> org.ofbiz.widget.model.AbstractModelAction$Script.runAction(AbstractModelAction.java:632) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.AbstractModelAction.runSubActions(AbstractModelAction.java:141) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:273) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ModelScreen.renderScreenString(ModelScreen.java:164) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ScreenFactory.renderReferencedScreen(ScreenFactory.java:211) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ModelScreenWidget$IncludeScreen.renderWidgetString(ModelScreenWidget.java:780) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:98) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:280) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ModelScreen.renderScreenString(ModelScreen.java:164) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ScreenFactory.renderReferencedScreen(ScreenFactory.java:211) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ModelScreenWidget$DecoratorScreen.renderWidgetString(ModelScreenWidget.java:860) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ModelScreenWidget.renderSubWidgetsString(ModelScreenWidget.java:98) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ModelScreenWidget$Section.renderWidgetString(ModelScreenWidget.java:280) >> ~[ofbiz-widget.jar:?] >> [java] at >> org.ofbiz.widget.model.ModelScreen.renderScreenString(ModelScreen.java:164) >> ~[ofbiz-widget.jar:?] >> [java] ... 28 more >> >> I looked for similar cases on the Internet and found >> https://issues.apache.org/jira/browse/GROOVY-5112 >> https://issues.apache.org/jira/browse/GROOVY-6691 >> >> So do you think this could be a bug in Groovy or should we rather dive in in >> our code? >> >> Thanks >> >> Jacques >> > >