A semantic search engine for source code https://bitshift.benkurtovic.com/
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

153 linhas
5.4 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 final String assignKey = "\"assignments\"";
  13. private final String useKey = "\"uses\"";
  14. public JavaSymbols() {
  15. _packageName = null;
  16. _classes = new HashMap<String, HashMap<String, Object>>();
  17. _interfaces = new HashMap<String, HashMap<String, Object>>();
  18. _methods = new HashMap<String, HashMap<String, Object>>();
  19. _vars = new HashMap<String, HashMap<String, Object>>();
  20. }
  21. public boolean setPackage(String name) {
  22. _packageName = name;
  23. return true;
  24. }
  25. public boolean insertClassDeclaration(String name, HashMap<String, Object> data) {
  26. ArrayList<Object> assignments = new ArrayList<Object>(10);
  27. ArrayList<Object> uses = new ArrayList<Object>(10);
  28. HashMap<String, Object> klass = new HashMap<String, Object>();
  29. assignments.add(data.get("coord"));
  30. klass.put(assignKey, assignments);
  31. klass.put(useKey, uses);
  32. this._classes.put(name, klass);
  33. return true;
  34. }
  35. public boolean insertInterfaceDeclaration(String name, HashMap<String, Object> data) {
  36. ArrayList<Object> assignments = new ArrayList<Object>(10);
  37. ArrayList<Object> uses = new ArrayList<Object>(10);
  38. HashMap<String, Object> klass = new HashMap<String, Object>();
  39. assignments.add(data.get("coord"));
  40. klass.put(assignKey, assignments);
  41. klass.put(useKey, uses);
  42. this._interfaces.put(name, klass);
  43. return true;
  44. }
  45. public boolean insertMethodDeclaration(String name, HashMap<String, Object> data) {
  46. HashMap<String, Object> method = this._methods.get(name);
  47. if (method == null) {
  48. method = new HashMap<String, Object>();
  49. ArrayList<Object> assignments = new ArrayList<Object>(10);
  50. ArrayList<Object> uses = new ArrayList<Object>(10);
  51. assignments.add(data.get("coord"));
  52. method.put(assignKey, assignments);
  53. method.put(useKey, uses);
  54. } else {
  55. ArrayList<Object> assignments = (ArrayList<Object>)method.get(assignKey);
  56. assignments.add(data.get("coord"));
  57. method.put(assignKey, assignments);
  58. }
  59. this._methods.put(name, method);
  60. return true;
  61. }
  62. public boolean insertMethodInvocation(String name, HashMap<String, Object> data) {
  63. HashMap<String, Object> method = this._methods.get(name);
  64. if (method == null) {
  65. method = new HashMap<String, Object>();
  66. ArrayList<Object> assignments = new ArrayList<Object>(10);
  67. ArrayList<Object> uses = new ArrayList<Object>(10);
  68. uses.add(data.get("coord"));
  69. method.put(assignKey, assignments);
  70. method.put(useKey, uses);
  71. } else {
  72. ArrayList<Object> uses = (ArrayList<Object>)method.get(useKey);
  73. uses.add(data.get("coord"));
  74. method.put(useKey, uses);
  75. }
  76. this._methods.put(name, method);
  77. return true;
  78. }
  79. public boolean insertVariableDeclaration(String name, HashMap<String, Object> data) {
  80. HashMap<String, Object> var = this._vars.get(name);
  81. if (var == null) {
  82. var = new HashMap<String, Object>();
  83. ArrayList<Object> assignments = new ArrayList<Object>(10);
  84. ArrayList<Object> uses = new ArrayList<Object>(10);
  85. assignments.add(data.get("coord"));
  86. var.put(assignKey, assignments);
  87. var.put(useKey, uses);
  88. } else {
  89. ArrayList<Object> assignments = (ArrayList<Object>)var.get(assignKey);
  90. assignments.add(data.get("coord"));
  91. var.put(assignKey, assignments);
  92. }
  93. this._vars.put(name, var);
  94. return true;
  95. }
  96. public boolean insertVariableAccess(String name, HashMap<String, Object> data) {
  97. HashMap<String, Object> var = this._vars.get(name);
  98. if (var == null) {
  99. var = new HashMap<String, Object>();
  100. ArrayList<Object> assignments = new ArrayList<Object>(10);
  101. ArrayList<Object> uses = new ArrayList<Object>(10);
  102. uses.add(data.get("coord"));
  103. var.put(assignKey, assignments);
  104. var.put(useKey, uses);
  105. } else {
  106. ArrayList<Object> uses = (ArrayList<Object>)var.get(useKey);
  107. uses.add(data.get("coord"));
  108. var.put(useKey, uses);
  109. }
  110. this._vars.put(name, var);
  111. return true;
  112. }
  113. public String toString() {
  114. StringBuilder builder = new StringBuilder();
  115. builder.append("\"classes\":" + this._classes + ",");
  116. builder.append("\"interfaces\":" + this._interfaces + ",");
  117. builder.append("\"functions\":" + this._methods + ",");
  118. builder.append("\"vars\":" + this._vars + ",");
  119. String s = builder.toString().replaceAll("=", ":");
  120. s = s.substring(0, s.length() - 1);
  121. return "{" + s + "}";
  122. }
  123. }