68d6ce473e43ebdeb7b630ef3bedc0368fcb51b8
[idea/community.git] / jps / jps-builders / src / org / jetbrains / jps / cmdline / JpsModelLoaderImpl.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package org.jetbrains.jps.cmdline;
3
4 import com.intellij.openapi.diagnostic.Logger;
5 import com.intellij.util.ParameterizedRunnable;
6 import org.jetbrains.annotations.Nullable;
7 import org.jetbrains.jps.model.JpsModel;
8 import org.jetbrains.jps.model.serialization.JpsSerializationManager;
9
10 import java.io.IOException;
11 import java.util.concurrent.TimeUnit;
12
13 public class JpsModelLoaderImpl implements JpsModelLoader {
14   private static final Logger LOG = Logger.getInstance(JpsModelLoaderImpl.class);
15   private final String myProjectPath;
16   private final String myGlobalOptionsPath;
17   private final boolean myLoadUnloadedModules;
18   private final ParameterizedRunnable<? super JpsModel> myModelInitializer;
19
20   public JpsModelLoaderImpl(String projectPath,
21                             String globalOptionsPath,
22                             boolean loadUnloadedModules,
23                             @Nullable ParameterizedRunnable<? super JpsModel> initializer) {
24     myProjectPath = projectPath;
25     myGlobalOptionsPath = globalOptionsPath;
26     myLoadUnloadedModules = loadUnloadedModules;
27     myModelInitializer = initializer;
28   }
29
30   @Override
31   public JpsModel loadModel() throws IOException {
32     final long start = System.nanoTime();
33     LOG.info("Loading model: project path = " + myProjectPath + ", global options path = " + myGlobalOptionsPath);
34     final JpsModel model = JpsSerializationManager.getInstance().loadModel(myProjectPath, myGlobalOptionsPath, myLoadUnloadedModules);
35     if (myModelInitializer != null) {
36       myModelInitializer.run(model);
37     }
38     final long loadTime = System.nanoTime() - start;
39     LOG.info("Model loaded in " + TimeUnit.NANOSECONDS.toMillis(loadTime) + " ms");
40     LOG.info("Project has " + model.getProject().getModules().size() + " modules, " + model.getProject().getLibraryCollection().getLibraries().size() + " libraries");
41     return model;
42   }
43 }