Open-source multiplayer game server compatible with the RuneScape client https://www.openrs2.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
openrs2/asm/src/main/java/dev/openrs2/asm/classpath/ClassMetadata.kt

73 lines
1.9 KiB

package dev.openrs2.asm.classpath
import dev.openrs2.asm.MemberDesc
abstract class ClassMetadata {
abstract val name: String
abstract val dependency: Boolean
abstract val `interface`: Boolean
abstract val superClass: ClassMetadata?
abstract val superInterfaces: List<ClassMetadata>
abstract val fields: List<MemberDesc>
abstract val methods: List<MemberDesc>
abstract fun getAccess(method: MemberDesc): Int?
fun isOverride(method: MemberDesc): Boolean {
val superClass = this.superClass
if (superClass != null) {
if (method in superClass.methods) {
return true
}
if (superClass.isOverride(method)) {
return true
}
}
for (superInterface in superInterfaces) {
if (method in superInterface.methods) {
return true
}
if (superInterface.isOverride(method)) {
return true
}
}
return false
}
fun isAssignableFrom(type: ClassMetadata): Boolean {
return type == this || isSuperClassOf(type) || isSuperInterfaceOf(type)
}
private tailrec fun isSuperClassOf(type: ClassMetadata): Boolean {
val superClass = type.superClass ?: return false
if (superClass == this) {
return true
}
return isSuperClassOf(superClass)
}
private fun isSuperInterfaceOf(type: ClassMetadata): Boolean {
for (superInterface in type.superInterfaces) {
if (superInterface == this || isSuperInterfaceOf(superInterface)) {
return true
}
}
return false
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is ClassMetadata) return false
return name == other.name
}
override fun hashCode(): Int {
return name.hashCode()
}
}