bcv: refactor: do not convert flags to string representation
This commit is contained in:
+8
-12
@@ -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)
|
||||
|
||||
+19
-3
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user