AidlLoader.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package antlr.aidl.tools;
  2. import java.util.*;
  3. import antlr.aidl.*;
  4. import tools.MapToJson;
  5. public class AidlLoader extends AidlBaseListener
  6. {
  7. String name;
  8. String type;
  9. ArrayList<String> imports = new ArrayList<>();
  10. ArrayList<Map<String, Object>> statements = new ArrayList<>();
  11. public String getName() {
  12. return name;
  13. }
  14. public String toJson() {
  15. Map<String, Object> map = new HashMap<>();
  16. map.put("name", name);
  17. map.put("type", type);
  18. map.put("imports", imports);
  19. map.put("statements", statements);
  20. MapToJson mapToJson = new MapToJson(map);
  21. return mapToJson.toJson();
  22. }
  23. @Override
  24. public void enterAidl(AidlParser.AidlContext ctx) {
  25. if (ctx.parcelableStatement() != null) {
  26. name = ctx.parcelableStatement().id().getText();
  27. type = "parcelable";
  28. } else {
  29. name = ctx.interfaceStatement().id().getText();
  30. type = "interface";
  31. for (AidlParser.ImportStatementContext i : ctx.importStatement()) {
  32. imports.add(i.path().getText());
  33. }
  34. }
  35. }
  36. @Override
  37. public void enterMethodStatement(AidlParser.MethodStatementContext ctx) {
  38. Map<String, Object> statement = new HashMap<>();
  39. statement.put("type", "method");
  40. statement.put("id", ctx.id().getText());
  41. statement.put("return", ctx.methodReturnType().getText());
  42. if (ctx.paramList() != null) {
  43. ArrayList<Map<String, Object>> params = new ArrayList<>();
  44. for (AidlParser.ParamContext i : ctx.paramList().param()) {
  45. Map<String, Object> param = new HashMap<>();
  46. if (i.paramTag() != null) {
  47. param.put("tag", i.paramTag().getText());
  48. }
  49. param.put("type", i.paramType().getText());
  50. param.put("tid", i.paramType().tid);
  51. param.put("id", i.id().getText());
  52. params.add(param);
  53. }
  54. statement.put("params", params);
  55. }
  56. statements.add(statement);
  57. }
  58. @Override
  59. public void enterConstStatement(AidlParser.ConstStatementContext ctx) {
  60. Map<String, Object> statement = new HashMap<>();
  61. statement.put("type", "const");
  62. statement.put("id", ctx.id().getText());
  63. if (ctx.INT() != null) {
  64. statement.put("value", Integer.getInteger(ctx.INTEGER().getText()));
  65. } else {
  66. String str = ctx.LITERALSTRING().getText();
  67. statement.put("value", str.substring(1, str.length()-1));
  68. }
  69. statements.add(statement);
  70. }
  71. }