/* * Copyright 2003-2011 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 org.jetbrains.annotations.NotNull; import org.jetbrains.mps.annotations.Immutable; import org.jetbrains.mps.openapi.module.SModule; import java.io.Serializable; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * @author Evgeny Gryaznov, Aug 20, 2010 * * AP: where do we need the serialization? */ @Immutable public final class MPSCompilationResult implements Serializable, CompilationResult { private static final long serialVersionUID = -4445402451448540384L; private final static String COMPILATION_FINISHED = "Compilation finished: %d errors, %d warnings."; private final static String COMPILATION_ABORTED = "Compilation aborted."; public final static MPSCompilationResult ZERO_COMPILATION_RESULT = new MPSCompilationResult(0, 0, false, Collections.<SModule>emptySet()); private int myErrorsCount; private int myWarningsCount; private boolean myAborted; private Set<SModule> myChangedModules; public MPSCompilationResult(int errorsCount, int warningsCount, boolean aborted, Collection<? extends SModule> changedModules) { myErrorsCount = errorsCount; myWarningsCount = warningsCount; myAborted = aborted; myChangedModules = new HashSet<SModule>(changedModules); } @NotNull static MPSCompilationResult nothingToDoCompilationResult() { return ZERO_COMPILATION_RESULT; } @NotNull static MPSCompilationResult noJavaCompiledCompilationResult() { return ZERO_COMPILATION_RESULT; } @Override public int getErrorsCount() { return myErrorsCount; } @Override public int getWarningsCount() { return myWarningsCount; } @Override public boolean isAborted() { return myAborted; } @Override public boolean isCompiledAnything() { return !myChangedModules.isEmpty(); } @Override public boolean isOk() { return !isAborted() && getErrorsCount() == 0; } @Override public boolean isReloadingNeeded() { return isOk() && isCompiledAnything(); } @Override @NotNull public Set<SModule> getChangedModules() { return Collections.unmodifiableSet(myChangedModules); } @Override public String toString() { if (!isAborted()) { return String.format(COMPILATION_FINISHED, getErrorsCount(), getWarningsCount()); } else { return COMPILATION_ABORTED; } } }