/* * Copyright 2003-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.make; import jetbrains.mps.project.SModuleOperations; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.module.SModule; import java.util.HashMap; import java.util.Map; import java.util.Set; import static jetbrains.mps.project.SModuleOperations.isCompileInMps; /** * sources saving and other utility methods are here */ final class ModulesContainer { private final Set<SModule> myModules; private final Dependencies myDependencies; private final Map<SModule, ModuleSources> myModuleSources = new HashMap<>(); private final Map<String, SModule> myClassName2ModuleMap = new HashMap<>(); public ModulesContainer(Set<SModule> modules, Dependencies dependencies) { myModules = modules; myDependencies = dependencies; } public ModuleSources getSources(@NotNull SModule module) { ModuleSources moduleSources = myModuleSources.get(module); if (moduleSources == null) { moduleSources = new ModuleSources(module, myModuleSources, myDependencies); myModuleSources.put(module, moduleSources); } return moduleSources; } public boolean hasModuleToCompile() { return myModules.stream().anyMatch(module -> !isExcluded(module)); } public boolean isDirty(@NotNull SModule m) { if (isExcluded(m)) return false; if (areClassesUpToDate(m)) return false; return true; } public boolean areClassesUpToDate(@NotNull SModule m) { if (isExcluded(m)) return true; if (!isCompileInMps(m)) return true; return getSources(m).isUpToDate(); } public Set<SModule> getModules() { return myModules; } void putClassForModule(@NotNull String className, @NotNull SModule module) { myClassName2ModuleMap.put(className, module); } SModule getModuleContainingClass(@NotNull String containerClassName) { return myClassName2ModuleMap.get(containerClassName); } public static boolean isExcluded(@NotNull SModule m) { return m.isReadOnly() || !isCompileInMps(m); } }