Skip to content

Commit 4d18b46

Browse files
authored
Merge pull request #285 from SeeSharpSoft/fb_mem_leak
[FIX] Memory leak of PsiFile #284
2 parents 5e270b9 + ce31c09 commit 4d18b46

File tree

2 files changed

+20
-26
lines changed

2 files changed

+20
-26
lines changed

src/main/java/net/seesharpsoft/intellij/plugins/csv/psi/CsvFile.java

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,43 +5,21 @@
55
import com.intellij.openapi.fileTypes.LanguageFileType;
66
import com.intellij.psi.FileViewProvider;
77
import com.intellij.psi.PsiElement;
8-
import com.intellij.util.FileContentUtilCore;
98
import net.seesharpsoft.intellij.plugins.csv.CsvColumnInfoMap;
109
import net.seesharpsoft.intellij.plugins.csv.CsvHelper;
11-
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
1210
import org.jetbrains.annotations.NotNull;
1311

1412
import javax.swing.*;
15-
import java.beans.PropertyChangeEvent;
16-
import java.beans.PropertyChangeListener;
1713

1814
public class CsvFile extends PsiFileBase {
1915

2016
private final LanguageFileType myFileType;
2117
private CsvColumnInfoMap<PsiElement> myColumnInfoMap;
2218
private long myColumnInfoMapModifiedStamp;
2319

24-
private class CsvEditorSettingsPropertyChangeListener implements PropertyChangeListener{
25-
@Override
26-
public void propertyChange(PropertyChangeEvent evt) {
27-
switch (evt.getPropertyName()) {
28-
case "defaultEscapeCharacter":
29-
case "defaultValueSeparator":
30-
case "commentIndicator":
31-
case "valueColoring":
32-
FileContentUtilCore.reparseFiles(CsvFile.this.getVirtualFile());
33-
break;
34-
default:
35-
// does not influence file
36-
break;
37-
}
38-
}
39-
}
40-
4120
public CsvFile(@NotNull FileViewProvider viewProvider, LanguageFileType fileType) {
4221
super(viewProvider, fileType.getLanguage());
4322
myFileType = fileType;
44-
CsvEditorSettings.getInstance().addPropertyChangeListener(new CsvEditorSettingsPropertyChangeListener());
4523
}
4624

4725
public CsvColumnInfoMap<PsiElement> getColumnInfoMap() {

src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettingsProvider.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package net.seesharpsoft.intellij.plugins.csv.settings;
22

33
import com.intellij.application.options.editor.EditorOptionsProvider;
4+
import com.intellij.openapi.fileEditor.FileEditorManager;
45
import com.intellij.openapi.options.ConfigurationException;
6+
import com.intellij.openapi.project.ProjectManager;
57
import com.intellij.openapi.ui.ComboBox;
68
import com.intellij.ui.CheckBoxWithColorChooser;
9+
import com.intellij.util.FileContentUtilCore;
710
import net.seesharpsoft.intellij.plugins.csv.CsvEscapeCharacter;
811
import net.seesharpsoft.intellij.plugins.csv.CsvValueSeparator;
912
import net.seesharpsoft.intellij.ui.CustomDisplayListCellRenderer;
@@ -14,7 +17,9 @@
1417
import javax.swing.text.NumberFormatter;
1518
import java.awt.*;
1619
import java.text.NumberFormat;
20+
import java.util.Arrays;
1721
import java.util.Objects;
22+
import java.util.stream.Collectors;
1823

1924
public class CsvEditorSettingsProvider implements EditorOptionsProvider {
2025

@@ -142,17 +147,28 @@ public void apply() throws ConfigurationException {
142147
csvEditorSettings.setTableAutoMaxColumnWidth((int) tfMaxColumnWidth.getValue());
143148
csvEditorSettings.setTableDefaultColumnWidth((int) tfDefaultColumnWidth.getValue());
144149
csvEditorSettings.setTableAutoColumnWidthOnOpen(cbAdjustColumnWidthOnOpen.isSelected());
145-
csvEditorSettings.setDefaultEscapeCharacter((CsvEscapeCharacter)comboEscapeCharacter.getSelectedItem());
150+
csvEditorSettings.setDefaultEscapeCharacter((CsvEscapeCharacter) comboEscapeCharacter.getSelectedItem());
146151
csvEditorSettings.setDefaultValueSeparator(
147152
comboValueSeparator.getSelectedItem() instanceof CsvValueSeparator ?
148-
(CsvValueSeparator)comboValueSeparator.getSelectedItem() :
149-
CsvValueSeparator.create((String)comboValueSeparator.getSelectedItem())
150-
);
153+
(CsvValueSeparator) comboValueSeparator.getSelectedItem() :
154+
CsvValueSeparator.create((String) comboValueSeparator.getSelectedItem())
155+
);
151156
csvEditorSettings.setKeepTrailingSpaces(cbKeepTrailingWhitespaces.isSelected());
152157
csvEditorSettings.setCommentIndicator(tfCommentIndicator.getText());
153158
csvEditorSettings.setValueColoring((CsvEditorSettings.ValueColoring) comboValueColoring.getSelectedItem());
154159
csvEditorSettings.setHeaderRowFixed(cbHeaderRowFixed.isSelected());
155160
csvEditorSettings.setAutoDetectValueSeparator(cbAutoDetectSeparator.isSelected());
161+
162+
this.refreshOpenEditors();
163+
}
164+
165+
protected void refreshOpenEditors() {
166+
FileContentUtilCore.reparseFiles(
167+
Arrays.stream(ProjectManager.getInstance().getOpenProjects())
168+
.map(FileEditorManager::getInstance)
169+
.flatMap(manager -> Arrays.stream(manager.getOpenFiles()))
170+
.collect(Collectors.toList())
171+
);
156172
}
157173

158174
protected void createUIComponents() {

0 commit comments

Comments
 (0)