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