diff --git a/compiler/ir/ir.tests/ir.tests.iml b/compiler/ir/ir.tests/ir.tests.iml
index d50982cac59..dd62ebb2b25 100644
--- a/compiler/ir/ir.tests/ir.tests.iml
+++ b/compiler/ir/ir.tests/ir.tests.iml
@@ -16,5 +16,6 @@
+
\ No newline at end of file
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 0f41f8e1c1b..4e211effa2e 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
@@ -20,11 +20,14 @@ import junit.framework.TestCase
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.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrModule
+import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
import org.jetbrains.kotlin.resolve.AnalyzingUtils
+import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.InTextDirectivesUtils
@@ -80,14 +83,7 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
protected fun generateIrModule(ignoreErrors: Boolean = false): IrModule {
assert(myFiles != null) { "myFiles not initialized" }
assert(myEnvironment != null) { "myEnvironment not initialized" }
- val analysisResult = JvmResolveUtil.analyze(myFiles.psiFiles, myEnvironment)
- if (!ignoreErrors) {
- analysisResult.throwIfError()
- AnalyzingUtils.throwExceptionOnErrors(analysisResult.bindingContext)
- }
- val psi2ir = Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors))
- val irModule = psi2ir.generateModule(analysisResult.moduleDescriptor, myFiles.psiFiles, analysisResult.bindingContext)
- return irModule
+ return generateIrModule(myFiles.psiFiles, myEnvironment, ignoreErrors)
}
protected fun generateIrFilesAsSingleModule(testFiles: List, ignoreErrors: Boolean = false): Map {
@@ -112,6 +108,18 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
}
return textFile
}
+
+ fun generateIrModule(ktFiles: List, environment: KotlinCoreEnvironment, ignoreErrors: Boolean = false): IrModule {
+ val analysisResult = JvmResolveUtil.analyze(ktFiles, environment)
+ if (!ignoreErrors) {
+ analysisResult.throwIfError()
+ AnalyzingUtils.throwExceptionOnErrors(analysisResult.bindingContext)
+ }
+ return generateIrModule(ktFiles, analysisResult.moduleDescriptor, analysisResult.bindingContext, ignoreErrors)
+ }
+
+ fun generateIrModule(ktFiles: List, moduleDescriptor: ModuleDescriptor, bindingContext: BindingContext, ignoreErrors: Boolean = false) =
+ Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors)).generateModule(moduleDescriptor, ktFiles, bindingContext)
}
}
diff --git a/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractPsi2IrDiagnosticsTest.kt b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractPsi2IrDiagnosticsTest.kt
new file mode 100644
index 00000000000..f0c1a89d536
--- /dev/null
+++ b/compiler/ir/ir.tests/tests/org/jetbrains/kotlin/ir/AbstractPsi2IrDiagnosticsTest.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2010-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jetbrains.kotlin.ir
+
+import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest
+import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
+import org.jetbrains.kotlin.ir.util.dump
+import org.jetbrains.kotlin.resolve.BindingContext
+import org.jetbrains.kotlin.test.KotlinTestUtils
+import java.io.File
+
+abstract class AbstractPsi2IrDiagnosticsTest : AbstractDiagnosticsTest() {
+ override fun performAdditionalChecksAfterDiagnostics(
+ testDataFile: File,
+ testFiles: MutableList,
+ moduleFiles: MutableMap>,
+ moduleDescriptors: MutableMap,
+ moduleBindings: MutableMap
+ ) {
+ val actualIrDump = StringBuilder()
+ for (module in moduleFiles.keys) {
+ val ktFiles = moduleFiles[module]?.mapNotNull { it.jetFile } ?: continue
+ val moduleDescriptor = moduleDescriptors[module] ?: continue
+ val moduleBindingContext = moduleBindings[module] ?: continue
+ val irModule = AbstractIrGeneratorTestCase.generateIrModule(ktFiles, moduleDescriptor, moduleBindingContext, true)
+ actualIrDump.append(irModule.dump())
+ }
+
+ val expectedIrFile = File(testDataFile.canonicalPath.replace(".kt", ".ir.txt"))
+ KotlinTestUtils.assertEqualsToFile(expectedIrFile, actualIrDump.toString())
+ }
+}
diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java
index 4120acc4ee4..8ab16c75a7c 100644
--- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java
+++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java
@@ -208,6 +208,18 @@ public abstract class AbstractDiagnosticsTest extends BaseDiagnosticsTest {
if (exceptionFromDynamicCallDescriptorsValidation != null) {
throw ExceptionUtilsKt.rethrow(exceptionFromDynamicCallDescriptorsValidation);
}
+
+ performAdditionalChecksAfterDiagnostics(testDataFile, testFiles, groupedByModule, modules, moduleBindings);
+ }
+
+ protected void performAdditionalChecksAfterDiagnostics(
+ File testDataFile,
+ List testFiles,
+ Map> moduleFiles,
+ Map moduleDescriptors,
+ Map moduleBindings
+ ) {
+ // To be overridden by diagnostic-like tests.
}
@Nullable