diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Translation.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Translation.java index f000eba5d61..18c92ed70ef 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Translation.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Translation.java @@ -44,7 +44,10 @@ import org.jetbrains.kotlin.js.translate.expression.PatternTranslator; import org.jetbrains.kotlin.js.translate.test.JSTestGenerator; import org.jetbrains.kotlin.js.translate.utils.*; import org.jetbrains.kotlin.js.translate.utils.mutator.AssignToExpressionMutator; -import org.jetbrains.kotlin.psi.*; +import org.jetbrains.kotlin.psi.KtDeclaration; +import org.jetbrains.kotlin.psi.KtExpression; +import org.jetbrains.kotlin.psi.KtFile; +import org.jetbrains.kotlin.psi.KtSimpleNameExpression; import org.jetbrains.kotlin.resolve.BindingTrace; import org.jetbrains.kotlin.resolve.bindingContextUtil.BindingContextUtilsKt; import org.jetbrains.kotlin.resolve.constants.*; @@ -136,7 +139,7 @@ public final class Translation { ) { KotlinType expectedType = context.bindingContext().getType(expression); ConstantValue constant = compileTimeValue.toConstantValue(expectedType != null ? expectedType : TypeUtils.NO_EXPECTED_TYPE); - JsExpression result = translateConstantWithoutType(constant); + JsExpression result = translateConstantWithoutType(constant, context); if (result != null) { MetadataProperties.setType(result, expectedType); } @@ -144,12 +147,12 @@ public final class Translation { } @Nullable - private static JsExpression translateConstantWithoutType(@NotNull ConstantValue constant) { + private static JsExpression translateConstantWithoutType(@NotNull ConstantValue constant, @NotNull TranslationContext context) { if (constant instanceof NullValue) { return new JsNullLiteral(); } if (constant instanceof UnsignedValueConstant) { - return translateUnsignedConstant((UnsignedValueConstant) constant); + return translateUnsignedConstant((UnsignedValueConstant) constant, context); } Object value = constant.getValue(); @@ -188,7 +191,7 @@ public final class Translation { return null; } - private static JsExpression translateUnsignedConstant(@NotNull UnsignedValueConstant unsignedConstant) { + private static JsExpression translateUnsignedConstant(@NotNull UnsignedValueConstant unsignedConstant, @NotNull TranslationContext context) { if (unsignedConstant instanceof UByteValue) { return null; } @@ -196,7 +199,7 @@ public final class Translation { return null; } else if (unsignedConstant instanceof UIntValue) { - return JsAstUtils.intToUInt(((UIntValue) unsignedConstant).getValue()); + return JsAstUtils.intToUInt(((UIntValue) unsignedConstant).getValue(), context); } else if (unsignedConstant instanceof ULongValue) { return null; diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsAstUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsAstUtils.java index 17edf1a5a96..e42c7da3514 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsAstUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsAstUtils.java @@ -20,17 +20,22 @@ import com.intellij.util.SmartList; import kotlin.Pair; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.builtins.KotlinBuiltIns; +import org.jetbrains.kotlin.descriptors.ClassDescriptor; import org.jetbrains.kotlin.descriptors.SourceElement; import org.jetbrains.kotlin.js.backend.ast.*; import org.jetbrains.kotlin.js.backend.ast.metadata.MetadataProperties; import org.jetbrains.kotlin.js.backend.ast.metadata.SideEffectKind; import org.jetbrains.kotlin.js.translate.context.Namer; +import org.jetbrains.kotlin.js.translate.context.TranslationContext; import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt; import org.jetbrains.kotlin.util.OperatorNameConventions; import java.util.Collections; import java.util.List; +import static org.jetbrains.kotlin.descriptors.FindClassInModuleKt.findClassAcrossModuleDependencies; + public final class JsAstUtils { private static final JsNameRef DEFINE_PROPERTY = pureFqn("defineProperty", null); @@ -217,9 +222,16 @@ public final class JsAstUtils { return invokeMethod(expression, Namer.LONG_TO_NUMBER); } - public static JsExpression intToUInt(int value) { + @NotNull + public static JsExpression intToUInt(int value, @NotNull TranslationContext context) { + ClassDescriptor uintClassDescriptor = findClassAcrossModuleDependencies(context.getCurrentModule(), KotlinBuiltIns.FQ_NAMES.uInt); + assert uintClassDescriptor != null; + JsName descName = context.getInnerNameForDescriptor(uintClassDescriptor); + + // replace with external builder JsIntLiteral literal = new JsIntLiteral(value); - return invokeMethod(Namer.kotlinObject(), Namer.UINT_FROM_INT, literal); + + return new JsNew(descName.makeRef(), Collections.singletonList(literal)); } @NotNull