Use bootstrap classloader to only provide access to JRE classes

This commit is contained in:
Dmitry Cherniachenko
2017-04-21 21:35:03 +02:00
committed by Egor.Ushakov
parent 592a24cd85
commit 5de2e5b11b
2 changed files with 4 additions and 1 deletions

View File

@@ -30,7 +30,8 @@ public class ClasspathHelper {
private static Method findMethodOnClasspath(String targetClass, String methodSignature) {
try {
Class cls = Class.forName(targetClass);
// use bootstrap classloader to only provide access to JRE classes
Class cls = new ClassLoader(null) {}.loadClass(targetClass);
for (Method mtd : cls.getMethods()) {
// use contains() to ignore access modifiers and thrown exceptions
if (mtd.toString().contains(methodSignature)) {

View File

@@ -394,6 +394,8 @@ public class InvocationExprent extends Exprent {
}
}
else {
// TODO: tap into IDEA indices to access libraries methods details
// try to check the class on the classpath
Method mtd = ClasspathHelper.findMethod(classname, name, descriptor);
return mtd != null && mtd.isVarArgs();