mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
optionally allow unescaped urls in UrlClassLoader, correct implementation, see IDEA-58670
This commit is contained in:
@@ -50,7 +50,7 @@ class ClassPath {
|
||||
private static final long NS_THRESHOLD = 10000000L;
|
||||
|
||||
private static PrintStream ourOrder;
|
||||
private volatile boolean myAcceptUnescapedUrls;
|
||||
private final boolean myAcceptUnescapedUrls;
|
||||
|
||||
@SuppressWarnings({"UnusedDeclaration"})
|
||||
private static void printOrder(Loader loader, String resource) {
|
||||
@@ -79,8 +79,13 @@ class ClassPath {
|
||||
}
|
||||
|
||||
public ClassPath(URL[] urls, boolean canLockJars, boolean canUseCache) {
|
||||
this(urls, canLockJars, canUseCache, false);
|
||||
}
|
||||
|
||||
public ClassPath(URL[] urls, boolean canLockJars, boolean canUseCache, boolean acceptUnescapedUrls) {
|
||||
myCanLockJars = canLockJars;
|
||||
myCanUseCache = canUseCache;
|
||||
myAcceptUnescapedUrls = acceptUnescapedUrls;
|
||||
push(urls);
|
||||
}
|
||||
|
||||
@@ -205,10 +210,6 @@ class ClassPath {
|
||||
}
|
||||
}
|
||||
|
||||
public void setAcceptUnescapedUrls(boolean acceptUnescapedUrls) {
|
||||
myAcceptUnescapedUrls = acceptUnescapedUrls;
|
||||
}
|
||||
|
||||
private class MyEnumeration implements Enumeration<URL> {
|
||||
private int myIndex = 0;
|
||||
private Resource myRes = null;
|
||||
|
||||
@@ -46,6 +46,10 @@ public class UrlClassLoader extends ClassLoader {
|
||||
}
|
||||
|
||||
public UrlClassLoader(List<URL> urls, ClassLoader parent, boolean canLockJars, boolean canUseCache) {
|
||||
this(urls, parent, canLockJars, canUseCache, false);
|
||||
}
|
||||
|
||||
public UrlClassLoader(List<URL> urls, ClassLoader parent, boolean canLockJars, boolean canUseCache, boolean acceptUnescapedUrls) {
|
||||
super(parent);
|
||||
|
||||
myClassPath = new ClassPath(urls.toArray(new URL[urls.size()]), canLockJars, canUseCache);
|
||||
@@ -57,10 +61,6 @@ public class UrlClassLoader extends ClassLoader {
|
||||
myURLs.add(url);
|
||||
}
|
||||
|
||||
public void setAcceptUnescapedUrls(boolean acceptUnescapedUrls) {
|
||||
myClassPath.setAcceptUnescapedUrls(acceptUnescapedUrls);
|
||||
}
|
||||
|
||||
public List<URL> getUrls() {
|
||||
return Collections.unmodifiableList(myURLs);
|
||||
}
|
||||
|
||||
@@ -164,7 +164,7 @@ public class AntInstallation {
|
||||
Properties properties = new Properties();
|
||||
InputStream stream = null;
|
||||
try {
|
||||
stream = new UrlClassLoader(Collections.singletonList(antJar.toURL()), null).getResourceAsStream(VERSION_RESOURCE);
|
||||
stream = new UrlClassLoader(Collections.singletonList(antJar.toURL()), null, false, false, true).getResourceAsStream(VERSION_RESOURCE);
|
||||
properties.load(stream);
|
||||
}
|
||||
catch (MalformedURLException e) {
|
||||
|
||||
@@ -31,7 +31,7 @@ public class AntResourcesClassLoader extends UrlClassLoader {
|
||||
private final Set<String> myMisses = new HashSet<String>();
|
||||
|
||||
public AntResourcesClassLoader(final List<URL> urls, final ClassLoader parentLoader, final boolean canLockJars, final boolean canUseCache) {
|
||||
super(urls, parentLoader, canLockJars, canUseCache);
|
||||
super(urls, parentLoader, canLockJars, canUseCache, true);
|
||||
}
|
||||
|
||||
protected Class<?> loadClass(final String name, final boolean resolve) throws ClassNotFoundException {
|
||||
|
||||
@@ -310,9 +310,7 @@ public class CustomAntElementsRegistry {
|
||||
if (urls.size() == 0) {
|
||||
return parentLoader;
|
||||
}
|
||||
final AntResourcesClassLoader loader = new AntResourcesClassLoader(urls, parentLoader, false, false);
|
||||
loader.setAcceptUnescapedUrls(true);
|
||||
return loader;
|
||||
return new AntResourcesClassLoader(urls, parentLoader, false, false);
|
||||
}
|
||||
|
||||
public static List<URL> collectUrls(AntDomClasspathElement typedef) {
|
||||
|
||||
@@ -587,7 +587,6 @@ public class AntTypeDefImpl extends AntTaskImpl implements AntTypeDef {
|
||||
}
|
||||
|
||||
final AntResourcesClassLoader loader = new AntResourcesClassLoader(urls, parentLoader, false, false);
|
||||
loader.setAcceptUnescapedUrls(true);
|
||||
LOADERS_CACHE.setClassLoader(urls, loader);
|
||||
return loader;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user