Support serialization of builtins with ExperimentalStdlibApi
This will allow to remove OptIn and ExperimentalStdlibApi from serialized builtins after bootstrap. #KT-53073
This commit is contained in:
+17
-1
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.builtins.StandardNames.BUILT_INS_PACKAGE_FQ_NAME
|
||||
import org.jetbrains.kotlin.builtins.StandardNames.COLLECTIONS_PACKAGE_FQ_NAME
|
||||
import org.jetbrains.kotlin.builtins.StandardNames.RANGES_PACKAGE_FQ_NAME
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.descriptors.packageFragments
|
||||
import org.jetbrains.kotlin.renderer.AnnotationArgumentsRenderingPolicy
|
||||
@@ -24,6 +25,7 @@ import org.jetbrains.kotlin.test.KotlinTestWithEnvironment
|
||||
import org.jetbrains.kotlin.test.TestJdkKind
|
||||
import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator
|
||||
import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparatorAdaptor
|
||||
import org.jetbrains.kotlin.types.isError
|
||||
import java.io.File
|
||||
|
||||
abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment() {
|
||||
@@ -60,9 +62,23 @@ abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment()
|
||||
annotationArgumentsRenderingPolicy = AnnotationArgumentsRenderingPolicy.UNLESS_EMPTY
|
||||
modifiers = DescriptorRendererModifier.ALL
|
||||
excludedTypeAnnotationClasses = setOf(StandardNames.FqNames.unsafeVariance)
|
||||
annotationFilter = { !it.isSourceAnnotation }
|
||||
annotationFilter = ::isSignificantAnnotation
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
private fun isSignificantAnnotation(annotation: AnnotationDescriptor): Boolean {
|
||||
// Do not render annotations with error classifiers. Sometimes builtins reference annotations with missing classes, e.g. @OptIn.
|
||||
if (annotation.type.isError) return false
|
||||
|
||||
// Do not render SOURCE-retention annotations because they are not serialized to metadata.
|
||||
if (annotation.isSourceAnnotation) return false
|
||||
|
||||
// Do not render @ExperimentalStdlibApi, because this annotation is serialized via a hack in BuiltInsSerializerExtension, but
|
||||
// when analyzing sources, it's unresolved (as should be) and thus has error type, so it's filtered out.
|
||||
if (annotation.fqName?.asString() == "kotlin.ExperimentalStdlibApi") return false
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user