Work around Groovy compiler bug that can name classes incorrectly
If a source URL is added to a CompilationUnit and that source URL does not contain any slashes, the resulting ClassNode in the AST will be incorrectly named. For example, a URL of 'file:foo.groovy' will produce a ClassNode named 'file:foo'. The expected name is 'foo'. This commit works around this problem by adding any URL sources with a file protocol to the compilation unit as File instances. Any URL sources that do not have a file protocol continue to be added as URL instances. Such URLs are still prone to this bug should we be dealing with one that contains no slashes. A fix for the underlying Groovy bug will address this possibility. Fixes #594
This commit is contained in:
parent
8491f8eb07
commit
46fc5c05e3
|
|
@ -20,6 +20,7 @@ import groovy.lang.GroovyClassLoader;
|
|||
import groovy.lang.GroovyClassLoader.ClassCollector;
|
||||
import groovy.lang.GroovyCodeSource;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.net.URL;
|
||||
|
|
@ -184,7 +185,13 @@ public class GroovyCompiler {
|
|||
for (String source : sources) {
|
||||
List<String> paths = ResourceUtils.getUrls(source, this.loader);
|
||||
for (String path : paths) {
|
||||
compilationUnit.addSource(new URL(path));
|
||||
URL url = new URL(path);
|
||||
if ("file".equals(url.getProtocol())) {
|
||||
compilationUnit.addSource(new File(url.getFile()));
|
||||
}
|
||||
else {
|
||||
compilationUnit.addSource(url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue