/* * 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.ide.generator; import com.intellij.openapi.components.ApplicationComponent; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; import jetbrains.mps.generator.DefaultModifiableGenerationSettings; import jetbrains.mps.generator.GenerationSettingsProvider; import jetbrains.mps.generator.IGenerationSettings.GenTraceSettings; import jetbrains.mps.generator.IModifiableGenerationSettings; import jetbrains.mps.ide.generator.GenerationSettings.MyState; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.Icon; @State( name = "GenerationSettings", storages = @Storage("generationSettings.xml") ) public class GenerationSettings implements PersistentStateComponent<MyState>, ApplicationComponent { private final DefaultModifiableGenerationSettings myState = new DefaultModifiableGenerationSettings(); @Override @NotNull public String getComponentName() { return "Generation Settings"; } @Override public void initComponent() { GenerationSettingsProvider.getInstance().setGenerationSettings(getModifiableSettings()); } @Override public void disposeComponent() { if (getModifiableSettings() == GenerationSettingsProvider.getInstance().getGenerationSettings()) { GenerationSettingsProvider.getInstance().setGenerationSettings(null); } } @Override public MyState getState() { MyState persistentState = new MyState(); persistentState.fromSettings(myState); return persistentState; } @Override public void loadState(MyState state) { myState.setSaveTransientModels(state.mySaveTransientModels); myState.setCheckModelsBeforeGeneration(state.myCheckModelsBeforeGeneration); myState.setParallelGenerator(state.myParallelGenerator); myState.setStrictMode(state.myStrictMode); myState.setNumberOfParallelThreads(state.myNumberOfParallelThreads); myState.setPerformanceTracingLevel(state.myPerformanceTracingLevel); myState.setNumberOfModelsToKeep(state.myNumberOfModelsToKeep); myState.setShowInfo(state.myShowInfo); myState.setShowWarnings(state.myShowWarnings); myState.setKeepModelsWithWarnings(state.myKeepModelsWithWarnings); myState.setIncremental(state.myIncremental); myState.setIncrementalUseCache(state.myIncrementalUseCache); myState.setGenerateDebugInfo(state.myGenerateDebugInfo); myState.setShowBadChildWarning(state.myShowBadChildWarning); myState.setDebugIncrementalDependencies(state.myDebugIncrementalDependencies); myState.enableInplaceTransformations(state.myActiveInplaceTransform); myState.setCreateStaticReferences(state.myUseStaticRefs); GenTraceSettings gts = new GenTraceSettings(); gts.setCompactTemplates(state.myTraceCompactTemplates); gts.setGroupByStep(state.myTraceGroupSteps); gts.setShowEmptySteps(state.myTraceShowEmptySteps); gts.setGroupByChange(state.myTraceGroupByChange); myState.setTraceSettings(gts); } @Nullable public Icon getIcon() { return null; } public IModifiableGenerationSettings getModifiableSettings() { return myState; } public static class MyState { public boolean mySaveTransientModels; public boolean myCheckModelsBeforeGeneration; public boolean myParallelGenerator; public boolean myStrictMode; public int myNumberOfParallelThreads; public int myPerformanceTracingLevel; public int myNumberOfModelsToKeep; public boolean myShowInfo; public boolean myShowWarnings; public boolean myKeepModelsWithWarnings; public boolean myIncremental; public boolean myIncrementalUseCache; public boolean myGenerateDebugInfo; public boolean myShowBadChildWarning; public boolean myDebugIncrementalDependencies; public boolean myActiveInplaceTransform; public boolean myUseStaticRefs; public boolean myTraceGroupSteps; public boolean myTraceCompactTemplates; public boolean myTraceShowEmptySteps; public boolean myTraceGroupByChange; public MyState() { // use defaults from a single place. PersistentStateComponent demands no-arg cons with default values set (case: no xml file yet) fromSettings(new DefaultModifiableGenerationSettings()); } // IModifiableGenerationSettings, not IGenerationSettins as #isCheckModelsBeforeGeneration and #isGenerateDebugInfo are located improperly /*package*/ void fromSettings(IModifiableGenerationSettings s) { mySaveTransientModels = s.isSaveTransientModels(); myCheckModelsBeforeGeneration = s.isCheckModelsBeforeGeneration(); myParallelGenerator = s.isParallelGenerator(); myStrictMode = s.isStrictMode(); myNumberOfParallelThreads = s.getNumberOfParallelThreads(); myPerformanceTracingLevel = s.getPerformanceTracingLevel(); myNumberOfModelsToKeep = s.getNumberOfModelsToKeep(); myShowInfo = s.isShowInfo(); myShowWarnings = s.isShowWarnings(); myKeepModelsWithWarnings = s.isKeepModelsWithWarnings(); myIncremental = s.isIncremental(); myIncrementalUseCache = s.isIncrementalUseCache(); myGenerateDebugInfo = s.isGenerateDebugInfo(); myShowBadChildWarning = s.isShowBadChildWarning(); myDebugIncrementalDependencies = s.isDebugIncrementalDependencies(); myActiveInplaceTransform = s.useInplaceTransformations(); myUseStaticRefs = s.createStaticReferences(); GenTraceSettings gts = s.getTraceSettings(); myTraceCompactTemplates = gts.isCompactTemplates(); myTraceGroupSteps = gts.isGroupByStep(); myTraceShowEmptySteps = gts.isShowEmptySteps(); myTraceGroupByChange = gts.isGroupByChange(); } } }