package jetbrains.mps.testRead.SNodeReadTest; /*Generated by MPS */ import jetbrains.mps.smodel.NodeReadAccessInEditorListener; import java.util.Map; import java.util.HashMap; import org.jetbrains.mps.openapi.model.SNode; import java.util.List; import java.util.ArrayList; import jetbrains.mps.util.Pair; public class StatCountNodeReadAccessInEditorListener extends NodeReadAccessInEditorListener { private static Map<String, Integer> ourStatistics = new HashMap<String, Integer>(); private SNode mySNode; private int myReadCounter = 0; private List<String> myCallerMethods = new ArrayList<String>(); public StatCountNodeReadAccessInEditorListener(SNode sNode) { super(); mySNode = sNode; } @Override public void nodeUnclassifiedReadAccess(SNode node) { super.nodeUnclassifiedReadAccess(node); updateStatistic(node); } private void updateStatistic(SNode node) { if (node == mySNode) { myReadCounter++; Throwable throwable = new Throwable(); StackTraceElement[] traceElements = throwable.getStackTrace(); int i = 0; for (; i < traceElements.length; i++) { if (traceElements[i].getClassName().equals("jetbrains.mps.smodel.SNode") && traceElements[i].getMethodName().startsWith("fire")) { i++; break; } } String methodName = traceElements[(i < traceElements.length ? i : 0)].getMethodName(); myCallerMethods.add(methodName); ourStatistics.put(methodName, (ourStatistics.containsKey(methodName) ? ourStatistics.get(methodName) + 1 : 1)); } } public Pair<Integer, List<String>> getResults() { return new Pair(myReadCounter, ((ArrayList) myCallerMethods).clone()); } public void resetResults() { myReadCounter = 0; myCallerMethods.clear(); } public static Map<String, Integer> getStatistics() { return ourStatistics; } public static void resetStatistics() { ourStatistics.clear(); } }