From ad8c64e1278a43bc281e64205ee94ee731860fce Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Sun, 20 May 2018 19:22:03 +0300 Subject: [PATCH] bcv: refactor: do not convert flags to string representation --- .../kotlinMetadataVisibilities.kt | 20 +++++++---------- .../kotlinVisibilities.kt | 22 ++++++++++++++++--- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/libraries/tools/binary-compatibility-validator/src/main/kotlin/org.jetbrains.kotlin.tools/kotlinMetadataVisibilities.kt b/libraries/tools/binary-compatibility-validator/src/main/kotlin/org.jetbrains.kotlin.tools/kotlinMetadataVisibilities.kt index 1fc5ed7f27e..9a2cd362a05 100644 --- a/libraries/tools/binary-compatibility-validator/src/main/kotlin/org.jetbrains.kotlin.tools/kotlinMetadataVisibilities.kt +++ b/libraries/tools/binary-compatibility-validator/src/main/kotlin/org.jetbrains.kotlin.tools/kotlinMetadataVisibilities.kt @@ -63,7 +63,7 @@ private fun visitFunction(flags: Flags, name: String, addMember: (MemberVisibili override fun visitEnd() { jvmDesc?.let { jvmDesc -> - addMember(MemberVisibility(jvmDesc.toMemberSignature(), name, flags.toVisibility())) + addMember(MemberVisibility(jvmDesc.toMemberSignature(), flags)) } } } @@ -82,7 +82,7 @@ private fun visitConstructor(flags: Flags, addMember: (MemberVisibility) -> Unit override fun visitEnd() { jvmDesc?.toMemberSignature()?.let { signature -> - addMember(MemberVisibility(signature, signature.name, flags.toVisibility())) + addMember(MemberVisibility(signature, flags)) } } } @@ -107,15 +107,15 @@ private fun visitProperty(flags: Flags, name: String, getterFlags: Flags, setter } override fun visitEnd() { - _getterDesc?.let { addMember(MemberVisibility(it, name, getterFlags.toVisibility())) } - _setterDesc?.let { addMember(MemberVisibility(it, name, setterFlags.toVisibility())) } + _getterDesc?.let { addMember(MemberVisibility(it, getterFlags)) } + _setterDesc?.let { addMember(MemberVisibility(it, setterFlags)) } fieldDesc?.let { - val fieldVisibility = (when { + val fieldVisibility = when { Flag.Property.IS_LATEINIT(flags) -> setterFlags _getterDesc == null && _setterDesc == null -> flags // JvmField or const case else -> flagsOf(Flag.IS_PRIVATE) - }).toVisibility() - addMember(MemberVisibility(it, name, fieldVisibility)) + } + addMember(MemberVisibility(it, fieldVisibility)) } } } @@ -175,11 +175,7 @@ fun KotlinClassMetadata.toClassVisibility(classNode: ClassNode): ClassVisibility } else -> {} } - return ClassVisibility(classNode.name, - flags?.toVisibility(), - members.associateBy { it.member }, - flags?.let { Flag.Class.IS_COMPANION_OBJECT(it) } ?: false, - _facadeClassName) + return ClassVisibility(classNode.name, flags, members.associateBy { it.member }, _facadeClassName) } fun ClassNode.toClassVisibility() = kotlinMetadata?.toClassVisibility(this) diff --git a/libraries/tools/binary-compatibility-validator/src/main/kotlin/org.jetbrains.kotlin.tools/kotlinVisibilities.kt b/libraries/tools/binary-compatibility-validator/src/main/kotlin/org.jetbrains.kotlin.tools/kotlinVisibilities.kt index 3bf5faa5363..b7fcb78d162 100644 --- a/libraries/tools/binary-compatibility-validator/src/main/kotlin/org.jetbrains.kotlin.tools/kotlinVisibilities.kt +++ b/libraries/tools/binary-compatibility-validator/src/main/kotlin/org.jetbrains.kotlin.tools/kotlinVisibilities.kt @@ -5,7 +5,18 @@ package org.jetbrains.kotlin.tools -class ClassVisibility(val name: String, val visibility: String?, val members: Map, val isCompanion: Boolean = false, val facadeClassName: String? = null) { +import kotlinx.metadata.Flag +import kotlinx.metadata.Flags + +class ClassVisibility( + val name: String, + val flags: Flags?, + val members: Map, + val facadeClassName: String? = null +) { + val visibility get() = flags + val isCompanion: Boolean get() = flags != null && Flag.Class.IS_COMPANION_OBJECT(flags) + var companionVisibilities: ClassVisibility? = null val partVisibilities = mutableListOf() } @@ -14,10 +25,15 @@ fun ClassVisibility.findMember(signature: MemberSignature): MemberVisibility? = members[signature] ?: partVisibilities.mapNotNull { it.members[signature] }.firstOrNull() -data class MemberVisibility(val member: MemberSignature, val declaration: String?, val visibility: String?) +data class MemberVisibility(val member: MemberSignature, val visibility: Flags?) data class MemberSignature(val name: String, val desc: String) -private fun isPublic(visibility: String?, isPublishedApi: Boolean) = visibility == null || visibility == "public" || visibility == "protected" || (isPublishedApi && visibility == "internal") +private fun isPublic(visibility: Flags?, isPublishedApi: Boolean) = + visibility == null + || Flag.IS_PUBLIC(visibility) + || Flag.IS_PROTECTED(visibility) + || (isPublishedApi && Flag.IS_INTERNAL(visibility)) + fun ClassVisibility.isPublic(isPublishedApi: Boolean) = isPublic(visibility, isPublishedApi) fun MemberVisibility.isPublic(isPublishedApi: Boolean) = isPublic(visibility, isPublishedApi)