diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/redmine/RedmineRepository.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/redmine/RedmineRepository.java index 2c1fca1df9db..be9bb2cb8da2 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/redmine/RedmineRepository.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/redmine/RedmineRepository.java @@ -44,24 +44,26 @@ public class RedmineRepository extends NewBaseRepositoryImpl { private static final Pattern ID_PATTERN = Pattern.compile("\\d+"); private static final Logger LOG = Logger.getInstance(RedmineRepository.class); - public static final RedmineProject UNSPECIFIED_PROJECT = new RedmineProject() { - @NotNull - @Override - public String getName() { - return "-- from all projects --"; - } + public static final RedmineProject UNSPECIFIED_PROJECT = createUnspecifiedProject(); - @Nullable - @Override - public String getIdentifier() { - return getName(); - } + @NotNull + private static RedmineProject createUnspecifiedProject() { + final RedmineProject unspecified = new RedmineProject() { + @NotNull + @Override + public String getName() { + return "-- from all projects --"; + } - @Override - public int getId() { - return -1; - } - }; + @Nullable + @Override + public String getIdentifier() { + return getName(); + } + }; + unspecified.setId(-1); + return unspecified; + } private String myAPIKey = ""; private RedmineProject myCurrentProject; diff --git a/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/RedmineIntegrationTest.java b/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/RedmineIntegrationTest.java index 86e7cc9a2c45..ffc4fea464b6 100644 --- a/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/RedmineIntegrationTest.java +++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/RedmineIntegrationTest.java @@ -1,5 +1,6 @@ package com.intellij.tasks.integration; +import com.intellij.configurationStore.XmlSerializer; import com.intellij.tasks.Task; import com.intellij.tasks.TaskBundle; import com.intellij.tasks.TaskManagerTestCase; @@ -9,6 +10,8 @@ import com.intellij.tasks.redmine.RedmineRepository; import com.intellij.tasks.redmine.RedmineRepositoryType; import com.intellij.tasks.redmine.model.RedmineProject; import com.intellij.util.containers.ContainerUtil; +import one.util.streamex.StreamEx; +import org.jdom.Element; import java.util.List; @@ -133,6 +136,18 @@ public class RedmineIntegrationTest extends TaskManagerTestCase { } } + // IDEA-200933 + public void testUnspecifiedProjectIdSerialized() { + myRepository.setCurrentProject(RedmineRepository.UNSPECIFIED_PROJECT); + final List options = XmlSerializer.serialize(myRepository).getChildren("option"); + final String serializedId = StreamEx.of(options) + .findFirst(elem -> "currentProject".equals(elem.getAttributeValue("name"))) + .map(elem -> elem.getChild("RedmineProject")) + .map(elem -> elem.getAttributeValue("id")) + .orElse(null); + assertEquals("-1", serializedId); + } + @Override public void setUp() throws Exception { super.setUp();