diff --git a/compiler/ir/backend.jvm/backend.jvm.iml b/compiler/ir/backend.jvm/backend.jvm.iml
index 3613835647f..3f63500dde0 100644
--- a/compiler/ir/backend.jvm/backend.jvm.iml
+++ b/compiler/ir/backend.jvm/backend.jvm.iml
@@ -10,5 +10,6 @@
+
\ No newline at end of file
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt
new file mode 100644
index 00000000000..eeed7dd12a6
--- /dev/null
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt
@@ -0,0 +1,35 @@
+/*
+ * 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.backend.jvm
+
+import org.jetbrains.kotlin.codegen.CompilationErrorHandler
+import org.jetbrains.kotlin.codegen.state.GenerationState
+import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus
+import org.jetbrains.kotlin.psi.KtFile
+
+object JvmBackendFacade {
+ fun compileCorrectFiles(state: GenerationState, errorHandler: CompilationErrorHandler) {
+ ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
+ state.beforeCompile()
+ ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
+ doGenerateFiles(state.files, state, errorHandler)
+ }
+
+ fun doGenerateFiles(files: Collection, state: GenerationState, errorHandler: CompilationErrorHandler) {
+ // TODO
+ }
+}
diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt
index dcedc0cd728..d5bb692071f 100644
--- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt
+++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt
@@ -16,7 +16,9 @@
package org.jetbrains.kotlin.psi2ir
+import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
+import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
@@ -28,11 +30,18 @@ class Psi2IrTranslator(val configuration: Psi2IrConfiguration) {
fun generateModule(moduleDescriptor: ModuleDescriptor, ktFiles: List, bindingContext: BindingContext): IrModuleFragment {
val context = GeneratorContext(configuration, moduleDescriptor, bindingContext)
val irModule = ModuleGenerator(context).generateModuleFragment(ktFiles)
- postprocess(irModule)
+ postprocess(irModule.descriptor.builtIns, irModule)
return irModule
}
- private fun postprocess(irModuleFragment: IrModuleFragment) {
- insertImplicitCasts(irModuleFragment.descriptor.builtIns, irModuleFragment)
+ fun generateSingleFileFragment(moduleDescriptor: ModuleDescriptor, ktFile: KtFile, bindingContext: BindingContext): IrModuleFragment {
+ val context = GeneratorContext(configuration, moduleDescriptor, bindingContext)
+ val irFileFragment = ModuleGenerator(context).generateSingleFileFragment(ktFile)
+ postprocess(moduleDescriptor.builtIns, irFileFragment)
+ return irFileFragment
+ }
+
+ private fun postprocess(builtIns: KotlinBuiltIns, irElement: IrElement) {
+ insertImplicitCasts(builtIns, irElement)
}
}
diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt
index 14e481f5313..42ce16910e9 100644
--- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt
+++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt
@@ -24,26 +24,35 @@ import org.jetbrains.kotlin.resolve.BindingContext
class ModuleGenerator(override val context: GeneratorContext) : Generator {
fun generateModuleFragment(ktFiles: Collection): IrModuleFragment =
- IrModuleFragmentImpl(context.moduleDescriptor, context.irBuiltIns, generateFiles(ktFiles))
+ IrModuleFragmentImpl(context.moduleDescriptor, context.irBuiltIns,
+ generateFiles(ktFiles))
fun generateFiles(ktFiles: Collection): List {
val irDeclarationGenerator = DeclarationGenerator(context)
return ktFiles.map { ktFile ->
- val irFile = createEmptyIrFile(ktFile)
-
- for (ktAnnotationEntry in ktFile.annotationEntries) {
- irFile.addAnnotation(getOrFail(BindingContext.ANNOTATION, ktAnnotationEntry))
- }
-
- for (ktDeclaration in ktFile.declarations) {
- irFile.addDeclaration(irDeclarationGenerator.generateMemberDeclaration(ktDeclaration))
- }
-
- irFile
+ generateSingleFile(irDeclarationGenerator, ktFile)
}
}
+ fun generateSingleFileFragment(ktFile: KtFile) =
+ IrModuleFragmentImpl(context.moduleDescriptor, context.irBuiltIns,
+ listOf(generateSingleFile(DeclarationGenerator(context), ktFile)))
+
+ private fun generateSingleFile(irDeclarationGenerator: DeclarationGenerator, ktFile: KtFile): IrFileImpl {
+ val irFile = createEmptyIrFile(ktFile)
+
+ for (ktAnnotationEntry in ktFile.annotationEntries) {
+ irFile.addAnnotation(getOrFail(BindingContext.ANNOTATION, ktAnnotationEntry))
+ }
+
+ for (ktDeclaration in ktFile.declarations) {
+ irFile.addDeclaration(irDeclarationGenerator.generateMemberDeclaration(ktDeclaration))
+ }
+
+ return irFile
+ }
+
fun createEmptyIrFile(ktFile: KtFile): IrFileImpl {
val fileEntry = context.sourceManager.getOrCreateFileEntry(ktFile)
val packageFragmentDescriptor = getOrFail(BindingContext.FILE_TO_PACKAGE_FRAGMENT, ktFile)