// Saves fields and methods in database private void processClassOrInterface( ClassOrInterfaceDeclaration type, int fileId, SoftwareUnitDB typeUnit) { if (type.getFields() != null) { for (FieldDeclaration field : type.getFields()) { String fieldUid = generateUid( repositoryDb.getPath(), typeUnit.getName(), type.getName() + "." + field.getName()); SoftwareUnitDB fieldUnit = getSofwareUnitDB( fieldUid, field.getName(), SoftwareUnitType.FIELD, fileId, repositoryDb, typeUnit); field.setId(fieldUnit.getId()); } } if (type.getMethods() != null) { for (MethodDeclaration method : type.getMethods()) { String methodUid = generateUid( repositoryDb.getPath(), typeUnit.getName(), type.getName() + "." + method.getName()); SoftwareUnitDB methodUnit = getSofwareUnitDB( methodUid, method.getName(), SoftwareUnitType.METHOD, fileId, repositoryDb, typeUnit); method.setId(methodUnit.getId()); } } }
/** * @param filePath * @param fileId * @param ast Saves the software units found in the given AST in database. */ public void save(String filePath, int fileId, AST ast) { SoftwareUnitDB parent = null; ast.setProject(project); if (ast.getDocument().getPackageDeclaration() != null) { PackageDeclaration pkgDecl = ast.getDocument().getPackageDeclaration(); String uid = generateUid(repositoryDb.getPath(), null, pkgDecl.getName()); SoftwareUnitDB pkgUnit = getSofwareUnitDB( uid, pkgDecl.getName(), SoftwareUnitType.PACKAGE, 0, repositoryDb, projectUnit); pkgDecl.setId(pkgUnit.getId()); parent = pkgUnit; } else { parent = projectUnit; } String docUid = generateUid(repositoryDb.getPath(), parent.getName(), filePath); SoftwareUnitDB docUnit = getSofwareUnitDB( docUid, ast.getDocument().getName(), SoftwareUnitType.FILE, fileId, repositoryDb, parent); ast.getDocument().setId(docUnit.getId()); if (ast.getDocument().getTypes() != null) { for (TypeDeclaration type : ast.getDocument().getTypes()) { String typeUid = generateUid(repositoryDb.getPath(), filePath, type.getName()); SoftwareUnitDB typeUnit = getSofwareUnitDB(typeUid, type.getName(), type.getType(), 0, repositoryDb, docUnit); type.setId(typeUnit.getId()); if (type.getType() == SoftwareUnitType.CLASS_OR_INTERFACE) { processClassOrInterface((ClassOrInterfaceDeclaration) type, fileId, typeUnit); } else if (type.getType() == SoftwareUnitType.ENUM) { processEnum((EnumDeclaration) type, typeUnit, fileId); } } } }
public SaveAST(RepositoryDB repositoryDb, EntityManager entityManager) { uidMap = new HashMap<String, Integer>(); softUnitDao = new SoftwareUnitDAOImpl(); softUnitDao.setEntityManager(entityManager); this.repositoryDb = repositoryDb; projectUnit = softUnitDao.findByUid(repositoryDb.getUid()); project = new Project(); project.setId(projectUnit.getId()); project.setName(projectUnit.getName()); }
// Saves enum constants in database private void processEnum(EnumDeclaration type, SoftwareUnitDB enumUnit, int fileId) { if (type.getEnumConsts() != null) { for (EnumConstantDeclaration constDecl : type.getEnumConsts()) { String constUid = generateUid(repositoryDb.getPath(), enumUnit.getName(), constDecl.getName()); SoftwareUnitDB constUnit = getSofwareUnitDB( constUid, constDecl.getName(), SoftwareUnitType.ENUM_CONST, fileId, repositoryDb, enumUnit); constDecl.setId(constUnit.getId()); } } }