Search in sources :

Example 1 with MeghanadaProject

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);
    }
}
Also used : MavenProject(meghanada.project.maven.MavenProject) GradleProject(meghanada.project.gradle.GradleProject) Project(meghanada.project.Project) MeghanadaProject(meghanada.project.meghanada.MeghanadaProject) MavenProject(meghanada.project.maven.MavenProject) MeghanadaProject(meghanada.project.meghanada.MeghanadaProject) Config(meghanada.config.Config) Stopwatch(com.google.common.base.Stopwatch) GradleProject(meghanada.project.gradle.GradleProject) EntryMessage(org.apache.logging.log4j.message.EntryMessage) UncheckedIOException(java.io.UncheckedIOException) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException)

Aggregations

Stopwatch (com.google.common.base.Stopwatch)1 IOException (java.io.IOException)1 UncheckedIOException (java.io.UncheckedIOException)1 ExecutionException (java.util.concurrent.ExecutionException)1 Config (meghanada.config.Config)1 Project (meghanada.project.Project)1 GradleProject (meghanada.project.gradle.GradleProject)1 MavenProject (meghanada.project.maven.MavenProject)1 MeghanadaProject (meghanada.project.meghanada.MeghanadaProject)1 EntryMessage (org.apache.logging.log4j.message.EntryMessage)1