JS backend: don't use objects as definition place.
This commit is contained in:
@@ -28,7 +28,6 @@ public final class ObjectTest extends SingleFileTranslationTest {
|
|||||||
fooBoxTest();
|
fooBoxTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testObjectDeclaration() throws Exception {
|
public void testObjectDeclaration() throws Exception {
|
||||||
fooBoxTest();
|
fooBoxTest();
|
||||||
}
|
}
|
||||||
@@ -52,7 +51,12 @@ public final class ObjectTest extends SingleFileTranslationTest {
|
|||||||
public void testObjectInheritingFromClass() throws Exception {
|
public void testObjectInheritingFromClass() throws Exception {
|
||||||
fooBoxTest();
|
fooBoxTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testObjectInObjectWithClosure() throws Exception {
|
public void testObjectInObjectWithClosure() throws Exception {
|
||||||
fooBoxTest();
|
fooBoxTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testLambdaInObjectInsideObject() throws Exception {
|
||||||
|
checkFooBoxIsOk();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import org.jetbrains.jet.lang.psi.JetParameter;
|
|||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.TypeConstructor;
|
import org.jetbrains.jet.lang.types.TypeConstructor;
|
||||||
import org.jetbrains.k2js.translate.context.*;
|
import org.jetbrains.k2js.translate.context.*;
|
||||||
import org.jetbrains.k2js.translate.expression.InnerObjectTranslator;
|
|
||||||
import org.jetbrains.k2js.translate.general.AbstractTranslator;
|
import org.jetbrains.k2js.translate.general.AbstractTranslator;
|
||||||
import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator;
|
import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator;
|
||||||
import org.jetbrains.k2js.translate.utils.JsAstUtils;
|
import org.jetbrains.k2js.translate.utils.JsAstUtils;
|
||||||
@@ -38,13 +37,13 @@ import java.util.*;
|
|||||||
|
|
||||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
|
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
|
||||||
import static org.jetbrains.jet.lang.types.TypeUtils.topologicallySortSuperclassesAndRecordAllInstances;
|
import static org.jetbrains.jet.lang.types.TypeUtils.topologicallySortSuperclassesAndRecordAllInstances;
|
||||||
import static org.jetbrains.k2js.translate.utils.TranslationUtils.getSuggestedName;
|
|
||||||
import static org.jetbrains.k2js.translate.initializer.InitializerUtils.createClassObjectInitializer;
|
import static org.jetbrains.k2js.translate.initializer.InitializerUtils.createClassObjectInitializer;
|
||||||
import static org.jetbrains.k2js.translate.utils.BindingUtils.getClassDescriptor;
|
import static org.jetbrains.k2js.translate.utils.BindingUtils.getClassDescriptor;
|
||||||
import static org.jetbrains.k2js.translate.utils.BindingUtils.getPropertyDescriptorForConstructorParameter;
|
import static org.jetbrains.k2js.translate.utils.BindingUtils.getPropertyDescriptorForConstructorParameter;
|
||||||
import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getContainingClass;
|
import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getContainingClass;
|
||||||
import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getSupertypesWithoutFakes;
|
import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getSupertypesWithoutFakes;
|
||||||
import static org.jetbrains.k2js.translate.utils.PsiUtils.getPrimaryConstructorParameters;
|
import static org.jetbrains.k2js.translate.utils.PsiUtils.getPrimaryConstructorParameters;
|
||||||
|
import static org.jetbrains.k2js.translate.utils.TranslationUtils.getSuggestedName;
|
||||||
import static org.jetbrains.k2js.translate.utils.TranslationUtils.simpleReturnFunction;
|
import static org.jetbrains.k2js.translate.utils.TranslationUtils.simpleReturnFunction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -105,21 +104,16 @@ public final class ClassTranslator extends AbstractTranslator {
|
|||||||
|
|
||||||
boolean isTopLevelDeclaration = context() == declarationContext;
|
boolean isTopLevelDeclaration = context() == declarationContext;
|
||||||
|
|
||||||
JsNameRef qualifiedReference;
|
JsNameRef qualifiedReference = null;
|
||||||
if (!isTopLevelDeclaration) {
|
if (isTopLevelDeclaration) {
|
||||||
qualifiedReference = null;
|
DefinitionPlace definitionPlace = null;
|
||||||
}
|
|
||||||
else {
|
if (!descriptor.getKind().isSingleton() && !isAnonymousObject(descriptor)) {
|
||||||
JsScope scope = context().getScopeForDescriptor(descriptor);
|
|
||||||
DefinitionPlace definitionPlace;
|
|
||||||
if (descriptor.getKind().isSingleton() || isAnonymousObject(descriptor)) {
|
|
||||||
qualifiedReference = null;
|
|
||||||
definitionPlace = new DefinitionPlace(scope, context().getThisObject(descriptor), properties);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
qualifiedReference = declarationContext.getQualifiedReference(descriptor);
|
qualifiedReference = declarationContext.getQualifiedReference(descriptor);
|
||||||
|
JsScope scope = context().getScopeForDescriptor(descriptor);
|
||||||
definitionPlace = new DefinitionPlace(scope, qualifiedReference, staticProperties);
|
definitionPlace = new DefinitionPlace(scope, qualifiedReference, staticProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
declarationContext = declarationContext.newDeclaration(descriptor, definitionPlace);
|
declarationContext = declarationContext.newDeclaration(descriptor, definitionPlace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package foo
|
||||||
|
|
||||||
|
object A {
|
||||||
|
object B {
|
||||||
|
val lambda = { "OK" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box() = A.B.lambda()
|
||||||
|
|
||||||
Reference in New Issue
Block a user