Use bootstrap classloader to only provide access to JRE classes

master
Dmitry Cherniachenko 8 years ago committed by Egor.Ushakov
parent 592a24cd85
commit 5de2e5b11b
  1. 3
      src/org/jetbrains/java/decompiler/modules/decompiler/ClasspathHelper.java
  2. 2
      src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java

@ -30,7 +30,8 @@ public class ClasspathHelper {
private static Method findMethodOnClasspath(String targetClass, String methodSignature) { private static Method findMethodOnClasspath(String targetClass, String methodSignature) {
try { 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()) { for (Method mtd : cls.getMethods()) {
// use contains() to ignore access modifiers and thrown exceptions // use contains() to ignore access modifiers and thrown exceptions
if (mtd.toString().contains(methodSignature)) { if (mtd.toString().contains(methodSignature)) {

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

Loading…
Cancel
Save