[platform] move createMockJdk from JavaSdkImpl to IdeaTestUtil

The method is used in tests only so it should live in production class.

GitOrigin-RevId: 0780fa49cc95bd290fcfe49c729a0064226b3116
This commit is contained in:
Nikolay Chashnikov
2020-04-23 14:54:33 +00:00
committed by intellij-monorepo-bot
parent b6a0a067fb
commit 867b20e082
5 changed files with 49 additions and 50 deletions
@@ -32,12 +32,11 @@ import com.intellij.openapi.vfs.newvfs.events.VFileEvent;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.util.PathUtil;
import com.intellij.util.containers.JBIterable;
import com.intellij.util.containers.MultiMap;
import com.intellij.util.lang.JavaVersion;
import org.jdom.Element;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
import org.jetbrains.jps.model.java.JdkVersionDetector;
import org.jetbrains.jps.model.java.impl.JavaSdkUtil;
@@ -399,44 +398,8 @@ public final class JavaSdkImpl extends JavaSdk {
return jdk;
}
@NotNull
@TestOnly
public Sdk createMockJdk(@NotNull String jdkName, @NotNull String home, boolean isJre) {
String homePath = PathUtil.toSystemIndependentName(home);
File jdkHomeFile = new File(homePath);
MultiMap<OrderRootType, VirtualFile> roots = MultiMap.create();
SdkModificator sdkModificator = new SdkModificator() {
@NotNull
@Override public String getName() { throw new UnsupportedOperationException(); }
@Override public void setName(@NotNull String name) { throw new UnsupportedOperationException(); }
@Override public String getHomePath() { throw new UnsupportedOperationException(); }
@Override public void setHomePath(String path) { throw new UnsupportedOperationException(); }
@Override public String getVersionString() { throw new UnsupportedOperationException(); }
@Override public void setVersionString(String versionString) { throw new UnsupportedOperationException(); }
@Override public SdkAdditionalData getSdkAdditionalData() { throw new UnsupportedOperationException(); }
@Override public void setSdkAdditionalData(SdkAdditionalData data) { throw new UnsupportedOperationException(); }
@Override public VirtualFile @NotNull [] getRoots(@NotNull OrderRootType rootType) { return roots.get(rootType).toArray(VirtualFile.EMPTY_ARRAY); }
@Override public void removeRoot(@NotNull VirtualFile root, @NotNull OrderRootType rootType) { throw new UnsupportedOperationException(); }
@Override public void removeRoots(@NotNull OrderRootType rootType) { throw new UnsupportedOperationException(); }
@Override public void removeAllRoots() { throw new UnsupportedOperationException(); }
@Override public void commitChanges() { throw new UnsupportedOperationException(); }
@Override public boolean isWritable() { throw new UnsupportedOperationException(); }
@Override
public void addRoot(@NotNull VirtualFile root, @NotNull OrderRootType rootType) {
roots.putValue(rootType, root);
}
};
addClasses(jdkHomeFile, sdkModificator, isJre);
addSources(jdkHomeFile, sdkModificator);
attachJdkAnnotations(sdkModificator);
return new MockSdk(jdkName, homePath, jdkName, roots, this);
}
private static void addClasses(@NotNull File file, @NotNull SdkModificator sdkModificator, boolean isJre) {
@ApiStatus.Internal
public static void addClasses(@NotNull File file, @NotNull SdkModificator sdkModificator, boolean isJre) {
for (String url : findClasses(file, isJre)) {
sdkModificator.addRoot(url, OrderRootType.CLASSES);
}
@@ -504,8 +467,8 @@ public final class JavaSdkImpl extends JavaSdk {
return result;
}
private static void addSources(@NotNull File jdkHome, @NotNull SdkModificator sdkModificator) {
@ApiStatus.Internal
public static void addSources(@NotNull File jdkHome, @NotNull SdkModificator sdkModificator) {
VirtualFile jdkSrc = findSources(jdkHome, "src");
if (jdkSrc != null) {
if (jdkSrc.findChild("java.base") != null) {
@@ -4,7 +4,7 @@ package com.intellij.java.codeInsight.daemon
import com.intellij.codeInspection.javaDoc.JavadocHtmlLintInspection
import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl
import com.intellij.testFramework.IdeaTestUtil
import com.intellij.testFramework.LightProjectDescriptor
import com.intellij.testFramework.fixtures.DefaultLightProjectDescriptor
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
@@ -15,7 +15,7 @@ private val DESCRIPTOR = object : DefaultLightProjectDescriptor() {
override fun getSdk(): Sdk? {
val jreHome = File(System.getProperty("java.home"))
val jdkHome = if (jreHome.name == "jre") jreHome.parentFile else jreHome
return (JavaSdk.getInstance() as JavaSdkImpl).createMockJdk("java version \"{${JavaVersion.current()}}\"", jdkHome.path, false)
return IdeaTestUtil.createMockJdk("java version \"{${JavaVersion.current()}}\"", jdkHome.path)
}
}
@@ -7,6 +7,7 @@ import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.projectRoots.*;
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
import com.intellij.openapi.projectRoots.impl.MockSdk;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.roots.impl.libraries.LibraryEx;
import com.intellij.openapi.util.Disposer;
@@ -18,6 +19,7 @@ import com.intellij.util.ArrayUtilRt;
import com.intellij.util.PathUtil;
import com.intellij.util.SystemProperties;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
import com.intellij.util.lang.JavaVersion;
import org.jetbrains.annotations.*;
import org.junit.Assert;
@@ -76,13 +78,49 @@ public final class IdeaTestUtil {
return createMockJdk("java " + version, path);
}
private static @NotNull Sdk createMockJdk(@NotNull String name, @NotNull String path) {
public static @NotNull Sdk createMockJdk(@NotNull String name, @NotNull String path) {
return createMockJdk(name, path, false);
}
public static @NotNull Sdk createMockJdk(@NotNull String name, @NotNull String path, boolean isJre) {
JavaSdk javaSdk = JavaSdk.getInstance();
if (javaSdk == null) {
throw new AssertionError("The test uses classes from Java plugin but Java plugin wasn't loaded; make sure that Java plugin " +
"classes are included into classpath and that the plugin isn't disabled by using 'idea.load.plugins', 'idea.load.plugins.id', 'idea.load.plugins.category' system properties");
}
return ((JavaSdkImpl)javaSdk).createMockJdk(name, path, false);
String homePath = PathUtil.toSystemIndependentName(path);
File jdkHomeFile = new File(homePath);
MultiMap<OrderRootType, VirtualFile> roots = MultiMap.create();
SdkModificator sdkModificator = new SdkModificator() {
@NotNull
@Override public String getName() { throw new UnsupportedOperationException(); }
@Override public void setName(@NotNull String name1) { throw new UnsupportedOperationException(); }
@Override public String getHomePath() { throw new UnsupportedOperationException(); }
@Override public void setHomePath(String path1) { throw new UnsupportedOperationException(); }
@Override public String getVersionString() { throw new UnsupportedOperationException(); }
@Override public void setVersionString(String versionString) { throw new UnsupportedOperationException(); }
@Override public SdkAdditionalData getSdkAdditionalData() { throw new UnsupportedOperationException(); }
@Override public void setSdkAdditionalData(SdkAdditionalData data) { throw new UnsupportedOperationException(); }
@Override public VirtualFile @NotNull [] getRoots(@NotNull OrderRootType rootType) { return roots.get(rootType).toArray(VirtualFile.EMPTY_ARRAY); }
@Override public void removeRoot(@NotNull VirtualFile root, @NotNull OrderRootType rootType) { throw new UnsupportedOperationException(); }
@Override public void removeRoots(@NotNull OrderRootType rootType) { throw new UnsupportedOperationException(); }
@Override public void removeAllRoots() { throw new UnsupportedOperationException(); }
@Override public void commitChanges() { throw new UnsupportedOperationException(); }
@Override public boolean isWritable() { throw new UnsupportedOperationException(); }
@Override
public void addRoot(@NotNull VirtualFile root, @NotNull OrderRootType rootType) {
roots.putValue(rootType, root);
}
};
JavaSdkImpl.addClasses(jdkHomeFile, sdkModificator, isJre);
JavaSdkImpl.addSources(jdkHomeFile, sdkModificator);
JavaSdkImpl.attachJdkAnnotations(sdkModificator);
return new MockSdk(name, homePath, name, roots, javaSdk);
}
public static @NotNull Sdk getMockJdk14() {
@@ -158,7 +158,7 @@ class ExternalSystemJdkUtilTest : UsefulTestCase() {
val path = jdkDir.absolutePath
assertThat(isValidJdk(path)).`as`("Mock JDK at $path is expected to pass validation by com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil.isValidJdk() " +
"Please, check validation code and update mock accordingly").isTrue()
return (JavaSdkImpl.getInstance() as JavaSdkImpl).createMockJdk(jdkVersionStr, path, false)
return IdeaTestUtil.createMockJdk(jdkVersionStr, path)
}
}
@@ -1,9 +1,7 @@
package org.jetbrains.plugins.javaFX.fxml;
import com.intellij.java.codeInsight.daemon.impl.SdkSetupNotificationTestBase;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.testFramework.IdeaTestUtil;
import com.intellij.ui.EditorNotificationPanel;
@@ -38,6 +36,6 @@ public class JavaFxSdkSetupNotificationTest extends SdkSetupNotificationTestBase
@NotNull
private static Sdk getTestJdk() {
return ((JavaSdkImpl)JavaSdk.getInstance()).createMockJdk("testJdk", System.getProperty("java.home"), true);
return IdeaTestUtil.createMockJdk("testJdk", System.getProperty("java.home"), true);
}
}