diff --git a/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java b/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java index 62492845588c..4e85f4aa9b8f 100644 --- a/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java +++ b/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java @@ -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 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) { diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocHtmlLintInspectionTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocHtmlLintInspectionTest.kt index 8a066512d8ac..ae3d7cab6071 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocHtmlLintInspectionTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocHtmlLintInspectionTest.kt @@ -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) } } diff --git a/java/testFramework/src/com/intellij/testFramework/IdeaTestUtil.java b/java/testFramework/src/com/intellij/testFramework/IdeaTestUtil.java index bfc944b3ffc2..97f259f24124 100644 --- a/java/testFramework/src/com/intellij/testFramework/IdeaTestUtil.java +++ b/java/testFramework/src/com/intellij/testFramework/IdeaTestUtil.java @@ -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 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() { diff --git a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/service/execution/ExternalSystemJdkUtilTest.kt b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/service/execution/ExternalSystemJdkUtilTest.kt index 3db733a772ee..6157821ddf56 100644 --- a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/service/execution/ExternalSystemJdkUtilTest.kt +++ b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/service/execution/ExternalSystemJdkUtilTest.kt @@ -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) } } diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxSdkSetupNotificationTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxSdkSetupNotificationTest.java index 852f15736c82..0ab7ba21b286 100644 --- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxSdkSetupNotificationTest.java +++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxSdkSetupNotificationTest.java @@ -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); } }