mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-14 00:16:47 +00:00
Potential fix for NPE in classloader, issue 648
This commit is contained in:
1 parent
fbab1ca77c
commit
60cce65881
1 file changed
+40
-43
@@ -161,48 +161,45 @@ public class Processor extends AbstractProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
private static class WrappingClassLoader extends ClassLoader {
|
||||
private final ClassLoader parent;
|
||||
|
||||
public WrappingClassLoader(ClassLoader parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public Class<?> loadClass(String name) throws ClassNotFoundException {
|
||||
return parent.loadClass(name);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return parent.toString();
|
||||
}
|
||||
|
||||
public URL getResource(String name) {
|
||||
return parent.getResource(name);
|
||||
}
|
||||
|
||||
public Enumeration<URL> getResources(String name) throws IOException {
|
||||
return parent.getResources(name);
|
||||
}
|
||||
|
||||
public InputStream getResourceAsStream(String name) {
|
||||
return parent.getResourceAsStream(name);
|
||||
}
|
||||
|
||||
public void setDefaultAssertionStatus(boolean enabled) {
|
||||
parent.setDefaultAssertionStatus(enabled);
|
||||
}
|
||||
|
||||
public void setPackageAssertionStatus(String packageName, boolean enabled) {
|
||||
parent.setPackageAssertionStatus(packageName, enabled);
|
||||
}
|
||||
|
||||
public void setClassAssertionStatus(String className, boolean enabled) {
|
||||
parent.setClassAssertionStatus(className, enabled);
|
||||
}
|
||||
|
||||
public void clearAssertionStatus() {
|
||||
parent.clearAssertionStatus();
|
||||
}
|
||||
private static ClassLoader wrapClassLoader(final ClassLoader parent) {
|
||||
return new ClassLoader() {
|
||||
|
||||
public Class<?> loadClass(String name) throws ClassNotFoundException {
|
||||
return parent.loadClass(name);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return parent.toString();
|
||||
}
|
||||
|
||||
public URL getResource(String name) {
|
||||
return parent.getResource(name);
|
||||
}
|
||||
|
||||
public Enumeration<URL> getResources(String name) throws IOException {
|
||||
return parent.getResources(name);
|
||||
}
|
||||
|
||||
public InputStream getResourceAsStream(String name) {
|
||||
return parent.getResourceAsStream(name);
|
||||
}
|
||||
|
||||
public void setDefaultAssertionStatus(boolean enabled) {
|
||||
parent.setDefaultAssertionStatus(enabled);
|
||||
}
|
||||
|
||||
public void setPackageAssertionStatus(String packageName, boolean enabled) {
|
||||
parent.setPackageAssertionStatus(packageName, enabled);
|
||||
}
|
||||
|
||||
public void setClassAssertionStatus(String className, boolean enabled) {
|
||||
parent.setClassAssertionStatus(className, enabled);
|
||||
}
|
||||
|
||||
public void clearAssertionStatus() {
|
||||
parent.clearAssertionStatus();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private void stopJavacProcessingEnvironmentFromClosingOurClassloader() {
|
||||
@@ -211,7 +208,7 @@ public class Processor extends AbstractProcessor {
|
||||
f.setAccessible(true);
|
||||
ClassLoader unwrapped = (ClassLoader) f.get(processingEnv);
|
||||
if (unwrapped == null) return;
|
||||
ClassLoader wrapped = new WrappingClassLoader(unwrapped);
|
||||
ClassLoader wrapped = wrapClassLoader(unwrapped);
|
||||
f.set(processingEnv, wrapped);
|
||||
} catch (NoSuchFieldException e) {
|
||||
// Some versions of javac have this (and call close on it), some don't. I guess this one doesn't have it.
|
||||
|
||||
Reference in new issue
Block a user