bcv: refactor: do not convert flags to string representation

This commit is contained in:
Ilya Gorbunov
2018-05-20 19:22:03 +03:00
parent 66a9a90455
commit ad8c64e127
2 changed files with 27 additions and 15 deletions
@@ -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)
@@ -5,7 +5,18 @@
package org.jetbrains.kotlin.tools
class ClassVisibility(val name: String, val visibility: String?, val members: Map<MemberSignature, MemberVisibility>, 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<MemberSignature, MemberVisibility>,
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<ClassVisibility>()
}
@@ -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)