in chill-scala/src/main/scala/com/twitter/chill/ClosureCleaner.scala [313:345]
override def visit(
version: Int,
access: Int,
name: String,
sig: String,
superName: String,
interfaces: Array[String]
): Unit =
myName = name
override def visitMethod(
access: Int,
name: String,
desc: String,
sig: String,
exceptions: Array[String]
): MethodVisitor =
new MethodVisitor(ASM7) {
override def visitMethodInsn(op: Int, owner: String, name: String, desc: String, itf: Boolean): Unit = {
val argTypes = Type.getArgumentTypes(desc)
if (
op == INVOKESPECIAL && name == "<init>" && argTypes.nonEmpty
&& argTypes(0).toString.startsWith("L")
&& argTypes(0).getInternalName == myName
) {
output += Class.forName(
owner.replace('/', '.'),
false,
Thread.currentThread.getContextClassLoader
)
}
}
}