Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.intellij.csharpier;

import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.project.Project;
import com.intellij.util.xmlb.XmlSerializerUtil;
import org.jetbrains.annotations.NotNull;

@State(
name = "com.intellij.csharpier.global",
storages = @Storage(file = "$APP_CONFIG$/CSharpierPlugin.xml")
)
public class CSharpierGlobalSettings implements PersistentStateComponent<CSharpierGlobalSettings> {

@NotNull
static CSharpierGlobalSettings getInstance(@NotNull Project project) {
return project.getService(CSharpierGlobalSettings.class);
}

private boolean runOnSave;

public boolean getRunOnSave() {
return this.runOnSave;
}

public void setRunOnSave(boolean value) {
this.runOnSave = value;
}

@Override
public CSharpierGlobalSettings getState() {
return this;
}

@Override
public void loadState(@NotNull CSharpierGlobalSettings state) {
XmlSerializerUtil.copyBean(state, this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,17 @@ public void setRunOnSave(boolean value) {
this.runOnSave = value;
}

private SolutionRunOnSaveOption solutionRunOnSaveOption =
SolutionRunOnSaveOption.UseGlobalSetting;

public SolutionRunOnSaveOption getSolutionRunOnSave() {
return this.solutionRunOnSaveOption;
}

public void setSolutionRunOnSave(SolutionRunOnSaveOption value) {
this.solutionRunOnSaveOption = value;
}

private boolean useCustomPath;

public boolean getUseCustomPath() {
Expand Down Expand Up @@ -63,5 +74,21 @@ public CSharpierSettings getState() {
@Override
public void loadState(@NotNull CSharpierSettings state) {
XmlSerializerUtil.copyBean(state, this);
migrate();
}

private void migrate() {
// If runOnSave was enabled it becomes SolutionRunOnSaveOption.True
// we reset runOnSave to false - this value will never be used after this
if (getRunOnSave()) {
setRunOnSave(false);
setSolutionRunOnSave(SolutionRunOnSaveOption.True);
}
}
}

enum SolutionRunOnSaveOption {
UseGlobalSetting,
False,
True,
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.intellij.csharpier;

import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.ui.components.JBCheckBox;
import com.intellij.ui.components.JBLabel;
import com.intellij.ui.components.JBTextField;
Expand All @@ -14,8 +16,16 @@

public class CSharpierSettingsComponent implements SearchableConfigurable {

Logger logger = CSharpierLogger.getInstance();

private final Project project;
private JBCheckBox runOnSaveCheckBox = new JBCheckBox("Run on Save");
private final String[] runOnSaveOptions = new String[] {
"True",
"Use Global Setting",
"False",
};
private ComboBox<String> runOnSaveComboBox = new ComboBox<String>(runOnSaveOptions);
private JBCheckBox globalRunOnSaveCheckBox = new JBCheckBox("Run on Save (Global)");
private JBCheckBox disableCSharpierServerCheckBox = new JBCheckBox("Disable CSharpier Server");
private JBCheckBox useCustomPath = new JBCheckBox("Override CSharpier Executable");
private JBTextField customPathTextField = new JBTextField();
Expand Down Expand Up @@ -66,7 +76,13 @@ private JComponent createSectionHeader(String label) {
return FormBuilder.createFormBuilder()
.addComponent(createSectionHeader("General Settings"))
.setFormLeftIndent(leftIndent)
.addComponent(this.runOnSaveCheckBox, topInset)
.addLabeledComponent(
new JBLabel("Run on save (Solution):"),
this.runOnSaveComboBox,
topInset,
false
)
.addComponent(this.globalRunOnSaveCheckBox, topInset)
.setFormLeftIndent(0)
.addComponent(createSectionHeader("Developer Settings"), 20)
.setFormLeftIndent(leftIndent)
Expand All @@ -85,8 +101,10 @@ private JComponent createSectionHeader(String label) {
@Override
public boolean isModified() {
return (
CSharpierSettings.getInstance(this.project).getRunOnSave() !=
this.runOnSaveCheckBox.isSelected() ||
CSharpierSettings.getInstance(this.project).getSolutionRunOnSave() !=
this.toRunOnSaveOption() ||
CSharpierGlobalSettings.getInstance(this.project).getRunOnSave() !=
this.globalRunOnSaveCheckBox.isSelected() ||
CSharpierSettings.getInstance(this.project).getCustomPath() !=
this.customPathTextField.getText() ||
CSharpierSettings.getInstance(this.project).getUseCustomPath() !=
Expand All @@ -100,18 +118,51 @@ public boolean isModified() {
public void apply() {
var settings = CSharpierSettings.getInstance(this.project);

settings.setRunOnSave(this.runOnSaveCheckBox.isSelected());
settings.setSolutionRunOnSave(this.toRunOnSaveOption());
settings.setCustomPath(this.customPathTextField.getText());
settings.setDisableCSharpierServer(this.disableCSharpierServerCheckBox.isSelected());
settings.setUseCustomPath(this.useCustomPath.isSelected());

var globalSettings = CSharpierGlobalSettings.getInstance(this.project);
globalSettings.setRunOnSave(this.globalRunOnSaveCheckBox.isSelected());
}

@Override
public void reset() {
var settings = CSharpierSettings.getInstance(this.project);
this.runOnSaveCheckBox.setSelected(settings.getRunOnSave());
this.setSelectedRunOnSave(settings.getSolutionRunOnSave());
this.useCustomPath.setSelected(settings.getUseCustomPath());
this.customPathTextField.setText(settings.getCustomPath());
this.disableCSharpierServerCheckBox.setSelected(settings.getDisableCSharpierServer());

var globalSettings = CSharpierGlobalSettings.getInstance(this.project);
this.globalRunOnSaveCheckBox.setSelected(globalSettings.getRunOnSave());
}

private SolutionRunOnSaveOption toRunOnSaveOption() {
String selectedItem = (String) runOnSaveComboBox.getSelectedItem();

if (selectedItem == runOnSaveOptions[0]) {
return SolutionRunOnSaveOption.True;
} else if (selectedItem == runOnSaveOptions[1]) {
return SolutionRunOnSaveOption.UseGlobalSetting;
} else if (selectedItem == runOnSaveOptions[2]) {
return SolutionRunOnSaveOption.False;
}

this.logger.debug("invalid runOnSaveComboBox selection: " + selectedItem);
return SolutionRunOnSaveOption.UseGlobalSetting;
}

private void setSelectedRunOnSave(SolutionRunOnSaveOption saveOption) {
if (saveOption == SolutionRunOnSaveOption.True) {
this.runOnSaveComboBox.setSelectedItem(runOnSaveOptions[0]);
} else if (saveOption == SolutionRunOnSaveOption.UseGlobalSetting) {
this.runOnSaveComboBox.setSelectedItem(runOnSaveOptions[1]);
} else if (saveOption == SolutionRunOnSaveOption.False) {
this.runOnSaveComboBox.setSelectedItem(runOnSaveOptions[2]);
}

this.logger.debug("tried to set invalid SolutionRunOnSaveOption: " + saveOption);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,16 @@ public void beforeDocumentSaving(@NotNull Document document) {
}

var cSharpierSettings = CSharpierSettings.getInstance(project);
if (!cSharpierSettings.getRunOnSave()) {
var cSharpierGlobalSettings = CSharpierGlobalSettings.getInstance(project);

if (cSharpierSettings.getSolutionRunOnSave() == SolutionRunOnSaveOption.False) {
return;
}

if (
!(cSharpierSettings.getSolutionRunOnSave() == SolutionRunOnSaveOption.True ||
cSharpierGlobalSettings.getRunOnSave())
) {
return;
}

Expand Down
1 change: 1 addition & 0 deletions Src/CSharpier.Rider/src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<vendor>belav</vendor>
<depends>com.intellij.modules.rider</depends>
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="com.intellij.csharpier.CSharpierGlobalSettings" />
<projectService serviceImplementation="com.intellij.csharpier.CSharpierProcessProvider" />
<projectService serviceImplementation="com.intellij.csharpier.DotNetProvider" />
<projectService serviceImplementation="com.intellij.csharpier.FormattingService" />
Expand Down