From d0db36b03d141ae481ec72753248ead8f0ae3b6f Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Fri, 24 Nov 2017 18:35:25 +0300 Subject: [PATCH] IDEA-180834 Properly initialize TaskStateCombo with a project and a task in "Open Task" and "Close Task" dialogs and no longer depend on where exactly $$$setupUI$$$() is called. It has broken down since after recent changes another call, namely setTitle(), was inserted before the assignments to myProject and myTask final fields in the constructor of OpenTaskDialog. Then $$$setupUI()$$$ call was moved right after the super() instead, and therefore createComponents() started observing null values of these fields instead of those actually passed in the constructor. --- .../com/intellij/tasks/actions/CloseTaskDialog.java | 4 +++- .../com/intellij/tasks/actions/OpenTaskDialog.java | 10 ++++++---- .../src/com/intellij/tasks/impl/TaskStateCombo.java | 13 ++++++++++--- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/CloseTaskDialog.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/CloseTaskDialog.java index bd8e6f338bea..90a713a2f867 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/CloseTaskDialog.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/CloseTaskDialog.java @@ -56,6 +56,8 @@ public class CloseTaskDialog extends DialogWrapper { super(project, false); myProject = project; myTask = task; + myStateCombo.setProject(myProject); + myStateCombo.setTask(myTask); setTitle("Close Task"); myTaskLabel.setText(TaskUtil.getTrimmedSummary(task)); @@ -119,7 +121,7 @@ public class CloseTaskDialog extends DialogWrapper { } private void createUIComponents() { - myStateCombo = new TaskStateCombo(myProject, myTask) { + myStateCombo = new TaskStateCombo() { @Nullable @Override protected CustomTaskState getPreferredState(@NotNull TaskRepository repository, @NotNull Collection available) { diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java index 1474ecd34908..e5cf525ef337 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java @@ -66,10 +66,12 @@ public class OpenTaskDialog extends DialogWrapper { public OpenTaskDialog(@NotNull final Project project, @NotNull final Task task) { super(project, false); - setTitle("Open Task"); - myProject = project; myTask = new LocalTaskImpl(task); + myTaskStateCombo.setProject(myProject); + myTaskStateCombo.setTask(myTask); + + setTitle("Open Task"); myNameField.setText(TaskUtil.getTrimmedSummary(task)); myNameField.setEnabled(!task.isIssue()); @@ -103,7 +105,7 @@ public class OpenTaskDialog extends DialogWrapper { if (myUpdateState.isSelected()) { myTaskStateCombo.scheduleUpdateOnce(); } - + myAdditionalPanel.setLayout(new BoxLayout(myAdditionalPanel, BoxLayout.Y_AXIS)); myPanels = TaskDialogPanelProvider.getOpenTaskPanels(project, myTask); for (TaskDialogPanel panel : myPanels) { @@ -197,7 +199,7 @@ public class OpenTaskDialog extends DialogWrapper { } private void createUIComponents() { - myTaskStateCombo = new TaskStateCombo(myProject, myTask) { + myTaskStateCombo = new TaskStateCombo() { @Nullable @Override protected CustomTaskState getPreferredState(@NotNull TaskRepository repository, @NotNull Collection available) { diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskStateCombo.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskStateCombo.java index 9bb2202bd558..30ff4aea2d06 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskStateCombo.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskStateCombo.java @@ -9,7 +9,6 @@ import com.intellij.tasks.Task; import com.intellij.tasks.TaskRepository; import com.intellij.tasks.impl.TaskUiUtil.ComboBoxUpdater; import com.intellij.ui.components.JBLabel; -import com.intellij.util.Function; import com.intellij.util.PlatformIcons; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; @@ -36,8 +35,8 @@ public abstract class TaskStateCombo extends JPanel { return repository != null && repository.isSupported(TaskRepository.STATE_UPDATING); } - private final Project myProject; - private final Task myTask; + private Project myProject; + private Task myTask; private final TemplateKindCombo myKindCombo = new TemplateKindCombo(); // For designer only @@ -121,6 +120,14 @@ public abstract class TaskStateCombo extends JPanel { return myKindCombo.getComboBox(); } + public void setProject(@NotNull Project project) { + myProject = project; + } + + public void setTask(@NotNull Task task) { + myTask = task; + } + /** * Determine what state should be initially selected in the list. * @param repository task repository to communicate with