You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

InMemoryEntityRepo.java 3.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package depends.entity.repo;
  2. import depends.entity.Entity;
  3. import depends.entity.FileEntity;
  4. import depends.entity.GenericName;
  5. import depends.entity.MultiDeclareEntities;
  6. import multilang.depends.util.file.FileUtil;
  7. import java.util.*;
  8. import java.util.Map.Entry;
  9. public class InMemoryEntityRepo extends SimpleIdGenerator implements EntityRepo {
  10. public class EntityMapIterator implements Iterator<Entity>{
  11. private Iterator<Entry<Integer, Entity>> entryIterator;
  12. public EntityMapIterator(Set<Entry<Integer, Entity>> entries) {
  13. this.entryIterator = entries.iterator();
  14. }
  15. @Override
  16. public boolean hasNext() {
  17. return entryIterator.hasNext();
  18. }
  19. @Override
  20. public Entity next() {
  21. return entryIterator.next().getValue();
  22. }
  23. }
  24. private Map<String, Entity> allEntieisByName;
  25. private Map<Integer, Entity> allEntitiesById;
  26. private List<Entity> allFileEntitiesByOrder;
  27. public InMemoryEntityRepo() {
  28. allEntieisByName = new TreeMap<>();
  29. allEntitiesById = new TreeMap<>();
  30. allFileEntitiesByOrder = new LinkedList<>();
  31. }
  32. @Override
  33. public Entity getEntity(String entityName) {
  34. return allEntieisByName.get(entityName);
  35. }
  36. @Override
  37. public Entity getEntity(Integer entityId) {
  38. return allEntitiesById.get(entityId);
  39. }
  40. @Override
  41. public void add(Entity entity) {
  42. allEntitiesById.put(entity.getId(), entity);
  43. String name = entity.getRawName().uniqName();
  44. if (entity.getQualifiedName() != null && !(entity.getQualifiedName().isEmpty())) {
  45. name = entity.getQualifiedName();
  46. }
  47. if (allEntieisByName.containsKey(name)) {
  48. Entity existedEntity = allEntieisByName.get(name);
  49. if (existedEntity instanceof MultiDeclareEntities) {
  50. ((MultiDeclareEntities) existedEntity).add(entity);
  51. } else {
  52. MultiDeclareEntities eMultiDeclare = new MultiDeclareEntities(existedEntity, this.generateId());
  53. eMultiDeclare.add(entity);
  54. allEntieisByName.put(name, eMultiDeclare);
  55. }
  56. } else {
  57. allEntieisByName.put(name, entity);
  58. }
  59. if (entity.getParent() != null)
  60. Entity.setParent(entity, entity.getParent());
  61. }
  62. @Override
  63. public Iterator<Entity> entityIterator() {
  64. return new EntityMapIterator(allEntitiesById.entrySet());
  65. }
  66. @Override
  67. public void update(Entity entity) {
  68. }
  69. @Override
  70. public Entity getEntity(GenericName rawName) {
  71. return this.getEntity(rawName.uniqName());
  72. }
  73. @Override
  74. public Collection<Entity> getFileEntities() {
  75. return allFileEntitiesByOrder;
  76. }
  77. @Override
  78. public Iterator<Entity> sortedFileIterator() {
  79. return allFileEntitiesByOrder.iterator();
  80. }
  81. @Override
  82. public void clear() {
  83. allEntieisByName.clear();
  84. allEntitiesById.clear();
  85. allFileEntitiesByOrder.clear();
  86. }
  87. @Override
  88. public FileEntity getFileEntity(String fileFullPath) {
  89. fileFullPath = FileUtil.uniqFilePath(fileFullPath);
  90. Entity entity = this.getEntity(fileFullPath);
  91. if (entity ==null) return null;
  92. if (entity instanceof FileEntity) return (FileEntity) entity;
  93. if (entity instanceof MultiDeclareEntities){
  94. MultiDeclareEntities multiDeclare = (MultiDeclareEntities) entity;
  95. for (Entity theEntity: multiDeclare.getEntities()){
  96. if (theEntity instanceof FileEntity){
  97. return (FileEntity) theEntity;
  98. }
  99. }
  100. }
  101. return null;
  102. }
  103. @Override
  104. public void completeFile(String fileFullPath) {
  105. FileEntity fileEntity = getFileEntity(fileFullPath);
  106. // in case of parse error(throw exception), the file entity may not exists
  107. if (fileEntity!=null) {
  108. fileEntity.cacheAllExpressions();
  109. allFileEntitiesByOrder.add(fileEntity);
  110. }
  111. }
  112. }

人工智能研发终端

Contributors (2)