From 33acc2408998caadf106dfa033746b07156ce6a5 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 19 Apr 2017 14:37:18 +0300 Subject: [PATCH] class loaders for jdk9 --- .../intellij/ide/BootstrapClassLoaderUtil.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/platform/bootstrap/src/com/intellij/ide/BootstrapClassLoaderUtil.java b/platform/bootstrap/src/com/intellij/ide/BootstrapClassLoaderUtil.java index 72f186746272..809964954a13 100644 --- a/platform/bootstrap/src/com/intellij/ide/BootstrapClassLoaderUtil.java +++ b/platform/bootstrap/src/com/intellij/ide/BootstrapClassLoaderUtil.java @@ -19,6 +19,7 @@ import com.intellij.ide.startup.StartupActionScriptManager; import com.intellij.idea.Main; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.lang.UrlClassLoader; import com.intellij.util.text.StringTokenizer; @@ -66,6 +67,21 @@ public class BootstrapClassLoaderUtil extends ClassUtilCore { builder.allowBootstrapResources(); } + if (SystemInfo.IS_AT_LEAST_JAVA9) { + // since we can't access rt.jar under jdk9, we need a parent class loader to load standard jdk classes + ClassLoader appLoader = BootstrapClassLoaderUtil.class.getClassLoader(); + ClassLoader parent; + try { + appLoader.loadClass("org.picocontainer.PicoInitializationException"); + // the minor WTF is that we use different class loaders when starting IDEA from IDEA + parent = appLoader; + } + catch (ClassNotFoundException e) { + parent = appLoader.getParent(); // use platform class loader for main IDEA start to load only JDK classes with it + } + builder.parent(parent); + } + UrlClassLoader newClassLoader = builder.get(); // prepare plugins