diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/descriptorUtils/descriptorUtils.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/descriptorUtils/descriptorUtils.kt new file mode 100644 index 00000000000..22648cddb3e --- /dev/null +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/descriptorUtils/descriptorUtils.kt @@ -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 +} \ No newline at end of file diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/patterns/DescriptorPredicate.java b/js/js.frontend/src/org/jetbrains/kotlin/js/patterns/DescriptorPredicate.java similarity index 92% rename from js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/patterns/DescriptorPredicate.java rename to js/js.frontend/src/org/jetbrains/kotlin/js/patterns/DescriptorPredicate.java index 258cf9ce8e1..7d1f58d7b32 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/patterns/DescriptorPredicate.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/patterns/DescriptorPredicate.java @@ -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; diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/patterns/NamePredicate.java b/js/js.frontend/src/org/jetbrains/kotlin/js/patterns/NamePredicate.java similarity index 97% rename from js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/patterns/NamePredicate.java rename to js/js.frontend/src/org/jetbrains/kotlin/js/patterns/NamePredicate.java index b3c786c1c6b..2732e315a15 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/patterns/NamePredicate.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/patterns/NamePredicate.java @@ -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; diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/patterns/PatternBuilder.java b/js/js.frontend/src/org/jetbrains/kotlin/js/patterns/PatternBuilder.java similarity index 94% rename from js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/patterns/PatternBuilder.java rename to js/js.frontend/src/org/jetbrains/kotlin/js/patterns/PatternBuilder.java index abc49e704c0..e828642d716 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/patterns/PatternBuilder.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/patterns/PatternBuilder.java @@ -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; } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/CatchTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/CatchTranslator.kt index ac16217c909..d890e9ba297 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/CatchTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/CatchTranslator.kt @@ -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, @@ -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() diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/PatternTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/PatternTranslator.java index 9cb91709a2d..81aecd8901e 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/PatternTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/PatternTranslator.java @@ -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 { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/StringTemplateTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/StringTemplateTranslator.java index 17e2f53b554..93bd7e374e0 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/StringTemplateTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/StringTemplateTranslator.java @@ -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; diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.java index 901e46b7b48..06fbe9ae2ad 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.java @@ -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 { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/LongOperationFIF.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/LongOperationFIF.kt index 6b632791a64..49a8f30e1d9 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/LongOperationFIF.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/LongOperationFIF.kt @@ -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.* diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/NumberAndCharConversionFIF.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/NumberAndCharConversionFIF.kt index 0d328be6539..c8cd6dd86d6 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/NumberAndCharConversionFIF.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/NumberAndCharConversionFIF.kt @@ -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.* diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java index e412109461c..dddc90a77d0 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java @@ -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; diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveUnaryOperationFIF.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveUnaryOperationFIF.java index c905b56010a..676458fedcb 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveUnaryOperationFIF.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveUnaryOperationFIF.java @@ -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 { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/StringOperationFIF.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/StringOperationFIF.java index 9818fc3d292..14a821613ea 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/StringOperationFIF.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/StringOperationFIF.java @@ -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 diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/TopLevelFIF.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/TopLevelFIF.java index 7416148f5e9..44aa2419a2b 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/TopLevelFIF.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/TopLevelFIF.java @@ -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)) { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/CompareToBOIF.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/CompareToBOIF.kt index e0a92ab53db..989e26eb977 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/CompareToBOIF.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/CompareToBOIF.kt @@ -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 diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt index cbd01774330..0f0acee0cdd 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt @@ -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") diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/LongCompareToBOIF.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/LongCompareToBOIF.kt index 2ff8a5c6e2e..d9b33ff9002 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/LongCompareToBOIF.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/LongCompareToBOIF.kt @@ -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.* diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java index 6078f3541da..993d619411c 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java @@ -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( diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java index aaf1a0c95a3..4b2b1491762 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java @@ -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; } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/ManglingUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/ManglingUtils.java index 05a4df326a6..3a6f91a5d2c 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/ManglingUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/ManglingUtils.java @@ -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 { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java index eff70f858d4..88645790688 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java @@ -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() { - @Override - public String fun(JetType type) { - return getJetTypeFqName(type, printTypeArguments); - } - }, "&"); - } - - List typeArguments = jetType.getArguments(); - - String typeArgumentsAsString; - - if (printTypeArguments && !typeArguments.isEmpty()) { - String joinedTypeArguments = StringUtil.join(typeArguments, new Function() { - @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) {