Search in sources :

Example 1 with JsName

use of org.jetbrains.kotlin.js.backend.ast.JsName in project kotlin by JetBrains.

the class JsScopeTest method declareFreshNameAndAssertEquals.

private void declareFreshNameAndAssertEquals(@NotNull String suggested, @NotNull String expected) {
    JsName actual = scope.declareFreshName(suggested);
    assertEquals(expected, actual.getIdent());
}
Also used : JsName(org.jetbrains.kotlin.js.backend.ast.JsName)

Example 2 with JsName

use of org.jetbrains.kotlin.js.backend.ast.JsName in project kotlin by JetBrains.

the class DestructuringDeclarationTranslator method translate.

private JsVars translate() {
    if (initializer != null) {
        context().getCurrentBlock().getStatements().add(JsAstUtils.newVar(multiObjectName, initializer));
    }
    List<JsVars.JsVar> jsVars = new ArrayList<JsVars.JsVar>();
    JsNameRef multiObjNameRef = multiObjectName.makeRef();
    for (KtDestructuringDeclarationEntry entry : multiDeclaration.getEntries()) {
        VariableDescriptor descriptor = BindingContextUtils.getNotNull(context().bindingContext(), BindingContext.VARIABLE, entry);
        // Do not call `componentX` for destructuring entry called _
        if (descriptor.getName().isSpecial())
            continue;
        ResolvedCall<FunctionDescriptor> entryInitCall = context().bindingContext().get(BindingContext.COMPONENT_RESOLVED_CALL, entry);
        assert entryInitCall != null : "Entry init call must be not null";
        JsExpression entryInitializer = CallTranslator.translate(context(), entryInitCall, multiObjNameRef);
        FunctionDescriptor candidateDescriptor = entryInitCall.getCandidateDescriptor();
        if (CallExpressionTranslator.shouldBeInlined(candidateDescriptor, context())) {
            setInlineCallMetadata(entryInitializer, entry, entryInitCall, context());
        }
        KotlinType returnType = candidateDescriptor.getReturnType();
        if (returnType != null && KotlinBuiltIns.isCharOrNullableChar(returnType) && !KotlinBuiltIns.isCharOrNullableChar(descriptor.getType())) {
            entryInitializer = JsAstUtils.charToBoxedChar(entryInitializer);
        }
        JsName name = context().getNameForDescriptor(descriptor);
        if (isVarCapturedInClosure(context().bindingContext(), descriptor)) {
            JsNameRef alias = getCapturedVarAccessor(name.makeRef());
            entryInitializer = JsAstUtils.wrapValue(alias, entryInitializer);
        }
        jsVars.add(new JsVars.JsVar(name, entryInitializer));
    }
    return new JsVars(jsVars, true);
}
Also used : JsExpression(org.jetbrains.kotlin.js.backend.ast.JsExpression) KotlinType(org.jetbrains.kotlin.types.KotlinType) ArrayList(java.util.ArrayList) FunctionDescriptor(org.jetbrains.kotlin.descriptors.FunctionDescriptor) VariableDescriptor(org.jetbrains.kotlin.descriptors.VariableDescriptor) JsName(org.jetbrains.kotlin.js.backend.ast.JsName) JsNameRef(org.jetbrains.kotlin.js.backend.ast.JsNameRef) JsVars(org.jetbrains.kotlin.js.backend.ast.JsVars) KtDestructuringDeclarationEntry(org.jetbrains.kotlin.psi.KtDestructuringDeclarationEntry)

Example 3 with JsName

use of org.jetbrains.kotlin.js.backend.ast.JsName in project kotlin by JetBrains.

the class ReferenceTranslator method translateAsValueReference.

@NotNull
public static JsExpression translateAsValueReference(@NotNull DeclarationDescriptor descriptor, @NotNull TranslationContext context) {
    JsExpression alias = context.getAliasForDescriptor(descriptor);
    if (alias != null)
        return alias;
    if (shouldTranslateAsFQN(descriptor, context)) {
        return context.getQualifiedReference(descriptor);
    }
    if (descriptor instanceof PropertyDescriptor) {
        PropertyDescriptor property = (PropertyDescriptor) descriptor;
        if (context.isFromCurrentModule(property)) {
            return context.getInnerReference(property);
        } else {
            JsExpression qualifier = context.getInnerReference(property.getContainingDeclaration());
            JsName name = context.getNameForDescriptor(property);
            return new JsNameRef(name, qualifier);
        }
    }
    if (DescriptorUtils.isObject(descriptor) || DescriptorUtils.isEnumEntry(descriptor)) {
        if (!context.isFromCurrentModule(descriptor)) {
            return getLazyReferenceToObject((ClassDescriptor) descriptor, context);
        } else {
            JsExpression functionRef = JsAstUtils.pureFqn(context.getNameForObjectInstance((ClassDescriptor) descriptor), null);
            return new JsInvocation(functionRef);
        }
    }
    return context.getInnerReference(descriptor);
}
Also used : JsExpression(org.jetbrains.kotlin.js.backend.ast.JsExpression) JsInvocation(org.jetbrains.kotlin.js.backend.ast.JsInvocation) JsName(org.jetbrains.kotlin.js.backend.ast.JsName) JsNameRef(org.jetbrains.kotlin.js.backend.ast.JsNameRef) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

JsName (org.jetbrains.kotlin.js.backend.ast.JsName)3 JsExpression (org.jetbrains.kotlin.js.backend.ast.JsExpression)2 JsNameRef (org.jetbrains.kotlin.js.backend.ast.JsNameRef)2 ArrayList (java.util.ArrayList)1 NotNull (org.jetbrains.annotations.NotNull)1 FunctionDescriptor (org.jetbrains.kotlin.descriptors.FunctionDescriptor)1 VariableDescriptor (org.jetbrains.kotlin.descriptors.VariableDescriptor)1 JsInvocation (org.jetbrains.kotlin.js.backend.ast.JsInvocation)1 JsVars (org.jetbrains.kotlin.js.backend.ast.JsVars)1 KtDestructuringDeclarationEntry (org.jetbrains.kotlin.psi.KtDestructuringDeclarationEntry)1 KotlinType (org.jetbrains.kotlin.types.KotlinType)1