Skip to content

Commit 978272e

Browse files
yoleintellij-monorepo-bot
authored andcommitted
To avoid memory leaks, don't store list cell renderer in a static field (IDEA-239692)
GitOrigin-RevId: 2035e43bdb2372aff4d43834b2db3f763fc2decb
1 parent bbc52d4 commit 978272e

File tree

1 file changed

+22
-23
lines changed

1 file changed

+22
-23
lines changed

platform/lang-impl/src/com/intellij/ide/actions/newclass/CreateWithTemplatesDialogPanel.java

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
public class CreateWithTemplatesDialogPanel extends NewItemWithTemplatesPopupPanel<Trinity<String, Icon, String>> {
1818

1919
public CreateWithTemplatesDialogPanel(@NotNull List<Trinity<String, Icon, String>> templates, @Nullable String selectedItem) {
20-
super(templates, LIST_RENDERER);
20+
super(templates, new TemplateListCellRenderer());
2121
myTemplatesList.addListSelectionListener(e -> {
2222
Trinity<String, Icon, String> selectedValue = myTemplatesList.getSelectedValue();
2323
if (selectedValue != null) {
@@ -63,28 +63,26 @@ private void selectTemplate(@Nullable String selectedItem) {
6363
}
6464
}
6565

66-
private static final ListCellRenderer<Trinity<String, Icon, String>> LIST_RENDERER =
67-
new ListCellRenderer<Trinity<String, Icon, String>>() {
68-
69-
private final ListCellRenderer<Trinity<String, Icon, String>> delegateRenderer =
70-
SimpleListCellRenderer.create((label, value, index) -> {
71-
if (value != null) {
72-
label.setText(value.first);
73-
label.setIcon(value.second);
74-
}
75-
});
76-
77-
@Override
78-
public Component getListCellRendererComponent(JList<? extends Trinity<String, Icon, String>> list,
79-
Trinity<String, Icon, String> value,
80-
int index,
81-
boolean isSelected,
82-
boolean cellHasFocus) {
83-
JComponent delegate = (JComponent) delegateRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
84-
delegate.setBorder(JBUI.Borders.empty(JBUIScale.scale(3), JBUIScale.scale(1)));
85-
return delegate;
86-
}
87-
};
66+
private static class TemplateListCellRenderer implements ListCellRenderer<Trinity<String, Icon, String>> {
67+
private final ListCellRenderer<Trinity<String, Icon, String>> delegateRenderer =
68+
SimpleListCellRenderer.create((label, value, index) -> {
69+
if (value != null) {
70+
label.setText(value.first);
71+
label.setIcon(value.second);
72+
}
73+
});
74+
75+
@Override
76+
public Component getListCellRendererComponent(JList<? extends Trinity<String, Icon, String>> list,
77+
Trinity<String, Icon, String> value,
78+
int index,
79+
boolean isSelected,
80+
boolean cellHasFocus) {
81+
JComponent delegate = (JComponent) delegateRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
82+
delegate.setBorder(JBUI.Borders.empty(JBUIScale.scale(3), JBUIScale.scale(1)));
83+
return delegate;
84+
}
85+
}
8886

8987
private static class TemplateIconExtension implements ExtendableTextComponent.Extension {
9088
private final Icon icon;
@@ -101,4 +99,5 @@ public boolean isIconBeforeText() {
10199
return true;
102100
}
103101
}
102+
104103
}

0 commit comments

Comments
 (0)