From 539d7ccf6fd3f8582bffbdd4163003625774164d Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Mon, 5 Sep 2016 10:58:13 +0300 Subject: [PATCH] Support configuration directives FULL_JDK, WITH_RUNTIME, WITH_REFLECT in Psi2Ir tests. --- .../kotlin/ir/AbstractIrGeneratorTestCase.kt | 41 ++++++++++++++++++- .../ir/AbstractPsi2IrAcceptanceTestCase.kt | 2 +- .../ir/irText/classes/classMembers.kt | 2 + compiler/testData/ir/irText/classes/enum.kt | 2 + .../testData/ir/irText/classes/initBlock.kt | 2 + .../classes/objectLiteralExpressions.kt | 2 + .../declarations/delegatedProperties.kt | 2 + .../declarations/localDelegatedProperties.kt | 2 + .../testData/ir/irText/expressions/for.kt | 2 + .../expressions/forWithImplicitReceivers.kt | 2 + .../ir/irText/expressions/smartCasts.kt | 2 + .../ir/irText/expressions/tryCatch.kt | 2 + .../testData/ir/irText/expressions/when.kt | 2 + .../ir/irText/lambdas/anonymousFunction.kt | 2 + .../ir/irText/lambdas/nonLocalReturn.kt | 2 + 15 files changed, 67 insertions(+), 2 deletions(-) diff --git a/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt index 5e9736ce66b..bfa42b88b17 100644 --- a/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt +++ b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt @@ -16,6 +16,8 @@ package org.jetbrains.kotlin.ir +import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.codegen.CodegenTestCase import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration @@ -23,15 +25,52 @@ import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator import org.jetbrains.kotlin.resolve.AnalyzingUtils import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil import org.jetbrains.kotlin.test.ConfigurationKind +import org.jetbrains.kotlin.test.InTextDirectivesUtils +import org.jetbrains.kotlin.test.KotlinTestUtils.getAnnotationsJar import java.io.File +import java.util.* abstract class AbstractIrGeneratorTestCase : CodegenTestCase() { override fun doMultiFileTest(wholeFile: File, files: List, javaFilesDir: File?) { - createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL, files, javaFilesDir) + setupEnvironment(files, javaFilesDir) + loadMultiFiles(files) doTest(wholeFile, files) } + private fun setupEnvironment(files: List, javaFilesDir: File?) { + val jdkKind = getJdkKind(files) + + val javacOptions = ArrayList(0) + var addRuntime = false + var addReflect = false + for (file in files) { + if (InTextDirectivesUtils.isDirectiveDefined(file.content, "WITH_RUNTIME")) { + addRuntime = true + } + if (InTextDirectivesUtils.isDirectiveDefined(file.content, "WITH_REFLECT")) { + addReflect = true + } + + javacOptions.addAll(InTextDirectivesUtils.findListWithPrefixes(file.content, "// JAVAC_OPTIONS:")) + } + + val configurationKind = when { + addReflect -> ConfigurationKind.ALL + addRuntime -> ConfigurationKind.NO_KOTLIN_REFLECT + else -> ConfigurationKind.JDK_ONLY + }; + + val configuration = createConfiguration( + configurationKind, jdkKind, + listOf(getAnnotationsJar()), + arrayOf(javaFilesDir).filterNotNull(), + files + ) + + myEnvironment = KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) + } + protected abstract fun doTest(wholeFile: File, testFiles: List) protected fun generateIrFilesAsSingleModule(testFiles: List, ignoreErrors: Boolean = false): Map { diff --git a/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractPsi2IrAcceptanceTestCase.kt b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractPsi2IrAcceptanceTestCase.kt index 6112085d970..c98774643d7 100644 --- a/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractPsi2IrAcceptanceTestCase.kt +++ b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractPsi2IrAcceptanceTestCase.kt @@ -21,6 +21,6 @@ import java.io.File abstract class AbstractPsi2IrAcceptanceTestCase : AbstractIrGeneratorTestCase() { override fun doTest(wholeFile: File, testFiles: List) { // Just make sure that nothing interesting happens - e.g., no exceptions thrown - generateIrFilesAsSingleModule(testFiles, true) + generateIrFilesAsSingleModule(testFiles, false) } } diff --git a/compiler/testData/ir/irText/classes/classMembers.kt b/compiler/testData/ir/irText/classes/classMembers.kt index b5d045ae4cc..bc3d7d96adf 100644 --- a/compiler/testData/ir/irText/classes/classMembers.kt +++ b/compiler/testData/ir/irText/classes/classMembers.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + class C(x: Int, val y: Int, var z: Int = 1) { constructor() : this(0, 0, 0) {} diff --git a/compiler/testData/ir/irText/classes/enum.kt b/compiler/testData/ir/irText/classes/enum.kt index f6ecb1702bb..d0e2b8962f7 100644 --- a/compiler/testData/ir/irText/classes/enum.kt +++ b/compiler/testData/ir/irText/classes/enum.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + enum class TestEnum1 { TEST1, TEST2 } diff --git a/compiler/testData/ir/irText/classes/initBlock.kt b/compiler/testData/ir/irText/classes/initBlock.kt index 22761236e4a..81f686caf0a 100644 --- a/compiler/testData/ir/irText/classes/initBlock.kt +++ b/compiler/testData/ir/irText/classes/initBlock.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + class Test1 { init { println() diff --git a/compiler/testData/ir/irText/classes/objectLiteralExpressions.kt b/compiler/testData/ir/irText/classes/objectLiteralExpressions.kt index 82f1fdd0700..9539eecf0ec 100644 --- a/compiler/testData/ir/irText/classes/objectLiteralExpressions.kt +++ b/compiler/testData/ir/irText/classes/objectLiteralExpressions.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + interface IFoo { fun foo() } diff --git a/compiler/testData/ir/irText/declarations/delegatedProperties.kt b/compiler/testData/ir/irText/declarations/delegatedProperties.kt index add3eef2c0b..75f06e72412 100644 --- a/compiler/testData/ir/irText/declarations/delegatedProperties.kt +++ b/compiler/testData/ir/irText/declarations/delegatedProperties.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + val test1 by lazy { 42 } class C(val map: MutableMap) { diff --git a/compiler/testData/ir/irText/declarations/localDelegatedProperties.kt b/compiler/testData/ir/irText/declarations/localDelegatedProperties.kt index 451196033e5..8bd2f51c64b 100644 --- a/compiler/testData/ir/irText/declarations/localDelegatedProperties.kt +++ b/compiler/testData/ir/irText/declarations/localDelegatedProperties.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + fun test1() { val x by lazy { 42 } println(x) diff --git a/compiler/testData/ir/irText/expressions/for.kt b/compiler/testData/ir/irText/expressions/for.kt index 6d780f0805f..4c0985ad1e5 100644 --- a/compiler/testData/ir/irText/expressions/for.kt +++ b/compiler/testData/ir/irText/expressions/for.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + fun testEmpty(ss: List) { for (s in ss); } diff --git a/compiler/testData/ir/irText/expressions/forWithImplicitReceivers.kt b/compiler/testData/ir/irText/expressions/forWithImplicitReceivers.kt index 4461b3bb33c..3917d42a211 100644 --- a/compiler/testData/ir/irText/expressions/forWithImplicitReceivers.kt +++ b/compiler/testData/ir/irText/expressions/forWithImplicitReceivers.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + object FiveTimes class IntCell(var value: Int) diff --git a/compiler/testData/ir/irText/expressions/smartCasts.kt b/compiler/testData/ir/irText/expressions/smartCasts.kt index 8f6c1e21deb..1dd710ef962 100644 --- a/compiler/testData/ir/irText/expressions/smartCasts.kt +++ b/compiler/testData/ir/irText/expressions/smartCasts.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + fun expectsString(s: String) {} fun expectsInt(i: Int) {} diff --git a/compiler/testData/ir/irText/expressions/tryCatch.kt b/compiler/testData/ir/irText/expressions/tryCatch.kt index f0ddffd83c7..0f77f2de04d 100644 --- a/compiler/testData/ir/irText/expressions/tryCatch.kt +++ b/compiler/testData/ir/irText/expressions/tryCatch.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + fun test1() { try { println() diff --git a/compiler/testData/ir/irText/expressions/when.kt b/compiler/testData/ir/irText/expressions/when.kt index 42ab5558fa0..fb4c3d2243c 100644 --- a/compiler/testData/ir/irText/expressions/when.kt +++ b/compiler/testData/ir/irText/expressions/when.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + object A fun testWithSubject(x: Any?) = diff --git a/compiler/testData/ir/irText/lambdas/anonymousFunction.kt b/compiler/testData/ir/irText/lambdas/anonymousFunction.kt index 374bb644190..60dc65084ac 100644 --- a/compiler/testData/ir/irText/lambdas/anonymousFunction.kt +++ b/compiler/testData/ir/irText/lambdas/anonymousFunction.kt @@ -1 +1,3 @@ +// WITH_RUNTIME + val anonymous = fun() { println() } \ No newline at end of file diff --git a/compiler/testData/ir/irText/lambdas/nonLocalReturn.kt b/compiler/testData/ir/irText/lambdas/nonLocalReturn.kt index 80d282ae0eb..4acc4049f71 100644 --- a/compiler/testData/ir/irText/lambdas/nonLocalReturn.kt +++ b/compiler/testData/ir/irText/lambdas/nonLocalReturn.kt @@ -1,3 +1,5 @@ +// WITH_RUNTIME + fun test0() { run { return