JS backend: move all class creation logic from FileDeclaration to ClassTranslator
This commit is contained in:
@@ -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.PsiUtils.getPrimaryConstructorParameters
|
||||||
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils.simpleReturnFunction
|
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils.simpleReturnFunction
|
||||||
import org.jetbrains.kotlin.js.translate.utils.generateDelegateCall
|
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.JetClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.JetObjectDeclaration
|
import org.jetbrains.kotlin.psi.JetObjectDeclaration
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils.*
|
import org.jetbrains.kotlin.resolve.DescriptorUtils.*
|
||||||
@@ -269,6 +270,18 @@ public class ClassTranslator private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
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
|
platformStatic
|
||||||
public fun generateClassCreation(classDeclaration: JetClassOrObject, context: TranslationContext): JsInvocation {
|
public fun generateClassCreation(classDeclaration: JetClassOrObject, context: TranslationContext): JsInvocation {
|
||||||
return ClassTranslator(classDeclaration, context).translate()
|
return ClassTranslator(classDeclaration, context).translate()
|
||||||
|
|||||||
+15
-18
@@ -15,21 +15,22 @@
|
|||||||
*/
|
*/
|
||||||
package org.jetbrains.kotlin.js.translate.declaration
|
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 com.google.dart.compiler.backend.js.ast.JsFunction
|
||||||
import org.jetbrains.kotlin.js.translate.utils.BindingUtils.*
|
import com.google.dart.compiler.backend.js.ast.JsPropertyInitializer
|
||||||
import org.jetbrains.kotlin.js.translate.initializer.InitializerUtils.*
|
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|
||||||
import com.intellij.util.SmartList
|
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(
|
class FileDeclarationVisitor(
|
||||||
val context: TranslationContext,
|
val context: TranslationContext,
|
||||||
@@ -50,10 +51,7 @@ class FileDeclarationVisitor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override fun visitClass(expression: JetClass, context: TranslationContext?): Void? {
|
public override fun visitClass(expression: JetClass, context: TranslationContext?): Void? {
|
||||||
val classDescriptor = getClassDescriptor(context!!.bindingContext(), expression)
|
result.addAll(ClassTranslator.translate(expression, context!!))
|
||||||
val value = ClassTranslator.generateClassCreation(expression, context)
|
|
||||||
val entry = JsPropertyInitializer(context.getNameForDescriptor(classDescriptor).makeRef(), value)
|
|
||||||
result.add(entry)
|
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,5 +82,4 @@ class FileDeclarationVisitor(
|
|||||||
expression.accept(initializerVisitor, initializerContext)
|
expression.accept(initializerVisitor, initializerContext)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user