From a1a1972a0453b6da6fde2ef1c89342379deb640d Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Tue, 12 Dec 2017 12:28:53 +0300 Subject: [PATCH] Provide DescriptorUtils.isAnonymousFunction (for IR-based BE) --- .../descriptors/impl/AnonymousFunctionDescriptor.java | 4 ++-- .../src/org/jetbrains/kotlin/psi/KtFunctionLiteral.java | 3 ++- .../src/org/jetbrains/kotlin/name/SpecialNames.java | 3 +++ .../src/org/jetbrains/kotlin/resolve/DescriptorUtils.java | 6 ++++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/AnonymousFunctionDescriptor.java b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/AnonymousFunctionDescriptor.java index da8c2adcce6..faa7fa896c2 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/AnonymousFunctionDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/AnonymousFunctionDescriptor.java @@ -20,7 +20,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.descriptors.SourceElement; import org.jetbrains.kotlin.descriptors.annotations.Annotations; -import org.jetbrains.kotlin.name.Name; +import org.jetbrains.kotlin.name.SpecialNames; public class AnonymousFunctionDescriptor extends SimpleFunctionDescriptorImpl { private final boolean isSuspend; @@ -32,7 +32,7 @@ public class AnonymousFunctionDescriptor extends SimpleFunctionDescriptorImpl { @NotNull SourceElement source, boolean isSuspend ) { - super(containingDeclaration, null, annotations, Name.special(""), kind, source); + super(containingDeclaration, null, annotations, SpecialNames.ANONYMOUS_FUNCTION, kind, source); this.isSuspend = isSuspend; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtFunctionLiteral.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtFunctionLiteral.java index 3e23bb88b1b..33de318abd6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtFunctionLiteral.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtFunctionLiteral.java @@ -24,6 +24,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.name.FqName; +import org.jetbrains.kotlin.name.SpecialNames; public class KtFunctionLiteral extends KtFunctionNotStubbed { public KtFunctionLiteral(@NotNull ASTNode node) { @@ -37,7 +38,7 @@ public class KtFunctionLiteral extends KtFunctionNotStubbed { @Override public String getName() { - return ""; + return SpecialNames.ANONYMOUS; } @Override diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java b/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java index c3e19c5649a..7336b7f7ac4 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java +++ b/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java @@ -31,6 +31,9 @@ public class SpecialNames { // The name contains a GUID to avoid clashes, if a clash happens, it's not a big deal: the code does not compile anyway public static final Name SAFE_IDENTIFIER_FOR_NO_NAME = Name.identifier("no_name_in_PSI_3d19d79d_1ba9_4cd0_b7f5_b46aa3cd5d40"); + public static final String ANONYMOUS = ""; + public static final Name ANONYMOUS_FUNCTION = Name.special(ANONYMOUS); + @NotNull public static Name safeIdentifier(@Nullable Name name) { return name != null && !name.isSpecial() ? name : SAFE_IDENTIFIER_FOR_NO_NAME; diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java index 50a4d3c1716..01f04e23701 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java @@ -284,6 +284,12 @@ public class DescriptorUtils { return isClass(descriptor) && descriptor.getName().equals(SpecialNames.NO_NAME_PROVIDED); } + @SuppressWarnings("unused") + public static boolean isAnonymousFunction(@NotNull DeclarationDescriptor descriptor) { + return descriptor instanceof SimpleFunctionDescriptor && + descriptor.getName().equals(SpecialNames.ANONYMOUS_FUNCTION); + } + public static boolean isNonCompanionObject(@NotNull DeclarationDescriptor descriptor) { return isKindOf(descriptor, ClassKind.OBJECT) && !((ClassDescriptor) descriptor).isCompanionObject(); }