From e11d61d68a2b57faff236bdaf7382f72a90853ed Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Wed, 27 May 2015 20:21:19 +0300 Subject: [PATCH] JS backend: move all class creation logic from FileDeclaration to ClassTranslator --- .../translate/declaration/ClassTranslator.kt | 13 ++++++++ .../translate/declaration/FileDeclaration.kt | 33 +++++++++---------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt index 4e7adf834ff..335d44cec82 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt @@ -43,6 +43,7 @@ import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils.getSupertypesWi import org.jetbrains.kotlin.js.translate.utils.PsiUtils.getPrimaryConstructorParameters import org.jetbrains.kotlin.js.translate.utils.TranslationUtils.simpleReturnFunction import org.jetbrains.kotlin.js.translate.utils.generateDelegateCall +import org.jetbrains.kotlin.psi.JetClass import org.jetbrains.kotlin.psi.JetClassOrObject import org.jetbrains.kotlin.psi.JetObjectDeclaration import org.jetbrains.kotlin.resolve.DescriptorUtils.* @@ -269,6 +270,18 @@ public class ClassTranslator private constructor( } companion object { + public fun translate(classDeclaration: JetClass, context: TranslationContext): List { + val result = arrayListOf() + + val classDescriptor = getClassDescriptor(context.bindingContext(), classDeclaration) + val classNameRef = context.getNameForDescriptor(classDescriptor).makeRef() + val classCreation = generateClassCreation(classDeclaration, context) + + result.add(JsPropertyInitializer(classNameRef, classCreation)) + + return result + } + platformStatic public fun generateClassCreation(classDeclaration: JetClassOrObject, context: TranslationContext): JsInvocation { return ClassTranslator(classDeclaration, context).translate() diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/FileDeclaration.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/FileDeclaration.kt index 67b4fe6d0c0..937600e9e31 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/FileDeclaration.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/FileDeclaration.kt @@ -15,21 +15,22 @@ */ package org.jetbrains.kotlin.js.translate.declaration -import com.google.dart.compiler.backend.js.ast.JsPropertyInitializer -import org.jetbrains.kotlin.js.translate.initializer.InitializerVisitor -import org.jetbrains.kotlin.js.translate.utils.JsAstUtils -import org.jetbrains.kotlin.js.translate.context.TranslationContext -import org.jetbrains.kotlin.psi.JetClassInitializer -import org.jetbrains.kotlin.js.translate.general.Translation -import org.jetbrains.kotlin.psi.JetProperty -import org.jetbrains.kotlin.js.translate.initializer.InitializerUtils -import org.jetbrains.kotlin.psi.JetObjectDeclaration -import org.jetbrains.kotlin.psi.JetClass import com.google.dart.compiler.backend.js.ast.JsFunction -import org.jetbrains.kotlin.js.translate.utils.BindingUtils.* -import org.jetbrains.kotlin.js.translate.initializer.InitializerUtils.* -import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import com.google.dart.compiler.backend.js.ast.JsPropertyInitializer import com.intellij.util.SmartList +import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.js.translate.context.TranslationContext +import org.jetbrains.kotlin.js.translate.general.Translation +import org.jetbrains.kotlin.js.translate.initializer.InitializerUtils +import org.jetbrains.kotlin.js.translate.initializer.InitializerUtils.generateInitializerForDelegate +import org.jetbrains.kotlin.js.translate.initializer.InitializerUtils.generateInitializerForProperty +import org.jetbrains.kotlin.js.translate.initializer.InitializerVisitor +import org.jetbrains.kotlin.js.translate.utils.BindingUtils.getPropertyDescriptor +import org.jetbrains.kotlin.js.translate.utils.JsAstUtils +import org.jetbrains.kotlin.psi.JetClass +import org.jetbrains.kotlin.psi.JetClassInitializer +import org.jetbrains.kotlin.psi.JetObjectDeclaration +import org.jetbrains.kotlin.psi.JetProperty class FileDeclarationVisitor( val context: TranslationContext, @@ -50,10 +51,7 @@ class FileDeclarationVisitor( } public override fun visitClass(expression: JetClass, context: TranslationContext?): Void? { - val classDescriptor = getClassDescriptor(context!!.bindingContext(), expression) - val value = ClassTranslator.generateClassCreation(expression, context) - val entry = JsPropertyInitializer(context.getNameForDescriptor(classDescriptor).makeRef(), value) - result.add(entry) + result.addAll(ClassTranslator.translate(expression, context!!)) return null } @@ -84,5 +82,4 @@ class FileDeclarationVisitor( expression.accept(initializerVisitor, initializerContext) return null } - }