package com.jscs.settings; import com.jscs.cli.JscsFinder; import com.intellij.openapi.components.*; import com.intellij.openapi.project.Project; import com.intellij.util.xmlb.XmlSerializerUtil; import com.jscs.cli.JscsSettings; import com.wix.utils.Strings; import org.jetbrains.annotations.Nullable; @State(name = "JscsProjectComponent", storages = { @Storage(id = "default", file = StoragePathMacros.PROJECT_FILE), @Storage(id = "dir", file = StoragePathMacros.PROJECT_CONFIG_DIR + "/jscsPlugin.xml", scheme = StorageScheme.DIRECTORY_BASED)}) public class Settings implements PersistentStateComponent<Settings> { public String jscsrcFile = JscsFinder.JSCSRC; public String preset = ""; public String jscsExecutable = ""; public String nodeInterpreter; public boolean treatAllIssuesAsWarnings; public boolean pluginEnabled; public boolean esnext; public String esprima; public boolean isEqualTo(Settings settings) { return settings != null && esnext == settings.esnext && pluginEnabled == settings.pluginEnabled && treatAllIssuesAsWarnings == settings.treatAllIssuesAsWarnings && Strings.areEqual(jscsExecutable, settings.jscsExecutable) && Strings.areEqual(esprima, settings.esprima) && Strings.areEqual(jscsrcFile, settings.jscsrcFile) && Strings.areEqual(nodeInterpreter, settings.nodeInterpreter) && Strings.areEqual(preset, settings.preset); } public JscsSettings toJscsSettings() { JscsSettings settings = new JscsSettings(); settings.node = nodeInterpreter; settings.jscsExecutablePath = jscsExecutable; settings.preset = preset; settings.config = jscsrcFile; settings.esnext = esnext; settings.esprima = esprima; return settings; } protected Project project; public static Settings getInstance(Project project) { Settings settings = ServiceManager.getService(project, Settings.class); settings.project = project; return settings; } @Nullable @Override public Settings getState() { return this; } @Override public void loadState(Settings state) { XmlSerializerUtil.copyBean(state, this); } public String getVersion() { return nodeInterpreter + jscsExecutable + jscsrcFile + preset + esnext + esprima; } }