A semantic search engine for source code https://bitshift.benkurtovic.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

178 lines
6.3 KiB

  1. package com.bitshift.parsing.symbols;
  2. import java.util.HashMap;
  3. import java.util.ArrayList;
  4. import com.bitshift.parsing.symbols.Symbols;
  5. /*TODO: Overwrite toString.*/
  6. public class JavaSymbols extends Symbols {
  7. private String _packageName;
  8. private HashMap<String, HashMap<String, Object>> _classes;
  9. private HashMap<String, HashMap<String, Object>> _interfaces;
  10. private HashMap<String, HashMap<String, Object>> _methods;
  11. private HashMap<String, HashMap<String, Object>> _vars;
  12. private HashMap<String, HashMap<String, Object>> _imports;
  13. private final String assignKey = "\"assignments\"";
  14. private final String useKey = "\"uses\"";
  15. public JavaSymbols() {
  16. _packageName = null;
  17. _classes = new HashMap<String, HashMap<String, Object>>();
  18. _interfaces = new HashMap<String, HashMap<String, Object>>();
  19. _methods = new HashMap<String, HashMap<String, Object>>();
  20. _vars = new HashMap<String, HashMap<String, Object>>();
  21. _imports = new HashMap<String, HashMap<String, Object>>();
  22. }
  23. public boolean setPackage(String name) {
  24. _packageName = name;
  25. return true;
  26. }
  27. public boolean insertClassDeclaration(String name, HashMap<String, Object> data) {
  28. ArrayList<Object> assignments = new ArrayList<Object>(10);
  29. ArrayList<Object> uses = new ArrayList<Object>(10);
  30. HashMap<String, Object> klass = new HashMap<String, Object>();
  31. assignments.add(data.get("coord"));
  32. klass.put(assignKey, assignments);
  33. klass.put(useKey, uses);
  34. this._classes.put(name, klass);
  35. return true;
  36. }
  37. public boolean insertInterfaceDeclaration(String name, HashMap<String, Object> data) {
  38. ArrayList<Object> assignments = new ArrayList<Object>(10);
  39. ArrayList<Object> uses = new ArrayList<Object>(10);
  40. HashMap<String, Object> klass = new HashMap<String, Object>();
  41. assignments.add(data.get("coord"));
  42. klass.put(assignKey, assignments);
  43. klass.put(useKey, uses);
  44. this._interfaces.put(name, klass);
  45. return true;
  46. }
  47. public boolean insertMethodDeclaration(String name, HashMap<String, Object> data) {
  48. HashMap<String, Object> method = this._methods.get(name);
  49. if (method == null) {
  50. method = new HashMap<String, Object>();
  51. ArrayList<Object> assignments = new ArrayList<Object>(10);
  52. ArrayList<Object> uses = new ArrayList<Object>(10);
  53. assignments.add(data.get("coord"));
  54. method.put(assignKey, assignments);
  55. method.put(useKey, uses);
  56. } else {
  57. ArrayList<Object> assignments = (ArrayList<Object>)method.get(assignKey);
  58. assignments.add(data.get("coord"));
  59. method.put(assignKey, assignments);
  60. }
  61. this._methods.put(name, method);
  62. return true;
  63. }
  64. public boolean insertMethodInvocation(String name, HashMap<String, Object> data) {
  65. HashMap<String, Object> method = this._methods.get(name);
  66. if (method == null) {
  67. method = new HashMap<String, Object>();
  68. ArrayList<Object> assignments = new ArrayList<Object>(10);
  69. ArrayList<Object> uses = new ArrayList<Object>(10);
  70. uses.add(data.get("coord"));
  71. method.put(assignKey, assignments);
  72. method.put(useKey, uses);
  73. } else {
  74. ArrayList<Object> uses = (ArrayList<Object>)method.get(useKey);
  75. uses.add(data.get("coord"));
  76. method.put(useKey, uses);
  77. }
  78. this._methods.put(name, method);
  79. return true;
  80. }
  81. public boolean insertVariableDeclaration(String name, HashMap<String, Object> data) {
  82. HashMap<String, Object> var = this._vars.get(name);
  83. if (var == null) {
  84. var = new HashMap<String, Object>();
  85. ArrayList<Object> assignments = new ArrayList<Object>(10);
  86. ArrayList<Object> uses = new ArrayList<Object>(10);
  87. assignments.add(data.get("coord"));
  88. var.put(assignKey, assignments);
  89. var.put(useKey, uses);
  90. } else {
  91. ArrayList<Object> assignments = (ArrayList<Object>)var.get(assignKey);
  92. assignments.add(data.get("coord"));
  93. var.put(assignKey, assignments);
  94. }
  95. this._vars.put(name, var);
  96. return true;
  97. }
  98. public boolean insertVariableAccess(String name, HashMap<String, Object> data) {
  99. HashMap<String, Object> var = this._vars.get(name);
  100. if (var == null) {
  101. var = new HashMap<String, Object>();
  102. ArrayList<Object> assignments = new ArrayList<Object>(10);
  103. ArrayList<Object> uses = new ArrayList<Object>(10);
  104. uses.add(data.get("coord"));
  105. var.put(assignKey, assignments);
  106. var.put(useKey, uses);
  107. } else {
  108. ArrayList<Object> uses = (ArrayList<Object>)var.get(useKey);
  109. uses.add(data.get("coord"));
  110. var.put(useKey, uses);
  111. }
  112. this._vars.put(name, var);
  113. return true;
  114. }
  115. public boolean insertImportStatement(String name, HashMap<String, Object> data) {
  116. HashMap<String, Object> lib = this._imports.get(name);
  117. if (lib == null) {
  118. lib = new HashMap<String, Object>();
  119. ArrayList<Object> assignments = new ArrayList<Object>(10);
  120. ArrayList<Object> uses = new ArrayList<Object>(10);
  121. uses.add(data.get("coord"));
  122. lib.put(assignKey, assignments);
  123. lib.put(useKey, uses);
  124. } else {
  125. ArrayList<Object> uses = (ArrayList<Object>)lib.get(useKey);
  126. uses.add(data.get("coord"));
  127. lib.put(useKey, uses);
  128. }
  129. this._imports.put(name, lib);
  130. return true;
  131. }
  132. public String toString() {
  133. StringBuilder builder = new StringBuilder();
  134. builder.append("\"classes\":" + this._classes + ",");
  135. builder.append("\"interfaces\":" + this._interfaces + ",");
  136. builder.append("\"functions\":" + this._methods + ",");
  137. builder.append("\"vars\":" + this._vars + ",");
  138. builder.append("\"imports\":" + this._imports + ",");
  139. String s = builder.toString().replaceAll("=", ":");
  140. s = s.substring(0, s.length() - 1);
  141. return "{" + s + "}";
  142. }
  143. }