forked from openrs2/openrs2
Fernflower was previously placing constructors in the middle of instance methods. They look much nicer at the top. This commit also ensures static methods appear before instance methods.master
parent
09bdf640f4
commit
ad53f9a78d
@ -0,0 +1,37 @@ |
||||
package dev.openrs2.deob.transform |
||||
|
||||
import dev.openrs2.asm.classpath.ClassPath |
||||
import dev.openrs2.asm.classpath.Library |
||||
import dev.openrs2.asm.transform.Transformer |
||||
import org.objectweb.asm.Opcodes |
||||
import org.objectweb.asm.tree.ClassNode |
||||
import org.objectweb.asm.tree.MethodNode |
||||
|
||||
class MethodOrderTransformer : Transformer() { |
||||
override fun transformClass(classPath: ClassPath, library: Library, clazz: ClassNode): Boolean { |
||||
clazz.methods.sortWith(STATIC_COMPARATOR.then(INIT_COMPARATOR)) |
||||
return false |
||||
} |
||||
|
||||
companion object { |
||||
private val STATIC_COMPARATOR = Comparator<MethodNode> { a, b -> |
||||
val aStatic = a.access and Opcodes.ACC_STATIC != 0 |
||||
val bStatic = b.access and Opcodes.ACC_STATIC != 0 |
||||
when { |
||||
aStatic && !bStatic -> -1 |
||||
!aStatic && bStatic -> 1 |
||||
else -> 0 |
||||
} |
||||
} |
||||
|
||||
private val INIT_COMPARATOR = Comparator<MethodNode> { a, b -> |
||||
val aInit = a.name.startsWith('<') |
||||
val bInit = b.name.startsWith('<') |
||||
when { |
||||
aInit && !bInit -> -1 |
||||
!aInit && bInit -> 1 |
||||
else -> 0 |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue