Forward compatibility hacks for Result.{success, failure}

Don't mangled functions annotated with @JvmName.
Annotate 'Result.success' and 'Result.failure' with @JvmName and
@Suppress("INAPPLICABLE_JVM_NAME").
NB this would require bootstrap.
This commit is contained in:
Dmitry Petrov
2020-06-03 15:55:40 +03:00
parent 8a4521864e
commit 202bbdf8dd
23 changed files with 184 additions and 11 deletions
@@ -24,8 +24,10 @@ fun shouldHideConstructorDueToInlineClassTypeValueParameters(descriptor: Callabl
return constructorDescriptor.valueParameters.any { it.type.requiresFunctionNameManglingInParameterTypes() }
}
fun requiresFunctionNameManglingForParameterTypes(valueParameterTypes: List<KotlinType>): Boolean {
return valueParameterTypes.any { it.requiresFunctionNameManglingInParameterTypes() }
fun requiresFunctionNameManglingForParameterTypes(descriptor: CallableMemberDescriptor): Boolean {
val extensionReceiverType = descriptor.extensionReceiverParameter?.type
return extensionReceiverType != null && extensionReceiverType.requiresFunctionNameManglingInParameterTypes() ||
descriptor.valueParameters.any { it.type.requiresFunctionNameManglingInParameterTypes() }
}
// NB functions returning all inline classes (including our special 'kotlin.Result') should be mangled.
@@ -569,6 +569,10 @@ public class DescriptorUtils {
return annotated.getAnnotations().findAnnotation(JVM_NAME);
}
public static boolean hasJvmNameAnnotation(@NotNull Annotated annotated) {
return findJvmNameAnnotation(annotated) != null;
}
@NotNull
public static SourceFile getContainingSourceFile(@NotNull DeclarationDescriptor descriptor) {
if (descriptor instanceof PropertySetterDescriptor) {