/* * Copyright (c) 2013-2017 Chris Newland. * Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD * Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki */ package org.adoptopenjdk.jitwatch.model; import java.util.HashMap; import java.util.Map; import org.adoptopenjdk.jitwatch.model.bytecode.Opcode; import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.S_NEWLINE; public class ParseDictionary implements IParseDictionary { private Map<String, Tag> typeMap = new HashMap<>(); private Map<String, Tag> klassMap = new HashMap<>(); private Map<String, Tag> methodMap = new HashMap<>(); private String parseMethod; private Map<String, BCIOpcodeMap> methodBCIOpcodeMap = new HashMap<>(); public ParseDictionary(String parseMethod) { this.parseMethod = parseMethod; } @Override public String getParseMethod() { return parseMethod; } @Override public void putBCIOpcode(String methodID, int bci, Opcode opcode) { BCIOpcodeMap bciOpcodeMap = getBCIOpcodeMap(methodID); if (bciOpcodeMap == null) { bciOpcodeMap = new BCIOpcodeMap(); methodBCIOpcodeMap.put(methodID, bciOpcodeMap); } bciOpcodeMap.put(bci, opcode); } @Override public BCIOpcodeMap getBCIOpcodeMap(String methodID) { return methodBCIOpcodeMap.get(methodID); } @Override public Tag getType(String id) { return typeMap.get(id); } @Override public Tag getKlass(String id) { return klassMap.get(id); } @Override public Tag getMethod(String id) { return methodMap.get(id); } @Override public void putType(String id, Tag type) { typeMap.put(id, type); } @Override public void putKlass(String id, Tag klass) { klassMap.put(id, klass); } @Override public void putMethod(String id, Tag method) { methodMap.put(id, method); } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Types:\n"); for (Map.Entry<String, Tag> entry : typeMap.entrySet()) { builder.append(entry.getKey()).append("\t=>\t").append(entry.getValue().toString().trim()).append(S_NEWLINE); } builder.append("Klasses:\n"); for (Map.Entry<String, Tag> entry : klassMap.entrySet()) { builder.append(entry.getKey()).append("\t=>\t").append(entry.getValue().toString().trim()).append(S_NEWLINE); } builder.append("Methods:\n"); for (Map.Entry<String, Tag> entry : methodMap.entrySet()) { builder.append(entry.getKey()).append("\t=>\t").append(entry.getValue().toString().trim()).append(S_NEWLINE); } return builder.toString().trim(); } }