use of meghanada.project.meghanada.MeghanadaProject in project meghanada-server by mopemope.
the class Session method loadProject.
private static Optional<Project> loadProject(final File projectRoot, final String targetFile) throws IOException {
final EntryMessage entryMessage = log.traceEntry("projectRoot={} targetFile={}", projectRoot, targetFile);
final String projectRootPath = projectRoot.getCanonicalPath();
Config.setProjectRoot(projectRootPath);
try {
final Config config = Config.load();
final String id = FileUtils.findProjectID(projectRoot, targetFile);
if (Project.loadedProject.containsKey(id)) {
// loaded skip
final Project project = Project.loadedProject.get(id);
log.traceExit(entryMessage);
Config.setProjectRoot(projectRootPath);
return Optional.of(project);
}
log.trace("project projectID={} projectRoot={}", id, projectRoot);
if (config.useFastBoot()) {
try {
final Project tempProject = Project.loadProject(projectRootPath);
if (nonNull(tempProject) && tempProject.getId().equals(id)) {
tempProject.setId(id);
log.debug("load from cache project={}", tempProject);
log.info("load project from cache. projectRoot:{}", tempProject.getProjectRoot());
log.traceExit(entryMessage);
return Optional.of(tempProject.mergeFromProjectConfig());
}
} catch (Exception ex) {
log.catching(ex);
}
}
Project project;
switch(targetFile) {
case Project.GRADLE_PROJECT_FILE:
project = new GradleProject(projectRoot);
break;
case Project.MVN_PROJECT_FILE:
project = new MavenProject(projectRoot);
break;
default:
project = new MeghanadaProject(projectRoot);
break;
}
project.setId(id);
final Stopwatch stopwatch = Stopwatch.createStarted();
final Project parsed = project.parseProject();
if (config.useFastBoot()) {
parsed.saveProject();
}
log.info("loaded project:{} elapsed:{}", project.getProjectRoot(), stopwatch.stop());
log.traceExit(entryMessage);
return Optional.of(parsed.mergeFromProjectConfig());
} finally {
Config.setProjectRoot(projectRootPath);
}
}
Aggregations