Type alias constructors for inner classes in expressions ans supertype lists.

This commit is contained in:
Dmitry Petrov
2016-11-18 11:45:55 +03:00
parent 9ac3dbceca
commit d665193c20
18 changed files with 379 additions and 40 deletions
@@ -21098,6 +21098,18 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
doTest(fileName);
}
@TestMetadata("innerClassTypeAliasConstructor.kt")
public void testInnerClassTypeAliasConstructor() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/typealias/innerClassTypeAliasConstructor.kt");
doTest(fileName);
}
@TestMetadata("innerClassTypeAliasConstructorInSupertypes.kt")
public void testInnerClassTypeAliasConstructorInSupertypes() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/typealias/innerClassTypeAliasConstructorInSupertypes.kt");
doTest(fileName);
}
@TestMetadata("simple.kt")
public void testSimple() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/typealias/simple.kt");
@@ -206,6 +206,8 @@ object ConstructorCallCase : FunctionCallCase() {
override fun FunctionCallInfo.dispatchReceiver() = doTranslate { argsWithReceiver(dispatchReceiver!!) }
override fun FunctionCallInfo.extensionReceiver() = doTranslate { argsWithReceiver(extensionReceiver!!) }
private inline fun FunctionCallInfo.doTranslate(
getArguments: CallArgumentTranslator.ArgumentsInfo.() -> List<JsExpression>
): JsExpression {
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.js.translate.initializer;
import com.google.dart.compiler.backend.js.ast.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor;
import org.jetbrains.kotlin.js.translate.callTranslator.CallTranslator;
import org.jetbrains.kotlin.js.translate.context.Namer;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
@@ -170,6 +171,9 @@ public final class ClassInitializerTranslator extends AbstractTranslator {
List<JsExpression> arguments = new ArrayList<JsExpression>();
ConstructorDescriptor superDescriptor = (ConstructorDescriptor) superCall.getResultingDescriptor();
if (superDescriptor instanceof TypeAliasConstructorDescriptor) {
superDescriptor = ((TypeAliasConstructorDescriptor) superDescriptor).getUnderlyingConstructorDescriptor();
}
List<DeclarationDescriptor> superclassClosure = context.getClassOrConstructorClosure(superDescriptor);
if (superclassClosure != null) {
@@ -182,7 +186,7 @@ public final class ClassInitializerTranslator extends AbstractTranslator {
}
}
if (superDescriptor.getContainingDeclaration().isInner() && classDescriptor.isInner()) {
if (superDescriptor.getConstructedClass().isInner() && classDescriptor.isInner()) {
arguments.add(pureFqn(Namer.OUTER_FIELD_NAME, JsLiteral.THIS));
}