@@ -14,16 +14,24 @@ import org.objectweb.asm.commons.AdviceAdapter
1414 * allows tracking the execution of methods in an Android application. When a target
1515 * method is entered, it begins a new trace section, and when the method is exited,
1616 * it ends the trace section.
17+ *
18+ * @param msgPrefix - Prefix of trace's section name.
1719 */
18- internal object TraceInjector : Injector {
20+ internal class TraceInjector (
21+ private val msgPrefix : String? = null
22+ ) : Injector {
1923
20- private const val TRACE_MSG_LENGTH = 127
21- private const val TRACE_MSG_PREFIX = " =>"
24+ private companion object {
25+ const val TRACE_MSG_LENGTH = 127
26+ const val TRACE_MSG_PREFIX = " "
27+ }
2228
2329 override fun onEnter (context : InjectorContext , mv : MethodVisitor ) {
30+ val prefix = msgPrefix ? : TRACE_MSG_PREFIX
2431 val className = context.className.substringAfterLast(" /" )
25- val msg = " $TRACE_MSG_PREFIX${className} .${context.methodName}${context.methodDescriptor} "
26- .takeLast(TRACE_MSG_LENGTH )
32+ val method = context.methodName
33+ val descriptor = context.methodDescriptor.stripPackages()
34+ val msg = " ${prefix}${className} .${method}${descriptor} " .take(TRACE_MSG_LENGTH )
2735
2836 mv.visitLdcInsn(msg)
2937 mv.visitMethodInsn(
@@ -33,7 +41,6 @@ internal object TraceInjector : Injector {
3341 " (Ljava/lang/String;)V" ,
3442 false ,
3543 )
36-
3744 }
3845
3946 override fun onExit (
@@ -50,4 +57,10 @@ internal object TraceInjector : Injector {
5057 false ,
5158 )
5259 }
60+
61+ private fun String.stripPackages (): String {
62+ return this .replace(Regex (" L[^;]+/" ), " L" )
63+ .replace(" (Ljava/lang/Void;)" , " ()" )
64+ .replace(" ()V" , " ()" )
65+ }
5366}
0 commit comments