Support multiple version requirements on single element
This commit is contained in:
@@ -177,10 +177,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
if (!checkEquals(old.typeTable, new.typeTable)) return false
|
||||
}
|
||||
|
||||
if (old.hasVersionRequirement() != new.hasVersionRequirement()) return false
|
||||
if (old.hasVersionRequirement()) {
|
||||
if (old.versionRequirement != new.versionRequirement) return false
|
||||
}
|
||||
if (!checkEqualsClassVersionRequirement(old, new)) return false
|
||||
|
||||
if (old.hasVersionRequirementTable() != new.hasVersionRequirementTable()) return false
|
||||
if (old.hasVersionRequirementTable()) {
|
||||
@@ -251,7 +248,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
ENUM_ENTRY_LIST,
|
||||
SEALED_SUBCLASS_FQ_NAME_LIST,
|
||||
TYPE_TABLE,
|
||||
VERSION_REQUIREMENT,
|
||||
VERSION_REQUIREMENT_LIST,
|
||||
VERSION_REQUIREMENT_TABLE,
|
||||
JVM_EXT_CLASS_MODULE_NAME,
|
||||
JVM_EXT_CLASS_LOCAL_VARIABLE_LIST,
|
||||
@@ -302,10 +299,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
if (!checkEquals(old.typeTable, new.typeTable)) result.add(ProtoBufClassKind.TYPE_TABLE)
|
||||
}
|
||||
|
||||
if (old.hasVersionRequirement() != new.hasVersionRequirement()) result.add(ProtoBufClassKind.VERSION_REQUIREMENT)
|
||||
if (old.hasVersionRequirement()) {
|
||||
if (old.versionRequirement != new.versionRequirement) result.add(ProtoBufClassKind.VERSION_REQUIREMENT)
|
||||
}
|
||||
if (!checkEqualsClassVersionRequirement(old, new)) result.add(ProtoBufClassKind.VERSION_REQUIREMENT_LIST)
|
||||
|
||||
if (old.hasVersionRequirementTable() != new.hasVersionRequirementTable()) result.add(ProtoBufClassKind.VERSION_REQUIREMENT_TABLE)
|
||||
if (old.hasVersionRequirementTable()) {
|
||||
@@ -404,10 +398,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
if (!checkEquals(old.typeTable, new.typeTable)) return false
|
||||
}
|
||||
|
||||
if (old.hasVersionRequirement() != new.hasVersionRequirement()) return false
|
||||
if (old.hasVersionRequirement()) {
|
||||
if (old.versionRequirement != new.versionRequirement) return false
|
||||
}
|
||||
if (!checkEqualsFunctionVersionRequirement(old, new)) return false
|
||||
|
||||
if (old.hasContract() != new.hasContract()) return false
|
||||
if (old.hasContract()) {
|
||||
@@ -510,10 +501,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
if (old.setterFlags != new.setterFlags) return false
|
||||
}
|
||||
|
||||
if (old.hasVersionRequirement() != new.hasVersionRequirement()) return false
|
||||
if (old.hasVersionRequirement()) {
|
||||
if (old.versionRequirement != new.versionRequirement) return false
|
||||
}
|
||||
if (!checkEqualsPropertyVersionRequirement(old, new)) return false
|
||||
|
||||
if (old.hasExtension(JvmProtoBuf.propertySignature) != new.hasExtension(JvmProtoBuf.propertySignature)) return false
|
||||
if (old.hasExtension(JvmProtoBuf.propertySignature)) {
|
||||
@@ -603,10 +591,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
|
||||
if (!checkEqualsTypeAliasAnnotation(old, new)) return false
|
||||
|
||||
if (old.hasVersionRequirement() != new.hasVersionRequirement()) return false
|
||||
if (old.hasVersionRequirement()) {
|
||||
if (old.versionRequirement != new.versionRequirement) return false
|
||||
}
|
||||
if (!checkEqualsTypeAliasVersionRequirement(old, new)) return false
|
||||
|
||||
return true
|
||||
}
|
||||
@@ -788,10 +773,7 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
|
||||
if (!checkEqualsConstructorValueParameter(old, new)) return false
|
||||
|
||||
if (old.hasVersionRequirement() != new.hasVersionRequirement()) return false
|
||||
if (old.hasVersionRequirement()) {
|
||||
if (old.versionRequirement != new.versionRequirement) return false
|
||||
}
|
||||
if (!checkEqualsConstructorVersionRequirement(old, new)) return false
|
||||
|
||||
if (old.hasExtension(JvmProtoBuf.constructorSignature) != new.hasExtension(JvmProtoBuf.constructorSignature)) return false
|
||||
if (old.hasExtension(JvmProtoBuf.constructorSignature)) {
|
||||
@@ -1262,6 +1244,16 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
return true
|
||||
}
|
||||
|
||||
open fun checkEqualsClassVersionRequirement(old: ProtoBuf.Class, new: ProtoBuf.Class): Boolean {
|
||||
if (old.versionRequirementCount != new.versionRequirementCount) return false
|
||||
|
||||
for(i in 0..old.versionRequirementCount - 1) {
|
||||
if (old.getVersionRequirement(i) != new.getVersionRequirement(i)) return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
open fun checkEqualsFunctionTypeParameter(old: ProtoBuf.Function, new: ProtoBuf.Function): Boolean {
|
||||
if (old.typeParameterCount != new.typeParameterCount) return false
|
||||
|
||||
@@ -1282,6 +1274,16 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
return true
|
||||
}
|
||||
|
||||
open fun checkEqualsFunctionVersionRequirement(old: ProtoBuf.Function, new: ProtoBuf.Function): Boolean {
|
||||
if (old.versionRequirementCount != new.versionRequirementCount) return false
|
||||
|
||||
for(i in 0..old.versionRequirementCount - 1) {
|
||||
if (old.getVersionRequirement(i) != new.getVersionRequirement(i)) return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
open fun checkEqualsPropertyTypeParameter(old: ProtoBuf.Property, new: ProtoBuf.Property): Boolean {
|
||||
if (old.typeParameterCount != new.typeParameterCount) return false
|
||||
|
||||
@@ -1292,6 +1294,16 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
return true
|
||||
}
|
||||
|
||||
open fun checkEqualsPropertyVersionRequirement(old: ProtoBuf.Property, new: ProtoBuf.Property): Boolean {
|
||||
if (old.versionRequirementCount != new.versionRequirementCount) return false
|
||||
|
||||
for(i in 0..old.versionRequirementCount - 1) {
|
||||
if (old.getVersionRequirement(i) != new.getVersionRequirement(i)) return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
open fun checkEqualsTypeAliasTypeParameter(old: ProtoBuf.TypeAlias, new: ProtoBuf.TypeAlias): Boolean {
|
||||
if (old.typeParameterCount != new.typeParameterCount) return false
|
||||
|
||||
@@ -1312,6 +1324,16 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
return true
|
||||
}
|
||||
|
||||
open fun checkEqualsTypeAliasVersionRequirement(old: ProtoBuf.TypeAlias, new: ProtoBuf.TypeAlias): Boolean {
|
||||
if (old.versionRequirementCount != new.versionRequirementCount) return false
|
||||
|
||||
for(i in 0..old.versionRequirementCount - 1) {
|
||||
if (old.getVersionRequirement(i) != new.getVersionRequirement(i)) return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
open fun checkEqualsTypeTableType(old: ProtoBuf.TypeTable, new: ProtoBuf.TypeTable): Boolean {
|
||||
if (old.typeCount != new.typeCount) return false
|
||||
|
||||
@@ -1372,6 +1394,16 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
|
||||
return true
|
||||
}
|
||||
|
||||
open fun checkEqualsConstructorVersionRequirement(old: ProtoBuf.Constructor, new: ProtoBuf.Constructor): Boolean {
|
||||
if (old.versionRequirementCount != new.versionRequirementCount) return false
|
||||
|
||||
for(i in 0..old.versionRequirementCount - 1) {
|
||||
if (old.getVersionRequirement(i) != new.getVersionRequirement(i)) return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
open fun checkEqualsAnnotationArgument(old: ProtoBuf.Annotation, new: ProtoBuf.Annotation): Boolean {
|
||||
if (old.argumentCount != new.argumentCount) return false
|
||||
|
||||
@@ -1562,8 +1594,8 @@ fun ProtoBuf.Class.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) ->
|
||||
hashCode = 31 * hashCode + typeTable.hashCode(stringIndexes, fqNameIndexes)
|
||||
}
|
||||
|
||||
if (hasVersionRequirement()) {
|
||||
hashCode = 31 * hashCode + versionRequirement
|
||||
for(i in 0..versionRequirementCount - 1) {
|
||||
hashCode = 31 * hashCode + getVersionRequirement(i)
|
||||
}
|
||||
|
||||
if (hasVersionRequirementTable()) {
|
||||
@@ -1642,8 +1674,8 @@ fun ProtoBuf.Function.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int)
|
||||
hashCode = 31 * hashCode + typeTable.hashCode(stringIndexes, fqNameIndexes)
|
||||
}
|
||||
|
||||
if (hasVersionRequirement()) {
|
||||
hashCode = 31 * hashCode + versionRequirement
|
||||
for(i in 0..versionRequirementCount - 1) {
|
||||
hashCode = 31 * hashCode + getVersionRequirement(i)
|
||||
}
|
||||
|
||||
if (hasContract()) {
|
||||
@@ -1726,8 +1758,8 @@ fun ProtoBuf.Property.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int)
|
||||
hashCode = 31 * hashCode + setterFlags
|
||||
}
|
||||
|
||||
if (hasVersionRequirement()) {
|
||||
hashCode = 31 * hashCode + versionRequirement
|
||||
for(i in 0..versionRequirementCount - 1) {
|
||||
hashCode = 31 * hashCode + getVersionRequirement(i)
|
||||
}
|
||||
|
||||
if (hasExtension(JvmProtoBuf.propertySignature)) {
|
||||
@@ -1802,8 +1834,8 @@ fun ProtoBuf.TypeAlias.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int
|
||||
hashCode = 31 * hashCode + getAnnotation(i).hashCode(stringIndexes, fqNameIndexes)
|
||||
}
|
||||
|
||||
if (hasVersionRequirement()) {
|
||||
hashCode = 31 * hashCode + versionRequirement
|
||||
for(i in 0..versionRequirementCount - 1) {
|
||||
hashCode = 31 * hashCode + getVersionRequirement(i)
|
||||
}
|
||||
|
||||
return hashCode
|
||||
@@ -1960,8 +1992,8 @@ fun ProtoBuf.Constructor.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (I
|
||||
hashCode = 31 * hashCode + getValueParameter(i).hashCode(stringIndexes, fqNameIndexes)
|
||||
}
|
||||
|
||||
if (hasVersionRequirement()) {
|
||||
hashCode = 31 * hashCode + versionRequirement
|
||||
for(i in 0..versionRequirementCount - 1) {
|
||||
hashCode = 31 * hashCode + getVersionRequirement(i)
|
||||
}
|
||||
|
||||
if (hasExtension(JvmProtoBuf.constructorSignature)) {
|
||||
|
||||
@@ -223,7 +223,7 @@ class DifferenceCalculatorForClass(
|
||||
ProtoBufClassKind.TYPE_TABLE -> {
|
||||
// TODO
|
||||
}
|
||||
ProtoCompareGenerated.ProtoBufClassKind.VERSION_REQUIREMENT,
|
||||
ProtoCompareGenerated.ProtoBufClassKind.VERSION_REQUIREMENT_LIST,
|
||||
ProtoCompareGenerated.ProtoBufClassKind.VERSION_REQUIREMENT_TABLE -> {
|
||||
// TODO
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+6
-6
@@ -76,9 +76,9 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta
|
||||
it is CallableMemberDescriptor && it.hasJvmDefaultAnnotation()
|
||||
}
|
||||
) {
|
||||
assert(!builder.hasVersionRequirement()) { "VersionRequirement should be empty for $classDescriptor" }
|
||||
builder.versionRequirement =
|
||||
writeVersionRequirement(1, 2, 40, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, versionRequirementTable)
|
||||
builder.addVersionRequirement(
|
||||
writeVersionRequirement(1, 2, 40, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, versionRequirementTable)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,9 +183,9 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta
|
||||
if (descriptor.isJvmFieldPropertyInInterfaceCompanion()) {
|
||||
proto.setExtension(JvmProtoBuf.flags, JvmFlags.getPropertyFlags(true))
|
||||
|
||||
assert(!proto.hasVersionRequirement()) { "VersionRequirement should be empty for $descriptor" }
|
||||
proto.versionRequirement =
|
||||
writeVersionRequirement(1, 2, 70, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, versionRequirementTable)
|
||||
proto.addVersionRequirement(
|
||||
writeVersionRequirement(1, 2, 70, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, versionRequirementTable)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -310,7 +310,9 @@ class DeprecationResolver(
|
||||
result.add(deprecation)
|
||||
}
|
||||
|
||||
getDeprecationByVersionRequirement(target)?.let(result::add)
|
||||
for (deprecation in getDeprecationByVersionRequirement(target)) {
|
||||
result.add(deprecation)
|
||||
}
|
||||
getDeprecationByCoroutinesVersion(target)?.let(result::add)
|
||||
}
|
||||
|
||||
@@ -356,30 +358,33 @@ class DeprecationResolver(
|
||||
DeprecatedExperimentalCoroutine(target)
|
||||
else null
|
||||
|
||||
private fun getDeprecationByVersionRequirement(target: DeclarationDescriptor): DeprecatedByVersionRequirement? {
|
||||
private fun getDeprecationByVersionRequirement(target: DeclarationDescriptor): List<DeprecatedByVersionRequirement> {
|
||||
fun createVersion(version: String): MavenComparableVersion? = try {
|
||||
MavenComparableVersion(version)
|
||||
} catch (e: Exception) {
|
||||
null
|
||||
}
|
||||
|
||||
val versionRequirement =
|
||||
(target as? DeserializedMemberDescriptor)?.versionRequirement
|
||||
?: (target as? DeserializedClassDescriptor)?.versionRequirement
|
||||
?: return null
|
||||
val requiredVersion = createVersion(versionRequirement.version.asString())
|
||||
val currentVersion = when (versionRequirement.kind) {
|
||||
ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION ->
|
||||
MavenComparableVersion(languageVersionSettings.languageVersion.versionString)
|
||||
ProtoBuf.VersionRequirement.VersionKind.API_VERSION ->
|
||||
languageVersionSettings.apiVersion.version
|
||||
ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION ->
|
||||
KotlinCompilerVersion.getVersion()?.substringBefore('-')?.let(::createVersion)
|
||||
else -> null
|
||||
val versionRequirements =
|
||||
(target as? DeserializedMemberDescriptor)?.versionRequirements
|
||||
?: (target as? DeserializedClassDescriptor)?.versionRequirements
|
||||
?: return emptyList()
|
||||
|
||||
return versionRequirements.mapNotNull { versionRequirement ->
|
||||
val requiredVersion = createVersion(versionRequirement.version.asString())
|
||||
val currentVersion = when (versionRequirement.kind) {
|
||||
ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION ->
|
||||
MavenComparableVersion(languageVersionSettings.languageVersion.versionString)
|
||||
ProtoBuf.VersionRequirement.VersionKind.API_VERSION ->
|
||||
languageVersionSettings.apiVersion.version
|
||||
ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION ->
|
||||
KotlinCompilerVersion.getVersion()?.substringBefore('-')?.let(::createVersion)
|
||||
else -> null
|
||||
}
|
||||
if (currentVersion != null && currentVersion < requiredVersion)
|
||||
DeprecatedByVersionRequirement(versionRequirement, target)
|
||||
else
|
||||
null
|
||||
}
|
||||
if (currentVersion != null && currentVersion < requiredVersion) {
|
||||
return DeprecatedByVersionRequirement(versionRequirement, target)
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
+22
-26
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.builtins.transformSuspendFunctionToRuntimeFunctionTy
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.Flags
|
||||
import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement
|
||||
@@ -141,10 +142,7 @@ class DescriptorSerializer private constructor(
|
||||
builder.typeTable = typeTableProto
|
||||
}
|
||||
|
||||
val requirement = serializeVersionRequirement(classDescriptor)
|
||||
if (requirement != null) {
|
||||
builder.versionRequirement = requirement
|
||||
}
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(classDescriptor))
|
||||
|
||||
extension.serializeClass(classDescriptor, builder, versionRequirementTable)
|
||||
|
||||
@@ -235,11 +233,10 @@ class DescriptorSerializer private constructor(
|
||||
}
|
||||
}
|
||||
|
||||
val requirement = serializeVersionRequirement(descriptor)
|
||||
if (requirement != null) {
|
||||
builder.versionRequirement = requirement
|
||||
} else if (descriptor.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.versionRequirement = writeVersionRequirementDependingOnCoroutinesVersion()
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(descriptor))
|
||||
|
||||
if (descriptor.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion())
|
||||
}
|
||||
|
||||
extension.serializeProperty(descriptor, builder, versionRequirementTable)
|
||||
@@ -305,11 +302,10 @@ class DescriptorSerializer private constructor(
|
||||
}
|
||||
}
|
||||
|
||||
val requirement = serializeVersionRequirement(descriptor)
|
||||
if (requirement != null) {
|
||||
builder.versionRequirement = requirement
|
||||
} else if (descriptor.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.versionRequirement = writeVersionRequirementDependingOnCoroutinesVersion()
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(descriptor))
|
||||
|
||||
if (descriptor.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion())
|
||||
}
|
||||
|
||||
contractSerializer.serializeContractOfFunctionIfAny(descriptor, builder, this)
|
||||
@@ -335,11 +331,10 @@ class DescriptorSerializer private constructor(
|
||||
builder.addValueParameter(local.valueParameter(valueParameterDescriptor))
|
||||
}
|
||||
|
||||
val requirement = serializeVersionRequirement(descriptor)
|
||||
if (requirement != null) {
|
||||
builder.versionRequirement = requirement
|
||||
} else if (descriptor.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.versionRequirement = writeVersionRequirementDependingOnCoroutinesVersion()
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(descriptor))
|
||||
|
||||
if (descriptor.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion())
|
||||
}
|
||||
|
||||
extension.serializeConstructor(descriptor, builder)
|
||||
@@ -392,10 +387,7 @@ class DescriptorSerializer private constructor(
|
||||
builder.setExpandedType(local.type(expandedType))
|
||||
}
|
||||
|
||||
val requirement = serializeVersionRequirement(descriptor)
|
||||
if (requirement != null) {
|
||||
builder.versionRequirement = requirement
|
||||
}
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(descriptor))
|
||||
|
||||
for (annotation in descriptor.nonSourceAnnotations) {
|
||||
builder.addAnnotation(extension.annotationSerializer.serializeAnnotation(annotation))
|
||||
@@ -633,9 +625,13 @@ class DescriptorSerializer private constructor(
|
||||
return writeVersionRequirement(major, minor, patch, versionKind, versionRequirementTable)
|
||||
}
|
||||
|
||||
// Returns index into versionRequirementTable, or null if there's no @RequireKotlin on the descriptor
|
||||
private fun serializeVersionRequirement(descriptor: DeclarationDescriptor): Int? {
|
||||
val annotation = descriptor.annotations.findAnnotation(RequireKotlinNames.FQ_NAME) ?: return null
|
||||
// Returns a list of indices into versionRequirementTable, or empty list if there's no @RequireKotlin on the descriptor
|
||||
private fun serializeVersionRequirements(descriptor: DeclarationDescriptor): List<Int> =
|
||||
descriptor.annotations
|
||||
.filter { it.fqName == RequireKotlinNames.FQ_NAME }
|
||||
.mapNotNull(::serializeVersionRequirementFromRequireKotlin)
|
||||
|
||||
private fun serializeVersionRequirementFromRequireKotlin(annotation: AnnotationDescriptor): Int? {
|
||||
val args = annotation.allValueArguments
|
||||
|
||||
val versionString = (args[RequireKotlinNames.VERSION] as? StringValue)?.value ?: return null
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
||||
package a
|
||||
|
||||
import kotlin.internal.RequireKotlin as RK
|
||||
import kotlin.internal.RequireKotlinVersionKind as K
|
||||
|
||||
@RK("42.33", message = "This declaration is only supported since Kotlin 42.33")
|
||||
@RK("40.34", versionKind = K.API_VERSION)
|
||||
@RK("45.35")
|
||||
class A
|
||||
|
||||
@RK("42.33", message = "This declaration is only supported since Kotlin 42.33")
|
||||
@RK("40.34", versionKind = K.API_VERSION)
|
||||
@RK("45.35")
|
||||
@RK("1.1")
|
||||
fun f() {}
|
||||
|
||||
@RK("42.33", message = "This declaration is only supported since Kotlin 42.33")
|
||||
@RK("40.34", versionKind = K.API_VERSION)
|
||||
@RK("45.35")
|
||||
val p = ""
|
||||
|
||||
@RK("42.33", message = "This declaration is only supported since Kotlin 42.33")
|
||||
@RK("40.34", versionKind = K.API_VERSION)
|
||||
@RK("45.35")
|
||||
@RK("1.1")
|
||||
typealias TA = String
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:13: error: 'A' is only available since Kotlin 42.33 and cannot be used in Kotlin 1.2. This declaration is only supported since Kotlin 42.33
|
||||
fun test(a: A): TA {
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:13: error: 'A' is only available since Kotlin 40.34 and cannot be used in Kotlin 1.2
|
||||
fun test(a: A): TA {
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:13: error: 'A' is only available since Kotlin 45.35 and cannot be used in Kotlin 1.2
|
||||
fun test(a: A): TA {
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:17: error: 'typealias TA = String' is only available since Kotlin 42.33 and cannot be used in Kotlin 1.2. This declaration is only supported since Kotlin 42.33
|
||||
fun test(a: A): TA {
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:17: error: 'typealias TA = String' is only available since Kotlin 40.34 and cannot be used in Kotlin 1.2
|
||||
fun test(a: A): TA {
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:3:17: error: 'typealias TA = String' is only available since Kotlin 45.35 and cannot be used in Kotlin 1.2
|
||||
fun test(a: A): TA {
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:4:5: error: 'f(): Unit' is only available since Kotlin 42.33 and cannot be used in Kotlin 1.2. This declaration is only supported since Kotlin 42.33
|
||||
f()
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:4:5: error: 'f(): Unit' is only available since Kotlin 40.34 and cannot be used in Kotlin 1.2
|
||||
f()
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:4:5: error: 'f(): Unit' is only available since Kotlin 45.35 and cannot be used in Kotlin 1.2
|
||||
f()
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:5:12: error: 'p: String' is only available since Kotlin 42.33 and cannot be used in Kotlin 1.2. This declaration is only supported since Kotlin 42.33
|
||||
return p
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:5:12: error: 'p: String' is only available since Kotlin 40.34 and cannot be used in Kotlin 1.2
|
||||
return p
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/requireKotlin/source.kt:5:12: error: 'p: String' is only available since Kotlin 45.35 and cannot be used in Kotlin 1.2
|
||||
return p
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
@@ -0,0 +1,6 @@
|
||||
import a.*
|
||||
|
||||
fun test(a: A): TA {
|
||||
f()
|
||||
return p
|
||||
}
|
||||
+4
@@ -296,6 +296,10 @@ class CompileKotlinAgainstCustomBinariesTest : AbstractKotlinCompilerIntegration
|
||||
doTestKotlinLibraryWithWrongMetadataVersionJs("library", "-Xskip-metadata-version-check")
|
||||
}
|
||||
|
||||
fun testRequireKotlin() {
|
||||
compileKotlin("source.kt", tmpdir, listOf(compileLibrary("library")))
|
||||
}
|
||||
|
||||
fun testRequireKotlinInNestedClasses() {
|
||||
compileKotlin("source.kt", tmpdir, listOf(compileLibrary("library")))
|
||||
}
|
||||
|
||||
@@ -37,8 +37,8 @@ abstract class AbstractVersionRequirementTest : TestCaseWithTmpdir() {
|
||||
val descriptor = module.findUnambiguousDescriptorByFqName(fqName)
|
||||
|
||||
val requirement = when (descriptor) {
|
||||
is DeserializedMemberDescriptor -> descriptor.versionRequirement
|
||||
is DeserializedClassDescriptor -> descriptor.versionRequirement
|
||||
is DeserializedMemberDescriptor -> descriptor.versionRequirements.single()
|
||||
is DeserializedClassDescriptor -> descriptor.versionRequirements.single()
|
||||
else -> throw AssertionError("Unknown descriptor: $descriptor")
|
||||
} ?: throw AssertionError("No VersionRequirement for $descriptor")
|
||||
|
||||
|
||||
+2
-3
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.serialization.deserialization
|
||||
|
||||
import org.jetbrains.kotlin.builtins.isSuspendFunctionTypeOrSubtype
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget
|
||||
@@ -138,7 +137,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
|
||||
}
|
||||
|
||||
private fun DeserializedMemberDescriptor.versionAndReleaseCoroutinesMismatch(): Boolean =
|
||||
c.components.configuration.releaseCoroutines && versionRequirement?.version != VersionRequirement.Version(1, 3)
|
||||
c.components.configuration.releaseCoroutines && versionRequirements.none { it.version == VersionRequirement.Version(1, 3) }
|
||||
|
||||
private fun loadOldFlags(oldFlags: Int): Int {
|
||||
val lowSixBits = oldFlags and 0x3f
|
||||
@@ -231,7 +230,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
|
||||
descriptor.isExperimentalCoroutineInReleaseEnvironment = local.typeDeserializer.experimentalSuspendFunctionTypeEncountered ||
|
||||
((c.containingDeclaration as? DeserializedClassDescriptor)?.c?.typeDeserializer?.experimentalSuspendFunctionTypeEncountered == true &&
|
||||
c.components.configuration.releaseCoroutines &&
|
||||
descriptor.versionRequirement?.version != VersionRequirement.Version(1, 3))
|
||||
descriptor.versionRequirements.none { it.version == VersionRequirement.Version(1, 3) })
|
||||
|
||||
return descriptor
|
||||
}
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@ class DeserializedClassDescriptor(
|
||||
(containingDeclaration as? DeserializedClassDescriptor)?.thisAsProtoContainer
|
||||
)
|
||||
|
||||
val versionRequirement: VersionRequirement?
|
||||
val versionRequirements: List<VersionRequirement>
|
||||
get() = VersionRequirement.create(classProto, c.nameResolver, c.versionRequirementTable)
|
||||
|
||||
override val annotations =
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ interface DeserializedMemberDescriptor : MemberDescriptor {
|
||||
|
||||
val versionRequirementTable: VersionRequirementTable
|
||||
|
||||
val versionRequirement: VersionRequirement?
|
||||
val versionRequirements: List<VersionRequirement>
|
||||
get() = VersionRequirement.create(proto, nameResolver, versionRequirementTable)
|
||||
|
||||
// Information about the origin of this callable's container (class or package part on JVM) or null if there's no such information.
|
||||
|
||||
@@ -220,7 +220,7 @@ message Class {
|
||||
optional TypeTable type_table = 30;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
repeated int32 version_requirement = 31;
|
||||
|
||||
optional VersionRequirementTable version_requirement_table = 32;
|
||||
|
||||
@@ -258,7 +258,7 @@ message Constructor {
|
||||
repeated ValueParameter value_parameter = 2;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
repeated int32 version_requirement = 31;
|
||||
|
||||
extensions 100 to 18999;
|
||||
}
|
||||
@@ -295,7 +295,7 @@ message Function {
|
||||
optional TypeTable type_table = 30;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
repeated int32 version_requirement = 31;
|
||||
|
||||
optional Contract contract = 32;
|
||||
|
||||
@@ -349,7 +349,7 @@ message Property {
|
||||
optional int32 setter_flags = 8;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
repeated int32 version_requirement = 31;
|
||||
|
||||
extensions 100 to 18999;
|
||||
}
|
||||
@@ -394,7 +394,7 @@ message TypeAlias {
|
||||
repeated Annotation annotation = 8;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
repeated int32 version_requirement = 31;
|
||||
|
||||
extensions 100 to 199;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+11
-7
@@ -81,16 +81,20 @@ class VersionRequirement(
|
||||
"since $version $level" + (if (errorCode != null) " error $errorCode" else "") + (if (message != null) ": $message" else "")
|
||||
|
||||
companion object {
|
||||
fun create(proto: MessageLite, nameResolver: NameResolver, table: VersionRequirementTable): VersionRequirement? {
|
||||
val id = when (proto) {
|
||||
is ProtoBuf.Class -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null
|
||||
is ProtoBuf.Constructor -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null
|
||||
is ProtoBuf.Function -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null
|
||||
is ProtoBuf.Property -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null
|
||||
is ProtoBuf.TypeAlias -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null
|
||||
fun create(proto: MessageLite, nameResolver: NameResolver, table: VersionRequirementTable): List<VersionRequirement> {
|
||||
val ids = when (proto) {
|
||||
is ProtoBuf.Class -> proto.versionRequirementList
|
||||
is ProtoBuf.Constructor -> proto.versionRequirementList
|
||||
is ProtoBuf.Function -> proto.versionRequirementList
|
||||
is ProtoBuf.Property -> proto.versionRequirementList
|
||||
is ProtoBuf.TypeAlias -> proto.versionRequirementList
|
||||
else -> throw IllegalStateException("Unexpected declaration: ${proto::class.java}")
|
||||
}
|
||||
|
||||
return ids.mapNotNull { id -> create(id, nameResolver, table) }
|
||||
}
|
||||
|
||||
fun create(id: Int, nameResolver: NameResolver, table: VersionRequirementTable): VersionRequirement? {
|
||||
val info = table[id] ?: return null
|
||||
|
||||
val version = Version.decode(
|
||||
|
||||
@@ -9,7 +9,6 @@ import kotlinx.metadata.*
|
||||
import kotlinx.metadata.impl.extensions.MetadataExtensions
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.*
|
||||
import org.jetbrains.kotlin.protobuf.MessageLite
|
||||
import org.jetbrains.kotlin.metadata.deserialization.Flags as F
|
||||
|
||||
class ReadContext(
|
||||
@@ -77,8 +76,8 @@ fun ProtoBuf.Class.accept(v: KmClassVisitor, strings: NameResolver) {
|
||||
v.visitSealedSubclass(c.className(sealedSubclassFqName))
|
||||
}
|
||||
|
||||
if (hasVersionRequirement()) {
|
||||
v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(it, c) }
|
||||
for (versionRequirement in versionRequirementList) {
|
||||
v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(versionRequirement, it, c) }
|
||||
}
|
||||
|
||||
for (extension in c.extensions) {
|
||||
@@ -134,8 +133,8 @@ private fun ProtoBuf.Constructor.accept(v: KmConstructorVisitor, c: ReadContext)
|
||||
v.visitValueParameter(parameter.flags, c[parameter.name])?.let { parameter.accept(it, c) }
|
||||
}
|
||||
|
||||
if (hasVersionRequirement()) {
|
||||
v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(it, c) }
|
||||
for (versionRequirement in versionRequirementList) {
|
||||
v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(versionRequirement, it, c) }
|
||||
}
|
||||
|
||||
for (extension in c.extensions) {
|
||||
@@ -168,8 +167,8 @@ private fun ProtoBuf.Function.accept(v: KmFunctionVisitor, outer: ReadContext) {
|
||||
v.visitContract()?.let { contract.accept(it, c) }
|
||||
}
|
||||
|
||||
if (hasVersionRequirement()) {
|
||||
v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(it, c) }
|
||||
for (versionRequirement in versionRequirementList) {
|
||||
v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(versionRequirement, it, c) }
|
||||
}
|
||||
|
||||
for (extension in c.extensions) {
|
||||
@@ -199,8 +198,8 @@ fun ProtoBuf.Property.accept(v: KmPropertyVisitor, outer: ReadContext) {
|
||||
v.visitReturnType(returnType.typeFlags)?.let { returnType.accept(it, c) }
|
||||
}
|
||||
|
||||
if (hasVersionRequirement()) {
|
||||
v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(it, c) }
|
||||
for (versionRequirement in versionRequirementList) {
|
||||
v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(versionRequirement, it, c) }
|
||||
}
|
||||
|
||||
for (extension in c.extensions) {
|
||||
@@ -229,8 +228,8 @@ private fun ProtoBuf.TypeAlias.accept(v: KmTypeAliasVisitor, outer: ReadContext)
|
||||
v.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||
}
|
||||
|
||||
if (hasVersionRequirement()) {
|
||||
v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(it, c) }
|
||||
for (versionRequirement in versionRequirementList) {
|
||||
v.visitVersionRequirement()?.let { acceptVersionRequirementVisitor(versionRequirement, it, c) }
|
||||
}
|
||||
|
||||
v.visitEnd()
|
||||
@@ -327,9 +326,9 @@ private fun ProtoBuf.Type.accept(v: KmTypeVisitor, c: ReadContext) {
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
private fun MessageLite.acceptVersionRequirementVisitor(v: KmVersionRequirementVisitor, c: ReadContext) {
|
||||
val message = VersionRequirement.create(this, c.strings, c.versionRequirements)
|
||||
?: throw InconsistentKotlinMetadataException("No VersionRequirement with the given id in the table")
|
||||
private fun acceptVersionRequirementVisitor(id: Int, v: KmVersionRequirementVisitor, c: ReadContext) {
|
||||
val message = VersionRequirement.create(id, c.strings, c.versionRequirements)
|
||||
?: throw InconsistentKotlinMetadataException("No VersionRequirement with the given id in the table")
|
||||
|
||||
val kind = when (message.kind) {
|
||||
ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION -> KmVersionRequirementVersionKind.LANGUAGE_VERSION
|
||||
|
||||
@@ -139,7 +139,7 @@ private fun writeConstructor(c: WriteContext, flags: Flags, output: (ProtoBuf.Co
|
||||
writeValueParameter(c, flags, name) { t.addValueParameter(it.build()) }
|
||||
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor? =
|
||||
writeVersionRequirement(c) { t.versionRequirement = it }
|
||||
writeVersionRequirement(c) { t.addVersionRequirement(it) }
|
||||
|
||||
override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? =
|
||||
c.applySingleExtension(type) {
|
||||
@@ -171,7 +171,7 @@ private fun writeFunction(c: WriteContext, flags: Flags, name: String, output: (
|
||||
writeType(c, flags) { t.returnType = it.build() }
|
||||
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor? =
|
||||
writeVersionRequirement(c) { t.versionRequirement = it }
|
||||
writeVersionRequirement(c) { t.addVersionRequirement(it) }
|
||||
|
||||
override fun visitContract(): KmContractVisitor? =
|
||||
writeContract(c) { t.contract = it.build() }
|
||||
@@ -208,7 +208,7 @@ fun writeProperty(
|
||||
writeType(c, flags) { t.returnType = it.build() }
|
||||
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor? =
|
||||
writeVersionRequirement(c) { t.versionRequirement = it }
|
||||
writeVersionRequirement(c) { t.addVersionRequirement(it) }
|
||||
|
||||
override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? =
|
||||
c.applySingleExtension(type) {
|
||||
@@ -268,7 +268,7 @@ private fun writeTypeAlias(
|
||||
}
|
||||
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor? =
|
||||
writeVersionRequirement(c) { t.versionRequirement = it }
|
||||
writeVersionRequirement(c) { t.addVersionRequirement(it) }
|
||||
|
||||
override fun visitEnd() {
|
||||
if (flags != ProtoBuf.TypeAlias.getDefaultInstance().flags) {
|
||||
@@ -453,7 +453,7 @@ open class ClassWriter(stringTable: StringTable) : KmClassVisitor() {
|
||||
}
|
||||
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor? =
|
||||
writeVersionRequirement(c) { t.versionRequirement = it }
|
||||
writeVersionRequirement(c) { t.addVersionRequirement(it) }
|
||||
|
||||
override fun visitExtensions(type: KmExtensionType): KmClassExtensionVisitor? =
|
||||
c.applySingleExtension(type) {
|
||||
|
||||
@@ -84,6 +84,7 @@ internal annotation class AccessibleLateinitPropertyLiteral
|
||||
*/
|
||||
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.TYPEALIAS)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
@Repeatable
|
||||
@SinceKotlin("1.2")
|
||||
internal annotation class RequireKotlin(
|
||||
val version: String,
|
||||
|
||||
@@ -18,7 +18,7 @@ private fun visitFunction(settings: KotlinpSettings, sb: StringBuilder, flags: F
|
||||
val params = mutableListOf<String>()
|
||||
var receiverParameterType: String? = null
|
||||
var returnType: String? = null
|
||||
var versionRequirement: String? = null
|
||||
val versionRequirements = mutableListOf<String>()
|
||||
var jvmDesc: JvmMemberSignature? = null
|
||||
var lambdaClassOriginName: String? = null
|
||||
|
||||
@@ -37,7 +37,7 @@ private fun visitFunction(settings: KotlinpSettings, sb: StringBuilder, flags: F
|
||||
printType(flags) { returnType = it }
|
||||
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor? =
|
||||
printVersionRequirement { versionRequirement = it }
|
||||
printVersionRequirement { versionRequirements.add(it) }
|
||||
|
||||
override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? {
|
||||
if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
||||
@@ -57,7 +57,7 @@ private fun visitFunction(settings: KotlinpSettings, sb: StringBuilder, flags: F
|
||||
if (lambdaClassOriginName != null) {
|
||||
sb.appendln(" // lambda class origin: $lambdaClassOriginName")
|
||||
}
|
||||
if (versionRequirement != null) {
|
||||
for (versionRequirement in versionRequirements) {
|
||||
sb.appendln(" // $versionRequirement")
|
||||
}
|
||||
if (jvmDesc != null) {
|
||||
@@ -90,7 +90,7 @@ private fun visitProperty(
|
||||
var receiverParameterType: String? = null
|
||||
var returnType: String? = null
|
||||
var setterParameter: String? = null
|
||||
var versionRequirement: String? = null
|
||||
val versionRequirements = mutableListOf<String>()
|
||||
var jvmFieldDesc: JvmMemberSignature? = null
|
||||
var jvmGetterDesc: JvmMemberSignature? = null
|
||||
var jvmSetterDesc: JvmMemberSignature? = null
|
||||
@@ -109,7 +109,7 @@ private fun visitProperty(
|
||||
printType(flags) { returnType = it }
|
||||
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor? =
|
||||
printVersionRequirement { versionRequirement = it }
|
||||
printVersionRequirement { versionRequirements.add(it) }
|
||||
|
||||
override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? {
|
||||
if (type != JvmPropertyExtensionVisitor.TYPE) return null
|
||||
@@ -128,7 +128,7 @@ private fun visitProperty(
|
||||
|
||||
override fun visitEnd() {
|
||||
sb.appendln()
|
||||
if (versionRequirement != null) {
|
||||
for (versionRequirement in versionRequirements) {
|
||||
sb.appendln(" // $versionRequirement")
|
||||
}
|
||||
if (jvmFieldDesc != null) {
|
||||
@@ -181,14 +181,14 @@ private fun visitProperty(
|
||||
private fun visitConstructor(sb: StringBuilder, flags: Flags): KmConstructorVisitor =
|
||||
object : KmConstructorVisitor() {
|
||||
val params = mutableListOf<String>()
|
||||
var versionRequirement: String? = null
|
||||
val versionRequirements = mutableListOf<String>()
|
||||
var jvmDesc: JvmMemberSignature? = null
|
||||
|
||||
override fun visitValueParameter(flags: Flags, name: String): KmValueParameterVisitor? =
|
||||
printValueParameter(flags, name) { params.add(it) }
|
||||
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor? =
|
||||
printVersionRequirement { versionRequirement = it }
|
||||
printVersionRequirement { versionRequirements.add(it) }
|
||||
|
||||
override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? {
|
||||
if (type != JvmConstructorExtensionVisitor.TYPE) return null
|
||||
@@ -201,7 +201,7 @@ private fun visitConstructor(sb: StringBuilder, flags: Flags): KmConstructorVisi
|
||||
|
||||
override fun visitEnd() {
|
||||
sb.appendln()
|
||||
if (versionRequirement != null) {
|
||||
for (versionRequirement in versionRequirements) {
|
||||
sb.appendln(" // $versionRequirement")
|
||||
}
|
||||
if (jvmDesc != null) {
|
||||
@@ -221,7 +221,7 @@ private fun visitTypeAlias(settings: KotlinpSettings, sb: StringBuilder, flags:
|
||||
val typeParams = mutableListOf<String>()
|
||||
var underlyingType: String? = null
|
||||
var expandedType: String? = null
|
||||
var versionRequirement: String? = null
|
||||
val versionRequirements = mutableListOf<String>()
|
||||
|
||||
override fun visitTypeParameter(flags: Flags, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor? =
|
||||
printTypeParameter(settings, flags, name, id, variance) { typeParams.add(it) }
|
||||
@@ -237,11 +237,11 @@ private fun visitTypeAlias(settings: KotlinpSettings, sb: StringBuilder, flags:
|
||||
}
|
||||
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor? =
|
||||
printVersionRequirement { versionRequirement = it }
|
||||
printVersionRequirement { versionRequirements.add(it) }
|
||||
|
||||
override fun visitEnd() {
|
||||
sb.appendln()
|
||||
if (versionRequirement != null) {
|
||||
for (versionRequirement in versionRequirements) {
|
||||
sb.appendln(" // $versionRequirement")
|
||||
}
|
||||
for (annotation in annotations) {
|
||||
@@ -536,7 +536,7 @@ class ClassPrinter(private val settings: KotlinpSettings) : KmClassVisitor(), Ab
|
||||
private var name: ClassName? = null
|
||||
private val typeParams = mutableListOf<String>()
|
||||
private val supertypes = mutableListOf<String>()
|
||||
private var versionRequirement: String? = null
|
||||
private val versionRequirements = mutableListOf<String>()
|
||||
private var anonymousObjectOriginName: String? = null
|
||||
|
||||
override fun visit(flags: Flags, name: ClassName) {
|
||||
@@ -548,8 +548,8 @@ class ClassPrinter(private val settings: KotlinpSettings) : KmClassVisitor(), Ab
|
||||
if (anonymousObjectOriginName != null) {
|
||||
result.appendln("// anonymous object origin: $anonymousObjectOriginName")
|
||||
}
|
||||
if (versionRequirement != null) {
|
||||
result.appendln(" // $versionRequirement")
|
||||
for (versionRequirement in versionRequirements) {
|
||||
result.appendln("// $versionRequirement")
|
||||
}
|
||||
result.appendFlags(flags!!, CLASS_FLAGS_MAP)
|
||||
result.append(name)
|
||||
@@ -604,7 +604,7 @@ class ClassPrinter(private val settings: KotlinpSettings) : KmClassVisitor(), Ab
|
||||
}
|
||||
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor? =
|
||||
printVersionRequirement { versionRequirement = it }
|
||||
printVersionRequirement { versionRequirements.add(it) }
|
||||
|
||||
override fun visitExtensions(type: KmExtensionType): KmClassExtensionVisitor? {
|
||||
if (type != JvmClassExtensionVisitor.TYPE) return null
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
// test/Klass.class
|
||||
// ------------------------------------------
|
||||
// requires API version 1.2.0 (level=WARNING, message="Klass must not be used!")
|
||||
// requires API version 1.2.0 (level=WARNING, message="Klass must not be used!")
|
||||
public final class test/Klass : kotlin/Any {
|
||||
|
||||
// signature: <init>()V
|
||||
|
||||
Reference in New Issue
Block a user