/* * fb-contrib - Auxiliary detectors for Java programs * Copyright (C) 2005-2017 Dave Brosius * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.mebigfatguy.fbcontrib.collect; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import com.mebigfatguy.fbcontrib.utils.FQMethod; import com.mebigfatguy.fbcontrib.utils.ToString; /** * holds statistics about classes and methods collected in the first pass. */ public final class Statistics implements Iterable<Map.Entry<FQMethod, MethodInfo>> { private static Statistics statistics = new Statistics(); private static final MethodInfo NOT_FOUND_METHOD_INFO = new MethodInfo(); private final Map<FQMethod, MethodInfo> methodStatistics = new HashMap<>(); private Statistics() { } public static Statistics getStatistics() { return statistics; } public void clear() { methodStatistics.clear(); } public MethodInfo addMethodStatistics(String className, String methodName, String signature, int access, int numBytes, int numMethodCalls) { FQMethod key = new FQMethod(className, methodName, signature); MethodInfo mi = methodStatistics.get(key); if (mi == null) { mi = new MethodInfo(); methodStatistics.put(key, mi); } mi.setNumBytes(numBytes); mi.setNumMethodCalls(numMethodCalls); mi.setDeclaredAccess(access); return mi; } public MethodInfo getMethodStatistics(String className, String methodName, String signature) { MethodInfo mi = methodStatistics.get(new FQMethod(className, methodName, signature)); if (mi == null) { return NOT_FOUND_METHOD_INFO; } return mi; } @Override public Iterator<Map.Entry<FQMethod, MethodInfo>> iterator() { return methodStatistics.entrySet().iterator(); } public void addImmutabilityStatus(String className, String methodName, String signature, ImmutabilityType imType) { FQMethod key = new FQMethod(className, methodName, signature); MethodInfo mi = methodStatistics.get(key); if (mi == null) { mi = new MethodInfo(); methodStatistics.put(key, mi); } mi.setImmutabilityType(imType); } @Override public String toString() { return ToString.build(this); } }