/* * Copyright 2003-2017 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.generator; import jetbrains.mps.util.annotation.ToRemove; import org.jetbrains.annotations.NotNull; /** * fyodor, 4/11/11 */ public interface IGenerationSettings { boolean isParallelGenerator(); boolean isStrictMode(); int getNumberOfParallelThreads(); int getPerformanceTracingLevel(); int getNumberOfModelsToKeep(); boolean isShowInfo(); boolean isShowWarnings(); boolean isKeepModelsWithWarnings(); boolean isIncremental(); boolean isIncrementalUseCache(); // FIXME this is TextGen option, has nothing to do with generation @Deprecated @ToRemove(version = 2017.2) boolean isFailOnMissingTextGen(); // FIXME this is TextGen option, has nothing to do with generation boolean isGenerateDebugInfo(); boolean isShowBadChildWarning(); boolean isDebugIncrementalDependencies(); boolean isSaveTransientModels(); boolean useInplaceTransformations(); /** * For references we've got resolve info only, we can create either a dynamic reference and let it get resolved by name through scope, or we can resolve * it right away (or on the first read) and keep it static. * It looks that use of dynamic references by default wasn't sensible decision at the first place, as resolution of dynamic reference * requires scope each time reference is accessed. It didn't induce any issue unless we got thousands of DynamicReferences, and their resolution * became nightmare. However, it's not obvious we do need dynamic references in the first place, for any node we refer to by name. */ boolean createStaticReferences(); /** * Presentation options of the new generation tracer. At the moment, they affect the way trace is represented, not collected, and as such * might not fit IGenerationSettings, but (a) trace functionality is inherently generator-related; (b) I don't want to introduce another location for settings */ @NotNull GenTraceSettings getTraceSettings(); /** * <tt>group by steps</tt> - changes within individual generation phases are grouped under 'step' nodes * <tt>show empty steps</tt> - when generation phases are grouped under step nodes, decides whether to show empty ones. * <tt>compact templates</tt> - whether to show only template node closest to the output node. * <tt>group by change</tt> - individual changes grouped by either pair (input, output) or just input (forward trace) or output (for backward trace) node. */ public static class GenTraceSettings { private boolean myGroupSteps = true; private boolean myCompactTemplates = false; private boolean myShowEmptySteps = false; private boolean myGroupByChange = true; public boolean isGroupByStep() { return myGroupSteps; } public void setGroupByStep(boolean groupSteps) { myGroupSteps = groupSteps; } public boolean isCompactTemplates() { return myCompactTemplates; } public void setCompactTemplates(boolean compactTemplates) { myCompactTemplates = compactTemplates; } public boolean isShowEmptySteps() { return myShowEmptySteps; } public void setShowEmptySteps(boolean showEmptySteps) { myShowEmptySteps = showEmptySteps; } public boolean isGroupByChange() { return myGroupByChange; } public void setGroupByChange(boolean groupByChange) { myGroupByChange = groupByChange; } } }