From c17d7e63c8ca2fa0fbc4e7bc6f5c47536879ae4f Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Fri, 10 Aug 2018 09:17:46 +0300 Subject: [PATCH] Convert GradleImportingTestCase to Kotlin --- .../gradle/GradleImportingTestCase.kt | 373 +++++++++--------- 1 file changed, 177 insertions(+), 196 deletions(-) diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt index c27c8b639ae..5c30ffb31b8 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt @@ -13,223 +13,204 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.kotlin.idea.codeInsight.gradle; +package org.jetbrains.kotlin.idea.codeInsight.gradle -import com.intellij.compiler.server.BuildManager; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.PathManager; -import com.intellij.openapi.application.Result; -import com.intellij.openapi.application.WriteAction; -import com.intellij.openapi.externalSystem.model.ProjectSystemId; -import com.intellij.openapi.externalSystem.model.settings.ExternalSystemExecutionSettings; -import com.intellij.openapi.externalSystem.settings.ExternalSystemSettingsListenerAdapter; -import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; -import com.intellij.openapi.fileTypes.FileTypeManager; -import com.intellij.openapi.projectRoots.JavaSdk; -import com.intellij.openapi.projectRoots.ProjectJdkTable; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.ui.TestDialog; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.testFramework.IdeaTestUtil; -import com.intellij.util.PathUtil; -import com.intellij.util.containers.ContainerUtil; -import org.gradle.util.GradleVersion; -import org.gradle.wrapper.GradleWrapperMain; -import org.intellij.lang.annotations.Language; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.gradle.settings.DistributionType; -import org.jetbrains.plugins.gradle.settings.GradleProjectSettings; -import org.jetbrains.plugins.gradle.settings.GradleSettings; -import org.jetbrains.plugins.gradle.util.GradleConstants; -import org.jetbrains.plugins.groovy.GroovyFileType; -import org.junit.Rule; -import org.junit.rules.TestName; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Properties; - -import static org.junit.Assume.assumeThat; +import com.intellij.compiler.server.BuildManager +import com.intellij.openapi.application.PathManager +import com.intellij.openapi.application.Result +import com.intellij.openapi.application.WriteAction +import com.intellij.openapi.externalSystem.model.ProjectSystemId +import com.intellij.openapi.externalSystem.model.settings.ExternalSystemExecutionSettings +import com.intellij.openapi.externalSystem.settings.ExternalProjectSettings +import com.intellij.openapi.externalSystem.settings.ExternalSystemSettingsListenerAdapter +import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil +import com.intellij.openapi.fileTypes.FileTypeManager +import com.intellij.openapi.projectRoots.JavaSdk +import com.intellij.openapi.projectRoots.ProjectJdkTable +import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil +import com.intellij.openapi.ui.Messages +import com.intellij.openapi.ui.TestDialog +import com.intellij.openapi.util.io.FileUtil +import com.intellij.openapi.vfs.LocalFileSystem +import com.intellij.testFramework.IdeaTestUtil +import com.intellij.util.PathUtil +import com.intellij.util.containers.ContainerUtil +import junit.framework.TestCase +import org.gradle.util.GradleVersion +import org.gradle.wrapper.GradleWrapperMain +import org.intellij.lang.annotations.Language +import org.jetbrains.annotations.NonNls +import org.jetbrains.plugins.gradle.settings.DistributionType +import org.jetbrains.plugins.gradle.settings.GradleProjectSettings +import org.jetbrains.plugins.gradle.settings.GradleSettings +import org.jetbrains.plugins.gradle.util.GradleConstants +import org.jetbrains.plugins.groovy.GroovyFileType +import org.junit.Assume.assumeThat +import org.junit.Rule +import org.junit.rules.TestName +import org.junit.runner.RunWith +import org.junit.runners.Parameterized +import java.io.File +import java.io.IOException +import java.io.StringWriter +import java.net.URISyntaxException +import java.util.* // part of org.jetbrains.plugins.gradle.importing.GradleImportingTestCase -@RunWith(value = Parameterized.class) -public abstract class GradleImportingTestCase extends ExternalSystemImportingTestCase { - private static final String GRADLE_JDK_NAME = "Gradle JDK"; - private static final int GRADLE_DAEMON_TTL_MS = 10000; +@RunWith(value = Parameterized::class) +abstract class GradleImportingTestCase : ExternalSystemImportingTestCase() { - @Rule public TestName name = new TestName(); + @JvmField + @Rule + var name = TestName() - @Rule public VersionMatcherRule versionMatcherRule = new VersionMatcherRule(); + @JvmField + @Rule + var versionMatcherRule = VersionMatcherRule() - @SuppressWarnings({"NullableProblems", "WeakerAccess"}) @NotNull - @Parameterized.Parameter() public String gradleVersion; + @JvmField + @Parameterized.Parameter + var gradleVersion: String = "" - private GradleProjectSettings myProjectSettings; - private String myJdkHome; + private lateinit var myProjectSettings: GradleProjectSettings + private lateinit var myJdkHome: String - @Override - public void setUp() throws Exception { - myJdkHome = IdeaTestUtil.requireRealJdkHome(); - super.setUp(); - assumeThat(gradleVersion, versionMatcherRule.getMatcher()); - new WriteAction() { - @Override - protected void run(@NotNull Result result) throws Throwable { - Sdk oldJdk = ProjectJdkTable.getInstance().findJdk(GRADLE_JDK_NAME); - if (oldJdk != null) { - ProjectJdkTable.getInstance().removeJdk(oldJdk); - } - VirtualFile jdkHomeDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(new File(myJdkHome)); - assert jdkHomeDir != null; - Sdk jdk = SdkConfigurationUtil.setupSdk(new Sdk[0], jdkHomeDir, JavaSdk.getInstance(), true, null, GRADLE_JDK_NAME); - assertNotNull("Cannot create JDK for " + myJdkHome, jdk); - ProjectJdkTable.getInstance().addJdk(jdk); - FileTypeManager.getInstance().associateExtension(GroovyFileType.GROOVY_FILE_TYPE, "gradle"); + override fun setUp() { + myJdkHome = IdeaTestUtil.requireRealJdkHome() + super.setUp() + assumeThat(gradleVersion, versionMatcherRule.matcher) + runWrite { + ProjectJdkTable.getInstance().findJdk(GRADLE_JDK_NAME)?.let { + ProjectJdkTable.getInstance().removeJdk(it) } - }.execute(); - myProjectSettings = new GradleProjectSettings(); - GradleSettings.getInstance(myProject).setGradleVmOptions("-Xmx128m -XX:MaxPermSize=64m"); - System.setProperty(ExternalSystemExecutionSettings.REMOTE_PROCESS_IDLE_TTL_IN_MS_KEY, String.valueOf(GRADLE_DAEMON_TTL_MS)); - configureWrapper(); + val jdkHomeDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(File(myJdkHome))!! + val jdk = SdkConfigurationUtil.setupSdk(arrayOfNulls(0), jdkHomeDir, JavaSdk.getInstance(), true, null, GRADLE_JDK_NAME) + TestCase.assertNotNull("Cannot create JDK for $myJdkHome", jdk) + ProjectJdkTable.getInstance().addJdk(jdk!!) + FileTypeManager.getInstance().associateExtension(GroovyFileType.GROOVY_FILE_TYPE, "gradle") + + } + myProjectSettings = GradleProjectSettings() + GradleSettings.getInstance(myProject).gradleVmOptions = "-Xmx128m -XX:MaxPermSize=64m" + System.setProperty(ExternalSystemExecutionSettings.REMOTE_PROCESS_IDLE_TTL_IN_MS_KEY, GRADLE_DAEMON_TTL_MS.toString()) + configureWrapper() } - @Override - public void tearDown() throws Exception { - if (myJdkHome == null) { - //super.setUp() wasn't called - return; - } - + override fun tearDown() { try { - new WriteAction() { - @Override - protected void run(@NotNull Result result) throws Throwable { - Sdk old = ProjectJdkTable.getInstance().findJdk(GRADLE_JDK_NAME); - if (old != null) { - SdkConfigurationUtil.removeSdk(old); + runWrite { + val old = ProjectJdkTable.getInstance().findJdk(GRADLE_JDK_NAME) + if (old != null) { + SdkConfigurationUtil.removeSdk(old) + } + } + + Messages.setTestDialog(TestDialog.DEFAULT) + FileUtil.delete(BuildManager.getInstance().buildSystemDirectory.toFile()) + } finally { + super.tearDown() + } + } + + override fun collectAllowedRoots(roots: MutableList) { + roots.add(myJdkHome) + roots.addAll(ExternalSystemTestCase.collectRootsInside(myJdkHome)) + roots.add(PathManager.getConfigPath()) + } + + override fun getName(): String { + return if (name.methodName == null) super.getName() else FileUtil.sanitizeFileName(name.methodName) + } + + override fun getTestsTempDir(): String = "gradleImportTests" + + override fun getExternalSystemConfigFileName(): String = "build.gradle" + + protected fun importProjectUsingSingeModulePerGradleProject() { + myProjectSettings.isResolveModulePerSourceSet = false + importProject() + } + + override fun importProject() { + ExternalSystemApiUtil.subscribe( + myProject, + GradleConstants.SYSTEM_ID, + object : ExternalSystemSettingsListenerAdapter() { + override fun onProjectsLinked(settings: Collection) { + val item = ContainerUtil.getFirstItem(settings) + if (item is GradleProjectSettings) { + item.gradleJvm = GRADLE_JDK_NAME } } - }.execute(); - Messages.setTestDialog(TestDialog.DEFAULT); - FileUtil.delete(BuildManager.getInstance().getBuildSystemDirectory().toFile()); - } - finally { - super.tearDown(); - } + }) + super.importProject() } - @Override - protected void collectAllowedRoots(List roots) throws IOException { - roots.add(myJdkHome); - roots.addAll(collectRootsInside(myJdkHome)); - roots.add(PathManager.getConfigPath()); - } - - @Override - public String getName() { - return name.getMethodName() == null ? super.getName() : FileUtil.sanitizeFileName(name.getMethodName()); - } - - @Parameterized.Parameters(name = "{index}: with Gradle-{0}") - public static Collection data() throws Throwable { - return Arrays.asList(AbstractModelBuilderTest.SUPPORTED_GRADLE_VERSIONS); - } - - @Override - protected String getTestsTempDir() { - return "gradleImportTests"; - } - - @Override - protected String getExternalSystemConfigFileName() { - return "build.gradle"; - } - - protected void importProjectUsingSingeModulePerGradleProject() { - getCurrentExternalProjectSettings().setResolveModulePerSourceSet(false); - importProject(); - } - - @Override - protected void importProject() { - ExternalSystemApiUtil.subscribe(myProject, GradleConstants.SYSTEM_ID, new ExternalSystemSettingsListenerAdapter() { - @Override - public void onProjectsLinked(@NotNull Collection settings) { - Object item = ContainerUtil.getFirstItem(settings); - if (item instanceof GradleProjectSettings) { - ((GradleProjectSettings) item).setGradleJvm(GRADLE_JDK_NAME); + override fun importProject(@NonNls @Language("Groovy") config: String) { + super.importProject( + """ + allprojects { + repositories { + maven { + url 'http://maven.labs.intellij.net/repo1' + } + } } + + $config + """.trimIndent() + ) + } + + override fun getCurrentExternalProjectSettings(): GradleProjectSettings = myProjectSettings + + override fun getExternalSystemId(): ProjectSystemId = GradleConstants.SYSTEM_ID + + @Throws(IOException::class, URISyntaxException::class) + private fun configureWrapper() { + val distributionUri = AbstractModelBuilderTest.DistributionLocator().getDistributionFor(GradleVersion.version(gradleVersion)) + + myProjectSettings.distributionType = DistributionType.DEFAULT_WRAPPED + val wrapperJarFrom = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(wrapperJar())!! + + val wrapperJarFromTo = createProjectSubFile("gradle/wrapper/gradle-wrapper.jar") + runWrite { + wrapperJarFromTo.setBinaryContent(wrapperJarFrom.contentsToByteArray()) + } + + val properties = Properties() + properties.setProperty("distributionBase", "GRADLE_USER_HOME") + properties.setProperty("distributionPath", "wrapper/dists") + properties.setProperty("zipStoreBase", "GRADLE_USER_HOME") + properties.setProperty("zipStorePath", "wrapper/dists") + properties.setProperty("distributionUrl", distributionUri.toString()) + + val writer = StringWriter() + properties.store(writer, null) + + createProjectSubFile("gradle/wrapper/gradle-wrapper.properties", writer.toString()) + } + + private fun runWrite(f: () -> Unit) { + object : WriteAction() { + override fun run(result: Result) { + f() } - }); - super.importProject(); + }.execute() } - @Override - protected void importProject(@NonNls @Language("Groovy") String config) throws IOException { - config = "allprojects {\n" + - " repositories {\n" + - " maven {\n" + - " url 'http://maven.labs.intellij.net/repo1'\n" + - " }\n" + - " }" + - "}\n" + config; - super.importProject(config); - } + companion object { + private const val GRADLE_JDK_NAME = "Gradle JDK" + private const val GRADLE_DAEMON_TTL_MS = 10000 - @Override - protected GradleProjectSettings getCurrentExternalProjectSettings() { - return myProjectSettings; - } + @JvmStatic + @Parameterized.Parameters(name = "{index}: with Gradle-{0}") + fun data(): Collection> { + return Arrays.asList(*AbstractModelBuilderTest.SUPPORTED_GRADLE_VERSIONS) + } - @Override - protected ProjectSystemId getExternalSystemId() { - return GradleConstants.SYSTEM_ID; - } - - private void configureWrapper() throws IOException, URISyntaxException { - URI distributionUri = new AbstractModelBuilderTest.DistributionLocator().getDistributionFor(GradleVersion.version(gradleVersion)); - - myProjectSettings.setDistributionType(DistributionType.DEFAULT_WRAPPED); - final VirtualFile wrapperJarFrom = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(wrapperJar()); - assert wrapperJarFrom != null; - - final VirtualFile wrapperJarFromTo = createProjectSubFile("gradle/wrapper/gradle-wrapper.jar"); - new WriteAction() { - @Override - protected void run(@NotNull Result result) throws Throwable { - wrapperJarFromTo.setBinaryContent(wrapperJarFrom.contentsToByteArray()); - } - }.execute().throwException(); - - - Properties properties = new Properties(); - properties.setProperty("distributionBase", "GRADLE_USER_HOME"); - properties.setProperty("distributionPath", "wrapper/dists"); - properties.setProperty("zipStoreBase", "GRADLE_USER_HOME"); - properties.setProperty("zipStorePath", "wrapper/dists"); - properties.setProperty("distributionUrl", distributionUri.toString()); - - StringWriter writer = new StringWriter(); - properties.store(writer, null); - - createProjectSubFile("gradle/wrapper/gradle-wrapper.properties", writer.toString()); - } - - @NotNull - private static File wrapperJar() { - return new File(PathUtil.getJarPathForClass(GradleWrapperMain.class)); + private fun wrapperJar(): File { + return File(PathUtil.getJarPathForClass(GradleWrapperMain::class.java)) + } } }