From fbda2a4343042e71dccba5de54c08273b9a53cd2 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 20 Oct 2017 14:07:05 +0200 Subject: [PATCH] Do not use MockLibraryUtil in AbstractTopLevelMembersInvocationTest MockLibraryUtil runs the compiler in the new class loader, which is useful for IDE tests to avoid loading KotlinCoreEnvironment, but is not needed and is suboptimal for compiler tests. Also use another method in AbstractForeignAnnotationsTest to assert that there are no files in the compiled libraries --- .../jetbrains/kotlin/test/CompilerTestUtil.kt | 25 +++++++++++++++++++ .../AbstractForeignAnnotationsTest.kt | 4 +-- ...AbstractTopLevelMembersInvocationTest.java | 4 +-- 3 files changed, 29 insertions(+), 4 deletions(-) rename compiler/{tests-common => }/tests/org/jetbrains/kotlin/codegen/AbstractTopLevelMembersInvocationTest.java (94%) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/test/CompilerTestUtil.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/test/CompilerTestUtil.kt index 66482c0cd62..38206c3b802 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/test/CompilerTestUtil.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/test/CompilerTestUtil.kt @@ -18,7 +18,9 @@ package org.jetbrains.kotlin.test import org.jetbrains.kotlin.cli.common.CLITool import org.jetbrains.kotlin.cli.common.ExitCode +import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler import java.io.ByteArrayOutputStream +import java.io.File import java.io.PrintStream import kotlin.test.assertEquals @@ -42,4 +44,27 @@ object CompilerTestUtil { System.setErr(origErr) } } + + @JvmStatic + @JvmOverloads + fun compileJvmLibrary( + src: File, + libraryName: String = "library", + extraOptions: List = emptyList(), + extraClasspath: List = emptyList() + ): File { + val destination = File(KotlinTestUtils.tmpDir("testLibrary"), "$libraryName.jar") + val args = mutableListOf().apply { + add(src.path) + add("-d") + add(destination.path) + if (extraClasspath.isNotEmpty()) { + add("-cp") + add(extraClasspath.joinToString(":") { it.path }) + } + addAll(extraOptions) + } + executeCompilerAssertSuccessful(K2JVMCompiler(), args) + return destination + } } diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt index 702f757c01c..d8b8a673f0c 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt @@ -40,7 +40,7 @@ abstract class AbstractForeignAnnotationsTest : AbstractDiagnosticsTest() { } protected fun compileTestAnnotations(extraClassPath: List): List = - listOf(MockLibraryUtil.compileJvmLibraryToJar( + listOf(MockLibraryUtil.compileJavaFilesLibraryToJar( TEST_ANNOTATIONS_SOURCE_PATH, "test-foreign-annotations", extraOptions = listOf("-Xallow-kotlin-package"), @@ -48,7 +48,7 @@ abstract class AbstractForeignAnnotationsTest : AbstractDiagnosticsTest() { )) protected fun createJarWithForeignAnnotations(): List = listOf( - MockLibraryUtil.compileJvmLibraryToJar(annotationsPath, "foreign-annotations"), + MockLibraryUtil.compileJavaFilesLibraryToJar(annotationsPath, "foreign-annotations"), ForTestCompileRuntime.jvmAnnotationsForTests() ) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractTopLevelMembersInvocationTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractTopLevelMembersInvocationTest.java similarity index 94% rename from compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractTopLevelMembersInvocationTest.java rename to compiler/tests/org/jetbrains/kotlin/codegen/AbstractTopLevelMembersInvocationTest.java index c9fa018bb83..4e936028ee8 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractTopLevelMembersInvocationTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractTopLevelMembersInvocationTest.java @@ -22,9 +22,9 @@ import kotlin.collections.CollectionsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; +import org.jetbrains.kotlin.test.CompilerTestUtil; import org.jetbrains.kotlin.test.ConfigurationKind; import org.jetbrains.kotlin.test.KotlinTestUtils; -import org.jetbrains.kotlin.test.MockLibraryUtil; import org.jetbrains.kotlin.test.TestJdkKind; import java.io.File; @@ -52,7 +52,7 @@ public abstract class AbstractTopLevelMembersInvocationTest extends AbstractByte File library = new File(root, LIBRARY); List classPath = library.exists() - ? Collections.singletonList(MockLibraryUtil.compileJvmLibraryToJar(library.getPath(), LIBRARY)) + ? Collections.singletonList(CompilerTestUtil.compileJvmLibrary(library)) : Collections.emptyList(); assert !sourceFiles.isEmpty() : getTestName(true) + " should contain at least one .kt file";