JS backend: move all class creation logic from FileDeclaration to ClassTranslator

This commit is contained in:
Zalim Bashorov
2015-05-27 20:21:19 +03:00
parent 6e7be78b98
commit e11d61d68a
2 changed files with 28 additions and 18 deletions
@@ -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<JsPropertyInitializer> {
val result = arrayListOf<JsPropertyInitializer>()
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()
@@ -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
}
}