package com.didichuxing.tools.droidassist.transform.enhance; import com.didichuxing.tools.droidassist.util.Logger; import javassist.CannotCompileException; import javassist.CtClass; import javassist.NotFoundException; import javassist.expr.NewExpr; /** * Transform that adds constructor-call time-consuming statistics code. */ public class ConstructorCallTimingTransformer extends TimingTransformer { @Override public String getName() { return "ConstructorCallTimingTransformer"; } @Override protected String getTransformType() { return TRANSFORM_EXPR; } @Override protected String getExecuteType() { return NEW_EXPR; } @Override protected boolean filterClass(CtClass inputClass, String inputClassName) { return !isMatchSourceClassName(inputClassName); } @Override protected boolean execute( CtClass inputClass, String inputClassName, NewExpr expr) throws CannotCompileException, NotFoundException { String insnClassName = expr.getClassName(); String insnSignature = expr.getSignature(); if (!isMatchConstructorSource(insnClassName, insnSignature)) { return false; } String statement = getDefaultTimingStatement(false, getTarget()); String replacement = replaceInstrument(expr, statement); Logger.warning(getPrettyName() + " by: " + replacement + " at " + inputClassName + ".java" + ":" + expr.getLineNumber()); return true; } }