diff --git a/framework/src/play/templates/GroovyTemplate.java b/framework/src/play/templates/GroovyTemplate.java index f801024fbe..de428ee499 100644 --- a/framework/src/play/templates/GroovyTemplate.java +++ b/framework/src/play/templates/GroovyTemplate.java @@ -139,34 +139,18 @@ public void compile() { CompilationUnit compilationUnit = new CompilationUnit(compilerConfiguration); compilationUnit.addSource( new SourceUnit(name, compiledSource, compilerConfiguration, tClassLoader, compilationUnit.getErrorCollector())); - - // The following approach to adding the phase operation replaces the original - // reflection based approach commented out lower down. This appears to be the - // canonical approach and possibly has only been made available in the v3.x - // stream but it differs in two ways from the reflection based approach and it's - // not clear if and what the impact is: - // 1. It does NOT guarantee an empty list of OUTPUT phases operations to begin with. - // 2. The new phase operation is added to the start and not the end. - // See https://github.com/apache/groovy/blob/GROOVY_3_0_6/src/main/java/org/codehaus/groovy/control/CompilationUnit.java#L349 - compilationUnit.addPhaseOperation(new IGroovyClassOperation() { + + Field phasesF = compilationUnit.getClass().getDeclaredField("phaseOperations"); + phasesF.setAccessible(true); + Collection[] phases = (Collection[]) phasesF.get(compilationUnit); + LinkedList output = new LinkedList<>(); + phases[Phases.OUTPUT] = output; + output.add(new IGroovyClassOperation() { @Override public void call(GroovyClass gclass) { groovyClassesForThisTemplate.add(gclass); } }); - - // TOOD: Remove once the above replacement logic has been confirmed. -// Field phasesF = compilationUnit.getClass().getDeclaredField("phaseOperations"); -// phasesF.setAccessible(true); -// Collection[] phases = (Collection[]) phasesF.get(compilationUnit); -// LinkedList output = new LinkedList<>(); -// phases[Phases.OUTPUT] = output; -// output.add(new IGroovyClassOperation() { -// @Override -// public void call(GroovyClass gclass) { -// groovyClassesForThisTemplate.add(gclass); -// } -// }); compilationUnit.compile(); // ouf