[Commonizer] Don't filter out @Deprecated non-top-level functions

^KMM-238
This commit is contained in:
Dmitriy Dolovov
2020-04-29 15:40:21 +07:00
parent 312072d6ce
commit ae570e4acf
8 changed files with 61 additions and 9 deletions
@@ -7,9 +7,10 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.descriptors.commonizer.utils.Interner
import org.jetbrains.kotlin.descriptors.commonizer.utils.appendHashCode
import org.jetbrains.kotlin.descriptors.commonizer.utils.hashCode
import org.jetbrains.kotlin.descriptors.commonizer.utils.appendHashCode
import org.jetbrains.kotlin.descriptors.commonizer.utils.intern
import org.jetbrains.kotlin.descriptors.commonizer.utils.isUnderStandardKotlinPackages
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.constants.*
@@ -64,6 +65,12 @@ internal fun checkSupportedInCommonization(constantValue: ConstantValue<*>, loca
is EnumValue -> {
// OK
}
is AnnotationValue -> {
if (constantValue.value.fqName?.isUnderStandardKotlinPackages != true)
error("Only ${constantValue::class.java} const values from Kotlin standard packages are supported, $constantValue at ${location()}")
Unit
}
is ArrayValue -> {
constantValue.value.forEachIndexed { index, innerConstantValue ->
checkSupportedInCommonization(innerConstantValue) { "${location()}[$index]" }
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.descriptors.commonizer.core.Commonizer
import org.jetbrains.kotlin.descriptors.commonizer.utils.*
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.isDeprecatedTopLevelFunction
import org.jetbrains.kotlin.descriptors.commonizer.utils.isKniBridgeFunction
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.scopes.MemberScope
@@ -57,7 +57,7 @@ internal inline fun FunctionCollector(
): (DeclarationDescriptor) -> Boolean = Collector<SimpleFunctionDescriptor> { candidate ->
if (candidate.kind.isReal
&& !candidate.isKniBridgeFunction()
&& !candidate.isDeprecated()
&& !candidate.isDeprecatedTopLevelFunction()
&& !candidate.isBlacklistedDarwinFunction()
) {
typedCollector(candidate)
@@ -15,8 +15,8 @@ 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)
internal fun SimpleFunctionDescriptor.isDeprecatedTopLevelFunction() =
containingDeclaration is PackageFragmentDescriptor && annotations.hasAnnotation(DEPRECATED_ANNOTATION_FQN)
// the following logic determines Kotlin functions with conflicting overloads in Darwin library:
internal fun SimpleFunctionDescriptor.isBlacklistedDarwinFunction(): Boolean {
@@ -16,3 +16,8 @@ expect fun externalFunction2()
expect inline fun inlineFunction1() {}
expect fun inlineFunction2() {}
expect class Holder() {
expect fun deprecatedFunction1()
expect fun nonDeprecatedFunction1()
}
@@ -17,3 +17,13 @@ actual external fun externalFunction2()
actual inline fun inlineFunction1() {}
actual inline fun inlineFunction2() {}
actual class Holder actual constructor() {
@Deprecated("This function is deprecated")
actual fun deprecatedFunction1() {}
@Deprecated("This function is deprecated")
fun deprecatedFunction2() {}
actual fun nonDeprecatedFunction1() {}
fun nonDeprecatedFunction2() {}
}
@@ -17,3 +17,13 @@ actual fun externalFunction2() {}
actual inline fun inlineFunction1() {}
actual fun inlineFunction2() {}
actual class Holder actual constructor() {
@Deprecated("This function is deprecated")
actual fun deprecatedFunction1() {}
@Deprecated("This function is deprecated")
fun deprecatedFunction3() {}
actual fun nonDeprecatedFunction1() {}
fun nonDeprecatedFunction3() {}
}
@@ -18,7 +18,17 @@ external fun externalFunction2()
inline fun inlineFunction1() {}
inline fun inlineFunction2() {}
@Deprecated
@Deprecated("This function is deprecated")
fun deprecatedFunction1() {}
@Deprecated
@Deprecated("This function is deprecated")
fun deprecatedFunction2() {}
class Holder {
@Deprecated("This function is deprecated")
fun deprecatedFunction1() {}
@Deprecated("This function is deprecated")
fun deprecatedFunction2() {}
fun nonDeprecatedFunction1() {}
fun nonDeprecatedFunction2() {}
}
@@ -18,7 +18,17 @@ fun externalFunction2() {}
inline fun inlineFunction1() {}
fun inlineFunction2() {}
@Deprecated
@Deprecated("This function is deprecated")
fun deprecatedFunction1() {}
@Deprecated
@Deprecated("This function is deprecated")
fun deprecatedFunction3() {}
class Holder {
@Deprecated("This function is deprecated")
fun deprecatedFunction1() {}
@Deprecated("This function is deprecated")
fun deprecatedFunction3() {}
fun nonDeprecatedFunction1() {}
fun nonDeprecatedFunction3() {}
}