package jetbrains.mps.ide.modelchecker.platform.actions; /*Generated by MPS */ import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.ApplicationComponent; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.Icon; import com.intellij.openapi.application.ApplicationManager; import java.util.List; import jetbrains.mps.project.Project; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import jetbrains.mps.checkers.TypesystemChecker; import jetbrains.mps.checkers.AbstractConstraintsCheckerRootCheckerAdapter; import jetbrains.mps.checkers.ConstraintsChecker; import jetbrains.mps.checkers.RefScopeChecker; import jetbrains.mps.checkers.TargetConceptChecker; import jetbrains.mps.checkers.UsedLanguagesChecker; import jetbrains.mps.checkers.StructureChecker; @State(name = "ModelCheckerSettings", storages = @Storage(value = "modelCheckerSettings.xml") ) public class ModelCheckerSettings implements PersistentStateComponent<ModelCheckerSettings.MyState>, ApplicationComponent { private ModelCheckerSettings.MyState myState = new ModelCheckerSettings.MyState(); public ModelCheckerSettings() { } @NonNls @NotNull @Override public String getComponentName() { return "Model Checker Settings"; } @Override public void initComponent() { } @Override public void disposeComponent() { } @Override public ModelCheckerSettings.MyState getState() { return myState; } @Override public void loadState(ModelCheckerSettings.MyState state) { myState = state; } @Nullable public Icon getIcon() { return null; } public static ModelCheckerSettings getInstance() { return ApplicationManager.getApplication().getComponent(ModelCheckerSettings.class); } public List<SpecificChecker> getSpecificCheckers(@NotNull Project mpsProject) { List<SpecificChecker> checkers = ListSequence.fromList(new ArrayList<SpecificChecker>()); switch (myState.myCheckingLevel) { case TYPESYSTEM: ListSequence.fromList(checkers).addElement(new RootCheckerSpecificCheckerAdapter(new TypesystemChecker(), "typesystem", mpsProject.getRepository())); case CONSTRAINTS: ListSequence.fromList(checkers).addElement(new RootCheckerSpecificCheckerAdapter(new AbstractConstraintsCheckerRootCheckerAdapter(AbstractConstraintsCheckerRootCheckerAdapter.SKIP_CONSTRAINTS_CONDITION, new ConstraintsChecker(), new RefScopeChecker(), new TargetConceptChecker()), "constraints", mpsProject.getRepository())); ListSequence.fromList(checkers).addElement(new RootCheckerSpecificCheckerAdapter(new AbstractConstraintsCheckerRootCheckerAdapter(new UsedLanguagesChecker()), "constraints", mpsProject.getRepository())); case STRUCTURE: ListSequence.fromList(checkers).addElement(new RootCheckerSpecificCheckerAdapter(new AbstractConstraintsCheckerRootCheckerAdapter(AbstractConstraintsCheckerRootCheckerAdapter.SUPRESS_ERRORS_CONDITION, new StructureChecker()), "structure", mpsProject.getRepository())); default: ListSequence.fromList(checkers).addElement(new ModelPropertiesChecker()); ListSequence.fromList(checkers).addElement(new UnresolvedReferencesChecker(mpsProject)); } if (isIncludeAdditionalChecks()) { ListSequence.fromList(checkers).addElement(new GeneratorTemplatesChecker()); } return checkers; } public ModelCheckerSettings.CheckingLevel getCheckingLevel() { return myState.myCheckingLevel; } public void setCheckingLevel(ModelCheckerSettings.CheckingLevel checkingLevel) { myState.myCheckingLevel = checkingLevel; } public boolean isIncludeAdditionalChecks() { return myState.myIncludeAdditionalChecks; } public void setIncludeAdditionalChecks(boolean checkSpecific) { myState.myIncludeAdditionalChecks = checkSpecific; } public boolean isCheckStubs() { return myState.myCheckStubs; } public void setCheckStubs(boolean checkStubs) { myState.myCheckStubs = checkStubs; } public boolean isCheckBeforeCommit() { return myState.myCheckBeforeCommit; } public void setCheckBeforeCommit(boolean checkBeforeCommit) { myState.myCheckBeforeCommit = checkBeforeCommit; } public static class MyState { public ModelCheckerSettings.CheckingLevel myCheckingLevel = ModelCheckerSettings.CheckingLevel.TYPESYSTEM; public boolean myIncludeAdditionalChecks = true; public boolean myCheckBeforeCommit = true; public boolean myCheckStubs = false; public MyState() { } } public enum CheckingLevel { BASIC("Basic", "Project structure is correct", "Each reference has target"), STRUCTURE("Structure", "Code conforms with languages' structure"), CONSTRAINTS("Constraints", "Code satisfies languages' constraints"), TYPESYSTEM("Typesystem", "Code passes typesystem checks"); private String myPresentation; private String[] myChecks; CheckingLevel(String presentation, String... checks) { myPresentation = presentation; myChecks = checks; } public String getPresentation() { return myPresentation; } public String getLongDescription() { StringBuilder sb = new StringBuilder("Checks that:\n"); for (int i = 0; i <= this.ordinal(); i++) { for (String s : ModelCheckerSettings.CheckingLevel.values()[i].myChecks) { sb.append("-").append(s).append("\n"); } } return sb.toString(); } } }