package com.bitshift.parsing.symbols; import java.util.HashMap; import java.util.ArrayList; import com.bitshift.parsing.symbols.Symbols; /*TODO: Overwrite toString.*/ public class JavaSymbols extends Symbols { private String _packageName; private HashMap> _classes; private HashMap> _interfaces; private HashMap> _methods; private HashMap> _vars; private HashMap> _imports; private final String assignKey = "\"assignments\""; private final String useKey = "\"uses\""; public JavaSymbols() { _packageName = null; _classes = new HashMap>(); _interfaces = new HashMap>(); _methods = new HashMap>(); _vars = new HashMap>(); _imports = new HashMap>(); } public boolean setPackage(String name) { _packageName = name; return true; } public boolean insertClassDeclaration(String name, HashMap data) { ArrayList assignments = new ArrayList(10); ArrayList uses = new ArrayList(10); HashMap klass = new HashMap(); assignments.add(data.get("coord")); klass.put(assignKey, assignments); klass.put(useKey, uses); this._classes.put(name, klass); return true; } public boolean insertInterfaceDeclaration(String name, HashMap data) { ArrayList assignments = new ArrayList(10); ArrayList uses = new ArrayList(10); HashMap klass = new HashMap(); assignments.add(data.get("coord")); klass.put(assignKey, assignments); klass.put(useKey, uses); this._interfaces.put(name, klass); return true; } public boolean insertMethodDeclaration(String name, HashMap data) { HashMap method = this._methods.get(name); if (method == null) { method = new HashMap(); ArrayList assignments = new ArrayList(10); ArrayList uses = new ArrayList(10); assignments.add(data.get("coord")); method.put(assignKey, assignments); method.put(useKey, uses); } else { ArrayList assignments = (ArrayList)method.get(assignKey); assignments.add(data.get("coord")); method.put(assignKey, assignments); } this._methods.put(name, method); return true; } public boolean insertMethodInvocation(String name, HashMap data) { HashMap method = this._methods.get(name); if (method == null) { method = new HashMap(); ArrayList assignments = new ArrayList(10); ArrayList uses = new ArrayList(10); uses.add(data.get("coord")); method.put(assignKey, assignments); method.put(useKey, uses); } else { ArrayList uses = (ArrayList)method.get(useKey); uses.add(data.get("coord")); method.put(useKey, uses); } this._methods.put(name, method); return true; } public boolean insertVariableDeclaration(String name, HashMap data) { HashMap var = this._vars.get(name); if (var == null) { var = new HashMap(); ArrayList assignments = new ArrayList(10); ArrayList uses = new ArrayList(10); assignments.add(data.get("coord")); var.put(assignKey, assignments); var.put(useKey, uses); } else { ArrayList assignments = (ArrayList)var.get(assignKey); assignments.add(data.get("coord")); var.put(assignKey, assignments); } this._vars.put(name, var); return true; } public boolean insertVariableAccess(String name, HashMap data) { HashMap var = this._vars.get(name); if (var == null) { var = new HashMap(); ArrayList assignments = new ArrayList(10); ArrayList uses = new ArrayList(10); uses.add(data.get("coord")); var.put(assignKey, assignments); var.put(useKey, uses); } else { ArrayList uses = (ArrayList)var.get(useKey); uses.add(data.get("coord")); var.put(useKey, uses); } this._vars.put(name, var); return true; } public boolean insertImportStatement(String name, HashMap data) { HashMap lib = this._imports.get(name); if (lib == null) { lib = new HashMap(); ArrayList assignments = new ArrayList(10); ArrayList uses = new ArrayList(10); uses.add(data.get("coord")); lib.put(assignKey, assignments); lib.put(useKey, uses); } else { ArrayList uses = (ArrayList)lib.get(useKey); uses.add(data.get("coord")); lib.put(useKey, uses); } this._imports.put(name, lib); return true; } public String toString() { StringBuilder builder = new StringBuilder(); builder.append("\"classes\":" + this._classes + ","); builder.append("\"interfaces\":" + this._interfaces + ","); builder.append("\"functions\":" + this._methods + ","); builder.append("\"vars\":" + this._vars + ","); builder.append("\"imports\":" + this._imports + ","); String s = builder.toString().replaceAll("=", ":"); s = s.substring(0, s.length() - 1); return "{" + s + "}"; } }