field.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from pydoc import classname
  2. import java_file
  3. from java_file import JavaFile
  4. from java_file import Line
  5. import java_modifiers
  6. import java_literals
  7. import smali_literals
  8. class FieldParser:
  9. def __init__(self) -> None:
  10. self.accessor = ''
  11. self.static = False
  12. self.synthetic = False
  13. self.final = False
  14. self.volatile = False
  15. self.transient = False
  16. def parse(self, file :JavaFile, current_line :Line) -> None:
  17. member_and_class_index = 1
  18. member_and_class :list[str] = []
  19. # Read the accessor (public/private/protected) if present
  20. if java_modifiers.modifiers.get(current_line[member_and_class_index]):
  21. self.accessor = current_line[member_and_class_index]
  22. member_and_class_index += 1
  23. if member_and_class_index >= len(current_line):
  24. print(current_line)
  25. if current_line[member_and_class_index] == java_literals.static:
  26. self.static = True
  27. member_and_class_index += 1
  28. if current_line[member_and_class_index] == smali_literals.final:
  29. self.final = True
  30. member_and_class_index += 1
  31. if current_line[member_and_class_index] == smali_literals.volatile:
  32. self.volatile = True
  33. member_and_class_index += 1
  34. # For java enum fields is just another class
  35. if current_line[member_and_class_index] == smali_literals.enum:
  36. member_and_class_index += 1
  37. if current_line[member_and_class_index] == smali_literals.synthetic:
  38. self.synthetic = True
  39. member_and_class_index += 1
  40. if current_line[member_and_class_index] == smali_literals.transient:
  41. self.transient = True
  42. member_and_class_index += 1
  43. member_and_class = current_line[member_and_class_index].split(':')
  44. if len(member_and_class) < 2: print(current_line)
  45. class_name = java_file.get_class_name(member_and_class[1])
  46. member_name = member_and_class[0]
  47. line :list[str] = []
  48. if self.accessor != '': line.append(self.accessor)
  49. if self.static: line.append(java_literals.static)
  50. if self.final: line.append(java_modifiers.final)
  51. if self.volatile: line.append(java_modifiers.volatile)
  52. if self.transient: line.append(java_modifiers.transient)
  53. line.append(class_name)
  54. line.append(member_name)
  55. line.append(';')
  56. if self.synthetic: line.append('//synthetic')
  57. file.add_line(line)