From 53994f15d3faf61ad8888679abc1b7113c16ae3a Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 13 Aug 2012 18:25:15 +0400 Subject: [PATCH] Utilities in JsDescriptorUtils. Adapted from https://github.com/develar/kotlin/commit/a9e0a42fb1347fa8e21c86b5a073ef8a7c873da0. --- .../translate/utils/JsDescriptorUtils.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/utils/JsDescriptorUtils.java b/js/js.translator/src/org/jetbrains/k2js/translate/utils/JsDescriptorUtils.java index 69d7ab15d82..ca4094d8724 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/utils/JsDescriptorUtils.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/utils/JsDescriptorUtils.java @@ -19,11 +19,19 @@ package org.jetbrains.k2js.translate.utils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.jet.lang.psi.JetExpression; +import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.calls.ResolvedCall; +import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver; import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; +import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.expressions.OperatorConventions; +import org.jetbrains.jet.lang.types.lang.JetStandardClasses; +import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; +import org.jetbrains.k2js.translate.context.TranslationContext; import java.util.List; import java.util.Set; @@ -145,6 +153,35 @@ public final class JsDescriptorUtils { !isDefaultAccessor(propertyDescriptor.getSetter()); } + public static boolean isStandardDeclaration(@NotNull DeclarationDescriptor descriptor) { + NamespaceDescriptor namespace = getContainingNamespace(descriptor); + if (namespace == null) { + return false; + } + return namespace.equals(JetStandardLibrary.getInstance().getLibraryScope().getContainingDeclaration()); + } + + @Nullable + public static NamespaceDescriptor getContainingNamespace(@NotNull DeclarationDescriptor descriptor) { + return DescriptorUtils.getParentOfType(descriptor, NamespaceDescriptor.class); + } + + @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() == JetStandardClasses.STANDARD_CLASSES_NAMESPACE) { + return descriptor.getName(); + } + + return null; + } + @NotNull public static DeclarationDescriptor getDeclarationDescriptorForExtensionCallReceiver( @NotNull ResolvedCall resolvedCall