diff --git a/plugins/devkit/src/run/JUnitDevKitPatcher.java b/plugins/devkit/src/run/JUnitDevKitPatcher.java index 9a418492313a..ff7cfe9f8b73 100644 --- a/plugins/devkit/src/run/JUnitDevKitPatcher.java +++ b/plugins/devkit/src/run/JUnitDevKitPatcher.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,13 +18,12 @@ package org.jetbrains.idea.devkit.run; import com.intellij.execution.JUnitPatcher; import com.intellij.execution.configurations.JavaParameters; import com.intellij.execution.configurations.ParametersList; -import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.projectRoots.JavaSdkType; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkAdditionalData; -import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.io.FileUtil; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; @@ -49,37 +48,32 @@ public class JUnitDevKitPatcher extends JUnitPatcher { private static final String SYSTEM_CL_PROPERTY = "java.system.class.loader"; @Override - public void patchJavaParameters(@Nullable final Module module, JavaParameters javaParameters) { - if (module != null && PsiUtil.isIdeaProject(module.getProject()) && !javaParameters.getVMParametersList().hasProperty(SYSTEM_CL_PROPERTY)) { - final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(module.getProject()); - final String qualifiedName = UrlClassLoader.class.getName(); - final PsiClass urlLoaderClass = ApplicationManager.getApplication().runReadAction(new Computable() { - @Override - public PsiClass compute() { - return psiFacade.findClass(qualifiedName, GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module)); - } - }); - if (urlLoaderClass != null) { - javaParameters.getVMParametersList().addProperty(SYSTEM_CL_PROPERTY, qualifiedName); + public void patchJavaParameters(@Nullable Module module, JavaParameters javaParameters) { + Sdk jdk = IdeaJdk.findIdeaJdk(javaParameters.getJdk()); + if (jdk == null) return; + + ParametersList vm = javaParameters.getVMParametersList(); + + if (module != null && PsiUtil.isIdeaProject(module.getProject()) && !vm.hasProperty(SYSTEM_CL_PROPERTY)) { + JavaPsiFacade facade = JavaPsiFacade.getInstance(module.getProject()); + String qualifiedName = UrlClassLoader.class.getName(); + PsiClass loader = ReadAction.compute(() -> facade.findClass(qualifiedName, GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module))); + if (loader != null) { + vm.addProperty(SYSTEM_CL_PROPERTY, qualifiedName); } } - Sdk jdk = javaParameters.getJdk(); - jdk = IdeaJdk.findIdeaJdk(jdk); - if (jdk == null) return; - String libPath = jdk.getHomePath() + File.separator + "lib"; - - final ParametersList vm = javaParameters.getVMParametersList(); vm.add("-Xbootclasspath/a:" + libPath + File.separator + "boot.jar"); + if (!vm.hasProperty("idea.load.plugins.id") && module != null && PluginModuleType.isOfType(module)) { - final String id = DescriptorUtil.getPluginId(module); + String id = DescriptorUtil.getPluginId(module); if (id != null) { vm.defineProperty("idea.load.plugins.id", id); } } - final File sandboxHome = getSandboxPath(jdk); + File sandboxHome = getSandboxPath(jdk); if (sandboxHome != null) { if (!vm.hasProperty("idea.home.path")) { File homeDir = new File(sandboxHome, "test");