Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/fixed frozen configuration dialog #11

Merged
merged 7 commits into from
Oct 21, 2024
Merged
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
Expand Up @@ -8,11 +8,12 @@
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.project.Project;
import io.github.nahuel92.pit4u.gui.Pit4USettingsEditor;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;

class JavaParametersCreator {
Expand All @@ -23,18 +24,19 @@ class JavaParametersCreator {
private static final List<String> PIT_LIBS = getPitLibs();

public static JavaParameters create(final JavaRunConfigurationModule configurationModule,
final Project project,
final Pit4USettingsEditor pit4USettingsEditor) {
final Project project, final PIT4UEditorStatus pit4UEditorStatus) {
setModule(configurationModule, project);
final var javaParameters = new JavaParameters();
addPitLibraries(javaParameters);
configureModules(project, javaParameters);
javaParameters.setWorkingDirectory(configurationModule.getProject().getBasePath());
javaParameters.setMainClass("org.pitest.mutationtest.commandline.MutationCoverageReport");
javaParameters.getProgramParametersList().add("--targetClasses", pit4USettingsEditor.getTargetClasses());
javaParameters.getProgramParametersList().add("--targetTests", pit4USettingsEditor.getTargetTests());
javaParameters.getProgramParametersList().add("--sourceDirs", pit4USettingsEditor.getSourceDirs());
javaParameters.getProgramParametersList().add("--reportDir", pit4USettingsEditor.getReportDir());
javaParameters.getProgramParametersList().add("--targetClasses", pit4UEditorStatus.getTargetClasses());
javaParameters.getProgramParametersList().add("--targetTests", pit4UEditorStatus.getTargetTests());
javaParameters.getProgramParametersList().add("--sourceDirs", pit4UEditorStatus.getSourceDir());
javaParameters.getProgramParametersList().add("--reportDir", pit4UEditorStatus.getReportDir());
Arrays.stream(pit4UEditorStatus.getOtherParams().split(StringUtils.SPACE))
.forEach(otherParam -> javaParameters.getProgramParametersList().add(otherParam));
return javaParameters;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@

import javax.swing.*;

class Pit4UConfigurationFactory extends ConfigurationFactory {
public Pit4UConfigurationFactory(@NotNull final ConfigurationType type) {
class PIT4UConfigurationFactory extends ConfigurationFactory {
public PIT4UConfigurationFactory(@NotNull final ConfigurationType type) {
super(type);
}

Expand All @@ -27,6 +27,6 @@ public Icon getIcon(@NotNull final RunConfiguration configuration) {
@Override
@NotNull
public RunConfiguration createTemplateConfiguration(@NotNull final Project project) {
return new Pit4URunConfiguration("PIT4U Configuration", project, this);
return new PIT4URunConfiguration("PIT4U Configuration", project, this);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package io.github.nahuel92.pit4u.configuration;

import org.apache.commons.lang3.StringUtils;
import org.jdom.Attribute;
import org.jdom.Element;

class PIT4UConfigurationStore {
private static final String TARGET_CLASSES = "targetClasses";
private static final String TARGET_TESTS = "targetTests";
private static final String SOURCE_DIRS = "sourceDirs";
private static final String REPORT_DIR = "reportDir";
private static final String OTHER_PARAMS = "otherParams";

public static void readExternal(final PIT4UEditorStatus pit4UEditorStatus, final Element element) {
pit4UEditorStatus.setTargetClasses(getOrDefault(element.getAttribute(TARGET_CLASSES)));
pit4UEditorStatus.setTargetTests(getOrDefault(element.getAttribute(TARGET_TESTS)));
pit4UEditorStatus.setSourceDir(getOrDefault(element.getAttribute(SOURCE_DIRS)));
pit4UEditorStatus.setReportDir(getOrDefault(element.getAttribute(REPORT_DIR)));
pit4UEditorStatus.setOtherParams(getOrDefault(element.getAttribute(OTHER_PARAMS)));
}

public static void writeExternal(final PIT4UEditorStatus pit4UEditorStatus, final Element element) {
element.setAttribute(TARGET_CLASSES, getOrDefault(pit4UEditorStatus.getTargetClasses()));
element.setAttribute(TARGET_TESTS, getOrDefault(pit4UEditorStatus.getTargetTests()));
element.setAttribute(SOURCE_DIRS, getOrDefault(pit4UEditorStatus.getSourceDir()));
element.setAttribute(REPORT_DIR, getOrDefault(pit4UEditorStatus.getReportDir()));
element.setAttribute(OTHER_PARAMS, getOrDefault(pit4UEditorStatus.getOtherParams()));
}

private static String getOrDefault(final Attribute attribute) {
if (attribute == null) {
return StringUtils.EMPTY;
}
return attribute.getValue();
}

private static String getOrDefault(final String value) {
return StringUtils.defaultIfBlank(value, StringUtils.EMPTY);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

import javax.swing.*;

class Pit4UConfigurationType implements ConfigurationType {
private static final Icon ICON = IconLoader.getIcon("/pit4u.svg", Pit4UConfigurationType.class);
class PIT4UConfigurationType implements ConfigurationType {
private static final Icon ICON = IconLoader.getIcon("/pit4u.svg", PIT4UConfigurationType.class);
private static final String ID = "Pit4UConfigurationType";

@Override
Expand Down Expand Up @@ -40,6 +40,6 @@ public Icon getIcon() {

@Override
public ConfigurationFactory[] getConfigurationFactories() {
return new ConfigurationFactory[]{new Pit4UConfigurationFactory(this)};
return new ConfigurationFactory[]{new PIT4UConfigurationFactory(this)};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package io.github.nahuel92.pit4u.configuration;

import org.apache.commons.lang3.StringUtils;

public class PIT4UEditorStatus {
private String targetClasses = StringUtils.EMPTY;
private String targetTests = StringUtils.EMPTY;
private String sourceDir = StringUtils.EMPTY;
private String reportDir = StringUtils.EMPTY;
private String otherParams = StringUtils.EMPTY;

public String getTargetClasses() {
return targetClasses;
}

public void setTargetClasses(final String targetClasses) {
this.targetClasses = targetClasses;
}

public String getTargetTests() {
return targetTests;
}

public void setTargetTests(final String targetTests) {
this.targetTests = targetTests;
}

public String getSourceDir() {
return sourceDir;
}

public void setSourceDir(final String sourceDir) {
this.sourceDir = sourceDir;
}

public String getReportDir() {
return reportDir;
}

public void setReportDir(final String reportDir) {
this.reportDir = reportDir;
}

public String getOtherParams() {
return otherParams;
}

public void setOtherParams(final String otherParams) {
this.otherParams = otherParams;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.intellij.execution.ExecutionException;
import com.intellij.execution.ExecutionResult;
import com.intellij.execution.Executor;
import com.intellij.execution.JavaRunConfigurationExtensionManager;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.JavaCommandLineState;
import com.intellij.execution.configurations.JavaParameters;
Expand All @@ -20,14 +19,15 @@
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.ui.ConsoleView;
import com.intellij.ide.browsers.OpenUrlHyperlinkInfo;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.options.SettingsEditorGroup;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import io.github.nahuel92.pit4u.gui.Pit4USettingsEditor;
import io.github.nahuel92.pit4u.gui.PIT4USettingsEditor;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand All @@ -36,22 +36,19 @@
import java.util.Collection;
import java.util.List;

public class Pit4URunConfiguration extends ModuleBasedConfiguration<JavaRunConfigurationModule, Pit4URunConfiguration>
implements RunConfiguration {
private final Pit4USettingsEditor pit4USettingsEditor;
public class PIT4URunConfiguration extends ModuleBasedConfiguration<JavaRunConfigurationModule, PIT4URunConfiguration>
implements RunConfiguration, Disposable {
private final Logger log = Logger.getInstance(PIT4URunConfiguration.class);
private final PIT4UEditorStatus pit4UEditorStatus = new PIT4UEditorStatus();

protected Pit4URunConfiguration(final String name, final Project project, final ConfigurationFactory factory) {
protected PIT4URunConfiguration(final String name, final Project project, final ConfigurationFactory factory) {
super(name, new JavaRunConfigurationModule(project, true), factory);
this.pit4USettingsEditor = new Pit4USettingsEditor(project);
}

@Override
@NotNull
public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() {
final var group = new SettingsEditorGroup<Pit4URunConfiguration>();
group.addEditor("PIT4U", pit4USettingsEditor);
JavaRunConfigurationExtensionManager.getInstance().appendEditors(this, group);
return group;
return new PIT4USettingsEditor(getProject(), pit4UEditorStatus);
}

@Override
Expand All @@ -67,7 +64,7 @@ public RunProfileState getState(@NotNull final Executor executor, @NotNull final

@Override
protected JavaParameters createJavaParameters() {
return JavaParametersCreator.create(getConfigurationModule(), getProject(), pit4USettingsEditor);
return JavaParametersCreator.create(getConfigurationModule(), getProject(), pit4UEditorStatus);
}

@Override
Expand All @@ -79,7 +76,7 @@ protected OSProcessHandler startProcess() throws ExecutionException {
@Override
public void processTerminated(@NotNull final ProcessEvent event) {
final var reportLink = "file:///" +
Path.of(pit4USettingsEditor.getReportDir()).toAbsolutePath() +
Path.of(pit4UEditorStatus.getReportDir()).toAbsolutePath() +
"/index.html";
consoleView.printHyperlink(
"Report ready, click to open it in your browser",
Expand Down Expand Up @@ -118,12 +115,17 @@ public ExecutionResult execute(@NotNull final Executor executor,
@Override
public void readExternal(@NotNull final Element element) throws InvalidDataException {
super.readExternal(element);
Pit4UConfigurationStore.readExternal(pit4USettingsEditor, element);
PIT4UConfigurationStore.readExternal(pit4UEditorStatus, element);
}

@Override
public void writeExternal(@NotNull final Element element) throws WriteExternalException {
super.writeExternal(element);
Pit4UConfigurationStore.writeExternal(pit4USettingsEditor, element);
PIT4UConfigurationStore.writeExternal(pit4UEditorStatus, element);
}

@Override
public void dispose() {
log.info("PIT4URunConfiguration Disposed");
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="io.github.nahuel92.pit4u.gui.Pit4USettingsEditor">
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="io.github.nahuel92.pit4u.gui.PIT4USettingsEditor">
<grid id="27dc6" binding="jPanel" layout-manager="GridLayoutManager" row-count="6" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
Expand Down
Loading
Loading