From 78254249b98d93e80ab1aea0f3832a03b97fb5ed Mon Sep 17 00:00:00 2001 From: Shil Sinha Date: Sun, 3 Dec 2017 18:19:57 -0500 Subject: [PATCH] GROOVY-8402: GroovyScriptEngine.ScriptClassLoader applies compilation customizers twice (closes #641) --- src/main/groovy/util/GroovyScriptEngine.java | 8 ----- .../groovy/util/GroovyScriptEngineTest.groovy | 29 +++++++++++++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/main/groovy/util/GroovyScriptEngine.java b/src/main/groovy/util/GroovyScriptEngine.java index 9cbb4a881b5..92e2486719a 100644 --- a/src/main/groovy/util/GroovyScriptEngine.java +++ b/src/main/groovy/util/GroovyScriptEngine.java @@ -228,14 +228,6 @@ public LookupResult findClassNode(String origName, CompilationUnit compilationUn } }); - final List customizers = config.getCompilationCustomizers(); - if (customizers != null) { - // GROOVY-4813 : apply configuration customizers - for (CompilationCustomizer customizer : customizers) { - cu.addPhaseOperation(customizer, customizer.getPhase().getPhaseNumber()); - } - } - return cu; } diff --git a/src/test/groovy/util/GroovyScriptEngineTest.groovy b/src/test/groovy/util/GroovyScriptEngineTest.groovy index 514521cd614..1466f57bac9 100644 --- a/src/test/groovy/util/GroovyScriptEngineTest.groovy +++ b/src/test/groovy/util/GroovyScriptEngineTest.groovy @@ -18,6 +18,12 @@ */ package groovy.util +import org.codehaus.groovy.ast.ClassNode +import org.codehaus.groovy.classgen.GeneratorContext +import org.codehaus.groovy.control.CompilePhase +import org.codehaus.groovy.control.CompilerConfiguration +import org.codehaus.groovy.control.SourceUnit +import org.codehaus.groovy.control.customizers.CompilationCustomizer import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder @@ -67,4 +73,27 @@ class GroovyScriptEngineTest extends GroovyTestCase { assert !new File(temporaryFolder.root, scriptFile.name + '.xml').exists() } + + @Test + void testCustomizersAppliedOncePerClassNode_GROOVY_8402() { + def scriptFile = temporaryFolder.newFile('Script1.groovy') + scriptFile << ''' + class Foo {} + assert 1 + 1 == 2 + ''' + def counts = [:].withDefault { 0 } + + def config = new CompilerConfiguration().addCompilationCustomizers(new CompilationCustomizer(CompilePhase.SEMANTIC_ANALYSIS) { + @Override + void call(SourceUnit source, GeneratorContext context, ClassNode classNode) { + counts[classNode.name]++ + } + }) + + GroovyScriptEngine scriptEngine = new GroovyScriptEngine([temporaryFolder.root.toURI().toURL()] as URL[]) + scriptEngine.setConfig(config) + scriptEngine.loadScriptByName('Script1.groovy') + assert counts['Script1'] == 1 + assert counts['Foo'] == 1 + } } \ No newline at end of file