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.
This commit is contained in:
Mikhail Golubev
2017-11-24 19:23:48 +03:00
parent cbbaa81414
commit d0db36b03d
3 changed files with 19 additions and 8 deletions
@@ -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<CustomTaskState> available) {
@@ -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<CustomTaskState> available) {
@@ -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