Skip to content

Commit 829d723

Browse files
authored
Merge pull request #93 from xtext/cd_fixDeps
implemented FilteringClassLoader.getResource to ensure isolation between plugin and build classloader
2 parents 2e2d66e + c11cb99 commit 829d723

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

xtext-gradle-plugin/src/main/java/org/xtext/gradle/tasks/internal/FilteringClassLoader.xtend

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,17 @@ package org.xtext.gradle.tasks.internal
33
import java.util.List
44

55
class FilteringClassLoader extends ClassLoader {
6+
7+
static val char DOT = '.'
8+
static val char SLASH = '/'
9+
610
val List<String> includes
11+
val List<String> resourceIncludes
712

813
new(ClassLoader parent, List<String> includes) {
914
super(parent)
1015
this.includes = includes
16+
this.resourceIncludes = includes.map[replace(DOT,SLASH)]
1117
}
1218

1319
override loadClass(String name, boolean resolve) throws ClassNotFoundException {
@@ -27,8 +33,23 @@ class FilteringClassLoader extends ClassLoader {
2733
}
2834
}
2935

36+
override getResource(String name) {
37+
val result = ClassLoader.systemClassLoader.parent?.getResource(name)
38+
if (result !== null) {
39+
return result
40+
}
41+
if (name.isValidResource) {
42+
return super.getResource(name)
43+
}
44+
return null
45+
}
46+
3047
private def isValidClass(String name) {
31-
includes.exists[name.startsWith(it + ".")]
48+
includes.exists[name.startsWith(it + DOT)]
49+
}
50+
51+
private def isValidResource(String name) {
52+
resourceIncludes.exists[name.startsWith(it + SLASH)]
3253
}
3354

3455
}

0 commit comments

Comments
 (0)