package com.github.ompc.greys.core.util.affect; import com.github.ompc.greys.core.GlobalOptions; import java.io.File; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import static java.lang.String.format; /** * 增强影响范围<br/> * 统计影响类/方法/耗时 * Created by oldmanpushcart@gmail.com on 15/5/19. */ public final class EnhancerAffect extends Affect { private final AtomicInteger cCnt = new AtomicInteger(); private final AtomicInteger mCnt = new AtomicInteger(); /* * dumpClass的文件存放集合 */ private final Collection<File> classDumpFiles = new ArrayList<File>(); public EnhancerAffect() { } public EnhancerAffect(int cCnt, int mCnt) { this.cCnt(cCnt); this.mCnt(mCnt); } /** * 影响类统计 * * @param cc 类影响计数 * @return 当前影响类个数 */ public int cCnt(int cc) { return cCnt.addAndGet(cc); } /** * 影响方法统计 * * @param mc 方法影响计数 * @return 当前影响方法个数 */ public int mCnt(int mc) { return mCnt.addAndGet(mc); } /** * 获取影响类个数 * * @return 影响类个数 */ public int cCnt() { return cCnt.get(); } /** * 获取影响方法个数 * * @return 影响方法个数 */ public int mCnt() { return mCnt.get(); } /** * 获取dump的Class文件集合 * * @return classDumpList */ public Collection<File> getClassDumpFiles() { return classDumpFiles; } @Override public String toString() { final StringBuilder infoSB = new StringBuilder(); if (GlobalOptions.isDump && !classDumpFiles.isEmpty()) { for (File classDumpFile : classDumpFiles) { infoSB.append("[dump: ").append(classDumpFile.getAbsoluteFile()).append("]\n"); } } infoSB.append(format("Affect(class-cnt:%d , method-cnt:%d) cost in %s ms.", cCnt(), mCnt(), cost())); return infoSB.toString(); } }