JS: moved PatternBuilder to JS frontend

This commit is contained in:
Alexey Tsvetkov
2014-12-18 16:39:07 +03:00
parent f9648c6f21
commit 200e3afbe1
21 changed files with 112 additions and 95 deletions
@@ -0,0 +1,58 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.js.descriptorUtils
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.types.JetType
import org.jetbrains.kotlin.types.TypeProjection
import com.intellij.openapi.util.text.StringUtil
public val JetType.nameIfStandardType: Name?
get() {
val descriptor = getConstructor().getDeclarationDescriptor()
if (descriptor?.getContainingDeclaration() == KotlinBuiltIns.getInstance().getBuiltInsPackageFragment()) {
return descriptor?.getName()
}
return null
}
public fun JetType.getJetTypeFqName(printTypeArguments: Boolean): String {
val declaration = requireNotNull(getConstructor().getDeclarationDescriptor())
if (declaration is TypeParameterDescriptor) {
return StringUtil.join(declaration.getUpperBounds(), { (type) -> type.getJetTypeFqName(printTypeArguments) }, "&")
}
val typeArguments = getArguments()
val typeArgumentsAsString: String
if (printTypeArguments && !typeArguments.isEmpty()) {
val joinedTypeArguments = StringUtil.join(typeArguments, { (projection) -> projection.getType().getJetTypeFqName(false) }, ", ")
typeArgumentsAsString = "<" + joinedTypeArguments + ">"
} else {
typeArgumentsAsString = ""
}
return DescriptorUtils.getFqName(declaration).asString() + typeArgumentsAsString
}
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns;
package org.jetbrains.kotlin.js.patterns;
import com.google.common.base.Predicate;
import org.jetbrains.annotations.Nullable;
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns;
package org.jetbrains.kotlin.js.patterns;
import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
@@ -14,29 +14,30 @@
* limitations under the License.
*/
package org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns;
package org.jetbrains.kotlin.js.patterns;
import com.google.common.collect.Lists;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.js.translate.context.Namer;
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils;
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.idea.JetLanguage;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.OverrideResolver;
import java.util.Arrays;
import java.util.List;
import static org.jetbrains.kotlin.js.descriptorUtils.DescriptorUtilsPackage.getNameIfStandardType;
import static org.jetbrains.kotlin.js.descriptorUtils.DescriptorUtilsPackage.getJetTypeFqName;
public final class PatternBuilder {
@NotNull
private static final NamePredicate KOTLIN_NAME_PREDICATE = new NamePredicate("kotlin");
@NotNull
private static final Name KOTLIN_NAME = Name.identifier(Namer.KOTLIN_LOWER_NAME);
private static final Name KOTLIN_NAME = Name.identifier(JetLanguage.NAME.toLowerCase());
private PatternBuilder() {
}
@@ -161,7 +162,7 @@ public final class PatternBuilder {
}
for (int i = 0; i < valueParameterDescriptors.size(); i++) {
ValueParameterDescriptor valueParameterDescriptor = valueParameterDescriptors.get(i);
Name name = JsDescriptorUtils.getNameIfStandardType(valueParameterDescriptor.getType());
Name name = getNameIfStandardType(valueParameterDescriptor.getType());
NamePredicate namePredicate = argumentCheckers.get(i);
if (!namePredicate.apply(name)) return false;
}
@@ -241,7 +242,7 @@ public final class PatternBuilder {
if (actualReceiver != null) {
if (receiverFqName == null) return false;
String actualReceiverFqName = TranslationUtils.getJetTypeFqName(actualReceiver.getType(), false);
String actualReceiverFqName = getJetTypeFqName(actualReceiver.getType(), false);
if (!actualReceiverFqName.equals(receiverFqName)) return false;
}
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.BindingContextUtils.getNotNull
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.js.patterns.*;
import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.general.AbstractTranslator
import org.jetbrains.kotlin.js.translate.general.Translation.patternTranslator
@@ -30,6 +31,7 @@ import org.jetbrains.kotlin.js.translate.general.Translation.translateAsStatemen
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.convertToBlock
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils
import org.jetbrains.kotlin.js.descriptorUtils.getJetTypeFqName
class CatchTranslator(
val catches: List<JetCatchClause>,
@@ -113,7 +115,7 @@ class CatchTranslator(
private val JetTypeReference.isThrowable: Boolean
get() {
val jetType = getNotNull(bindingContext(), BindingContext.TYPE, this)
val jetTypeName = TranslationUtils.getJetTypeFqName(jetType, false)
val jetTypeName = jetType.getJetTypeFqName(false)
val throwable = KotlinBuiltIns.getInstance().getThrowable()
val throwableClassName = DescriptorUtils.getFqNameSafe(throwable).asString()
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.general.AbstractTranslator;
import org.jetbrains.kotlin.js.translate.general.Translation;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.NamePredicate;
import org.jetbrains.kotlin.js.patterns.NamePredicate;
import org.jetbrains.kotlin.js.translate.utils.BindingUtils;
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils;
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.psi.JetTypeReference;
import static org.jetbrains.kotlin.js.translate.utils.BindingUtils.getTypeByReference;
import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.*;
import static org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils.getNameIfStandardType;
import static org.jetbrains.kotlin.js.descriptorUtils.DescriptorUtilsPackage.getNameIfStandardType;
public final class PatternTranslator extends AbstractTranslator {
@@ -22,11 +22,11 @@ import com.google.dart.compiler.backend.js.ast.JsNameRef;
import com.google.dart.compiler.backend.js.ast.JsNumberLiteral;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.js.patterns.NamePredicate;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.general.AbstractTranslator;
import org.jetbrains.kotlin.js.translate.general.Translation;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.factories.TopLevelFIF;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.NamePredicate;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.BindingContext;
@@ -36,7 +36,7 @@ import java.util.Collections;
import static org.jetbrains.kotlin.js.translate.utils.ErrorReportingUtils.message;
import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.sum;
import static org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils.getNameIfStandardType;
import static org.jetbrains.kotlin.js.descriptorUtils.DescriptorUtilsPackage.getNameIfStandardType;
public final class StringTemplateTranslator extends AbstractTranslator {
private final JetStringTemplateEntry[] expressionEntries;
@@ -25,14 +25,14 @@ import org.jetbrains.kotlin.builtins.PrimitiveType;
import org.jetbrains.kotlin.js.translate.context.Namer;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.DescriptorPredicate;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.NamePredicate;
import org.jetbrains.kotlin.js.patterns.DescriptorPredicate;
import org.jetbrains.kotlin.js.patterns.NamePredicate;
import org.jetbrains.kotlin.name.Name;
import java.util.List;
import static com.intellij.openapi.util.text.StringUtil.decapitalize;
import static org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.PatternBuilder.pattern;
import static org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern;
import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.assignment;
public final class ArrayFIF extends CompositeFIF {
@@ -18,10 +18,10 @@ package org.jetbrains.kotlin.js.translate.intrinsic.functions.factories
import com.google.dart.compiler.backend.js.ast.*
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.context.Namer
import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.utils.ID
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.*
@@ -18,9 +18,9 @@ package org.jetbrains.kotlin.js.translate.intrinsic.functions.factories
import com.google.common.base.Predicates
import com.google.dart.compiler.backend.js.ast.JsExpression
import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.utils.ID
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.*
@@ -25,10 +25,10 @@ import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
import org.jetbrains.kotlin.js.patterns.DescriptorPredicate;
import org.jetbrains.kotlin.js.patterns.NamePredicate;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.DescriptorPredicate;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.NamePredicate;
import org.jetbrains.kotlin.js.translate.operation.OperatorTable;
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils;
@@ -38,7 +38,7 @@ import org.jetbrains.kotlin.types.expressions.OperatorConventions;
import java.util.List;
import static org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.PatternBuilder.pattern;
import static org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern;
public enum PrimitiveBinaryOperationFIF implements FunctionIntrinsicFactory {
INSTANCE;
@@ -22,10 +22,10 @@ import com.google.dart.compiler.backend.js.ast.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
import org.jetbrains.kotlin.js.patterns.DescriptorPredicate;
import org.jetbrains.kotlin.js.patterns.NamePredicate;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.DescriptorPredicate;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.NamePredicate;
import org.jetbrains.kotlin.js.translate.operation.OperatorTable;
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils;
@@ -35,8 +35,8 @@ import org.jetbrains.kotlin.types.expressions.OperatorConventions;
import java.util.List;
import static org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.NamePredicate.PRIMITIVE_NUMBERS;
import static org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.PatternBuilder.pattern;
import static org.jetbrains.kotlin.js.patterns.NamePredicate.PRIMITIVE_NUMBERS;
import static org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern;
public enum PrimitiveUnaryOperationFIF implements FunctionIntrinsicFactory {
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.js.translate.intrinsic.functions.factories;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.BuiltInFunctionIntrinsic;
import static org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.PatternBuilder.pattern;
import static org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern;
public final class StringOperationFIF extends CompositeFIF {
@NotNull
@@ -23,15 +23,14 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.builtins.PrimitiveType;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.descriptors.PropertyDescriptor;
import org.jetbrains.kotlin.js.patterns.DescriptorPredicate;
import org.jetbrains.kotlin.js.patterns.NamePredicate;
import org.jetbrains.kotlin.js.translate.callTranslator.CallInfo;
import org.jetbrains.kotlin.js.translate.context.Namer;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.DescriptorPredicate;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.NamePredicate;
import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils;
import org.jetbrains.kotlin.js.translate.utils.BindingUtils;
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.JetExpression;
import org.jetbrains.kotlin.psi.JetQualifiedExpression;
@@ -43,8 +42,9 @@ import org.jetbrains.kotlin.types.JetType;
import java.util.List;
import static org.jetbrains.kotlin.js.descriptorUtils.DescriptorUtilsPackage.getNameIfStandardType;
import static org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern;
import static org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic.CallParametersAwareFunctionIntrinsic;
import static org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.PatternBuilder.pattern;
import static org.jetbrains.kotlin.js.translate.utils.ManglingUtils.getStableMangledNameForDescriptor;
public final class TopLevelFIF extends CompositeFIF {
@@ -233,7 +233,7 @@ public final class TopLevelFIF extends CompositeFIF {
@NotNull TranslationContext context
) {
JetType keyType = callInfo.getResolvedCall().getTypeArguments().values().iterator().next();
Name keyTypeName = JsDescriptorUtils.getNameIfStandardType(keyType);
Name keyTypeName = getNameIfStandardType(keyType);
String collectionClassName = null;
if (keyTypeName != null) {
if (NamePredicate.PRIMITIVE_NUMBERS.apply(keyTypeName)) {
@@ -22,8 +22,8 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.psi.JetBinaryExpression
import org.jetbrains.kotlin.types.expressions.OperatorConventions
import org.jetbrains.kotlin.lexer.JetToken
import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.operation.OperatorTable
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils
@@ -18,23 +18,24 @@ package org.jetbrains.kotlin.js.translate.intrinsic.operation
import com.google.dart.compiler.backend.js.ast.*
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.psi.JetBinaryExpression
import org.jetbrains.kotlin.types.expressions.OperatorConventions
import org.jetbrains.kotlin.js.patterns.NamePredicate
import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.intrinsic.functions.factories.TopLevelFIF
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.NamePredicate
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils
import java.util.Arrays
import org.jetbrains.kotlin.js.translate.utils.PsiUtils.getOperationToken
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils
import org.jetbrains.kotlin.lexer.JetToken
import org.jetbrains.kotlin.lexer.JetTokens
import com.google.common.collect.ImmutableSet
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.psi.JetBinaryExpression
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.types.expressions.OperatorConventions
import org.jetbrains.kotlin.types.isDynamic
import java.util.Arrays
import com.google.common.collect.ImmutableSet
object EqualsBOIF : BinaryOperationIntrinsicFactory {
val LONG_EQUALS_ANY = pattern("Long.equals")
@@ -22,9 +22,9 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.psi.JetBinaryExpression
import org.jetbrains.kotlin.types.expressions.OperatorConventions
import org.jetbrains.kotlin.lexer.JetToken
import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.context.Namer
import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.PatternBuilder.pattern
import org.jetbrains.kotlin.js.translate.operation.OperatorTable
import org.jetbrains.kotlin.js.translate.utils.ID
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.*
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
* Copyright 2010-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.js.translate.reference;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.backend.js.ast.metadata.MetadataPackage;
import com.google.dart.compiler.common.SourceInfoImpl;
@@ -32,11 +33,11 @@ import org.jetbrains.kotlin.builtins.InlineUtil;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory2;
import org.jetbrains.kotlin.diagnostics.ParametrizedDiagnostic;
import org.jetbrains.kotlin.js.descriptors.DescriptorPredicate;
import org.jetbrains.kotlin.js.descriptors.PatternBuilder;
import org.jetbrains.kotlin.js.resolve.diagnostics.ErrorsJs;
import org.jetbrains.kotlin.js.translate.callTranslator.CallTranslator;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.DescriptorPredicate;
import org.jetbrains.kotlin.js.translate.intrinsic.functions.patterns.PatternBuilder;
import org.jetbrains.kotlin.psi.JetCallExpression;
import org.jetbrains.kotlin.psi.JetExpression;
import org.jetbrains.kotlin.psi.JetStringTemplateExpression;
@@ -52,14 +53,12 @@ import java.util.Collections;
import java.util.List;
import static com.google.gwt.dev.js.rhino.Utils.isEndOfLine;
import static org.jetbrains.kotlin.js.descriptors.DescriptorsPackage.getJS_PATTERN;
import static org.jetbrains.kotlin.js.translate.utils.BindingUtils.getCompileTimeValue;
import static org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilPackage.getFunctionResolvedCallWithAssert;
public final class CallExpressionTranslator extends AbstractCallExpressionTranslator {
@NotNull
private final static DescriptorPredicate JSCODE_PATTERN = PatternBuilder.pattern("kotlin.js.js(String)");
@NotNull
public static JsNode translate(
@NotNull JetCallExpression expression,
@@ -115,7 +114,7 @@ public final class CallExpressionTranslator extends AbstractCallExpressionTransl
FunctionDescriptor descriptor = getFunctionResolvedCallWithAssert(expression, context.bindingContext())
.getResultingDescriptor();
return JSCODE_PATTERN.apply(descriptor) && expression.getValueArguments().size() == 1;
return getJS_PATTERN().apply(descriptor);
}
private CallExpressionTranslator(
@@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.js.descriptorUtils.DescriptorUtilsPackage;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.JetExpression;
@@ -158,16 +159,6 @@ public final class JsDescriptorUtils {
@Nullable
public static Name getNameIfStandardType(@NotNull JetExpression expression, @NotNull TranslationContext context) {
JetType type = context.bindingContext().get(BindingContext.EXPRESSION_TYPE, expression);
return type != null ? getNameIfStandardType(type) : null;
}
@Nullable
public static Name getNameIfStandardType(@NotNull JetType type) {
ClassifierDescriptor descriptor = type.getConstructor().getDeclarationDescriptor();
if (descriptor != null && descriptor.getContainingDeclaration() == KotlinBuiltIns.getInstance().getBuiltInsPackageFragment()) {
return descriptor.getName();
}
return null;
return type != null ? DescriptorUtilsPackage.getNameIfStandardType(type) : null;
}
}
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.resolve.scopes.JetScope;
import java.util.*;
import static org.jetbrains.kotlin.js.translate.utils.TranslationUtils.getJetTypeFqName;
import static org.jetbrains.kotlin.js.descriptorUtils.DescriptorUtilsPackage.getJetTypeFqName;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.getFqName;
public class ManglingUtils {
@@ -137,41 +137,6 @@ public final class TranslationUtils {
return new JsConditional(testExpression, thenExpression, elseExpression);
}
@NotNull
public static String getJetTypeFqName(@NotNull JetType jetType, final boolean printTypeArguments) {
ClassifierDescriptor declaration = jetType.getConstructor().getDeclarationDescriptor();
assert declaration != null;
if (declaration instanceof TypeParameterDescriptor) {
return StringUtil.join(((TypeParameterDescriptor) declaration).getUpperBounds(), new Function<JetType, String>() {
@Override
public String fun(JetType type) {
return getJetTypeFqName(type, printTypeArguments);
}
}, "&");
}
List<TypeProjection> typeArguments = jetType.getArguments();
String typeArgumentsAsString;
if (printTypeArguments && !typeArguments.isEmpty()) {
String joinedTypeArguments = StringUtil.join(typeArguments, new Function<TypeProjection, String>() {
@Override
public String fun(TypeProjection typeProjection) {
return getJetTypeFqName(typeProjection.getType(), false);
}
}, ", ");
typeArgumentsAsString = "<" + joinedTypeArguments + ">";
}
else {
typeArgumentsAsString = "";
}
return getFqName(declaration).asString() + typeArgumentsAsString;
}
@NotNull
public static JsNameRef backingFieldReference(@NotNull TranslationContext context,
@NotNull PropertyDescriptor descriptor) {