Provide DescriptorUtils.isAnonymousFunction (for IR-based BE)

This commit is contained in:
Dmitry Petrov
2017-12-12 12:28:53 +03:00
parent 0566366895
commit a1a1972a04
4 changed files with 13 additions and 3 deletions
@@ -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("<anonymous>"), kind, source);
super(containingDeclaration, null, annotations, SpecialNames.ANONYMOUS_FUNCTION, kind, source);
this.isSuspend = isSuspend;
}
@@ -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 "<anonymous>";
return SpecialNames.ANONYMOUS;
}
@Override
@@ -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 = "<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;
@@ -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();
}