From 9a8a1113dba23425b3dbfe699b947729d442aa6f Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Fri, 14 Feb 2020 11:13:25 +0700 Subject: [PATCH] [Commonizer] Don't commonize deprecated functions 1. All functions marked with @Deprecated from Kotlin/Native platform libraries have DeprecationLevel.ERROR, and therefore practically can not be used by a developer in their code. So, it does not make sence to keep such declarations in commonized libraries. 2. Commonization of such functions would also require commonization of annotations with nested annotations as const values (ex: @Deprecated(level = DeprecationLevel.ERROR), where both @Deprecated and DeprecationLevel are annotation classes). This is not implemented yet. --- .../descriptors/commonizer/mergedtree/memberScopes.kt | 8 +++++++- .../kotlin/descriptors/commonizer/utils/blacklist.kt | 6 +++--- .../specifics/original/js/package_root.kt | 5 +++++ .../specifics/original/jvm/package_root.kt | 5 +++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt index 28d26d1e5c0..ef5f2a1bc98 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.commonizer.core.Commonizer import org.jetbrains.kotlin.descriptors.commonizer.utils.fqNameWithTypeParameters import org.jetbrains.kotlin.descriptors.commonizer.utils.isBlacklistedDarwinFunction +import org.jetbrains.kotlin.descriptors.commonizer.utils.isDeprecated import org.jetbrains.kotlin.descriptors.commonizer.utils.isKniBridgeFunction import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.scopes.MemberScope @@ -53,8 +54,13 @@ internal inline fun PropertyCollector( internal inline fun FunctionCollector( crossinline typedCollector: (SimpleFunctionDescriptor) -> Unit ): (DeclarationDescriptor) -> Boolean = Collector { candidate -> - if (candidate.kind.isReal && !candidate.isKniBridgeFunction() && !candidate.isBlacklistedDarwinFunction()) + if (candidate.kind.isReal + && !candidate.isKniBridgeFunction() + && !candidate.isDeprecated() + && !candidate.isBlacklistedDarwinFunction() + ) { typedCollector(candidate) + } } /** Used for approximation of [PropertyDescriptor]s before running concrete [Commonizer]s */ diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/utils/blacklist.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/utils/blacklist.kt index fb5fc485d8c..c089090d4e2 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/utils/blacklist.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/utils/blacklist.kt @@ -15,6 +15,9 @@ private val DEPRECATED_ANNOTATION_FQN = FqName(Deprecated::class.java.name) internal fun SimpleFunctionDescriptor.isKniBridgeFunction() = name.asString().startsWith("kniBridge") +internal fun SimpleFunctionDescriptor.isDeprecated() = + annotations.hasAnnotation(DEPRECATED_ANNOTATION_FQN) + // the following logic determines Kotlin functions with conflicting overloads in Darwin library: internal fun SimpleFunctionDescriptor.isBlacklistedDarwinFunction(): Boolean { if ((containingDeclaration as? PackageFragmentDescriptor)?.fqName?.isUnderDarwinPackage != true) @@ -24,9 +27,6 @@ internal fun SimpleFunctionDescriptor.isBlacklistedDarwinFunction(): Boolean { if (!name.startsWith("simd_") && !name.startsWith("__")) return false - if (annotations.hasAnnotation(DEPRECATED_ANNOTATION_FQN)) - return true - return valueParameters.any { parameter -> val type = parameter.type val abbreviationType = type.getAbbreviation() diff --git a/native/commonizer/testData/functionCommonization/specifics/original/js/package_root.kt b/native/commonizer/testData/functionCommonization/specifics/original/js/package_root.kt index c3f22b47b56..b7be16676e1 100644 --- a/native/commonizer/testData/functionCommonization/specifics/original/js/package_root.kt +++ b/native/commonizer/testData/functionCommonization/specifics/original/js/package_root.kt @@ -17,3 +17,8 @@ external fun externalFunction2() inline fun inlineFunction1() {} inline fun inlineFunction2() {} + +@Deprecated +fun deprecatedFunction1() {} +@Deprecated +fun deprecatedFunction2() {} diff --git a/native/commonizer/testData/functionCommonization/specifics/original/jvm/package_root.kt b/native/commonizer/testData/functionCommonization/specifics/original/jvm/package_root.kt index 59b0f9d204c..58f31ed2baf 100644 --- a/native/commonizer/testData/functionCommonization/specifics/original/jvm/package_root.kt +++ b/native/commonizer/testData/functionCommonization/specifics/original/jvm/package_root.kt @@ -17,3 +17,8 @@ fun externalFunction2() {} inline fun inlineFunction1() {} fun inlineFunction2() {} + +@Deprecated +fun deprecatedFunction1() {} +@Deprecated +fun deprecatedFunction3() {}