diff --git a/platform/platform-impl/src/com/intellij/idea/StartupUtil.java b/platform/platform-impl/src/com/intellij/idea/StartupUtil.java index 82a923fad91f..0c7079eb9f94 100644 --- a/platform/platform-impl/src/com/intellij/idea/StartupUtil.java +++ b/platform/platform-impl/src/com/intellij/idea/StartupUtil.java @@ -41,6 +41,7 @@ import javax.swing.*; import java.io.File; import java.io.IOException; import java.lang.management.ManagementFactory; +import java.lang.reflect.Method; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; import java.nio.charset.StandardCharsets; @@ -58,6 +59,7 @@ import java.util.Random; */ public class StartupUtil { public static final String NO_SPLASH = "nosplash"; + public static final String IDEA_CLASS_BEFORE_APPLICATION_PROPERTY = "idea.class.before.app"; private static SocketLock ourSocketLock; @@ -82,6 +84,19 @@ public class StartupUtil { default void beforeImportConfigs() {} } + private static void runPreAppClass(Logger log) { + String classBeforeAppProperty = System.getProperty(IDEA_CLASS_BEFORE_APPLICATION_PROPERTY); + if (classBeforeAppProperty != null) { + try { + Class clazz = Class.forName(classBeforeAppProperty); + Method invokeMethod = clazz.getDeclaredMethod("invoke"); + invokeMethod.invoke(null); + } catch (Exception ex) { + log.error("Failed pre-app class init for class " + classBeforeAppProperty, ex); + } + } + } + static void prepareAndStart(String[] args, AppStarter appStarter) { IdeaForkJoinWorkerThreadFactory.setupForkJoinCommonPool(Main.isHeadless(args)); boolean newConfigFolder = false; @@ -132,6 +147,8 @@ public class StartupUtil { loadSystemLibraries(log); fixProcessEnvironment(log); + runPreAppClass(log); + if (!Main.isHeadless()) { UIUtil.initDefaultLAF(); }