Skip to content

Commit 9c4a6fa

Browse files
authored
Merge pull request #87 from 0verEngineer/dev
dev -> main for 0.5.9
2 parents 1fcb5e3 + b2390d1 commit 9c4a6fa

14 files changed

+139
-43
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44

55
## [Unreleased]
66

7+
## [0.5.9]
8+
### Changed
9+
- Added a max lines feature to exclude big files
10+
- Added a max problems per line feature
11+
712
## [0.5.8]
813
### Fixed
914
- Fixed settings not opening with non default locales

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ pluginGroup = org.OverEngineer
22
pluginName = InlineProblems
33
pluginRepositoryUrl = https://github.com/OverEngineer/InlineProblems
44
# SemVer format -> https://semver.org
5-
pluginVersion = 0.5.8
5+
pluginVersion = 0.5.9
66

77
# Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
88
pluginSinceBuild = 212.5

src/main/java/org/overengineer/inlineproblems/DocumentMarkupModelScanner.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import org.overengineer.inlineproblems.entities.enums.Listener;
2020
import org.overengineer.inlineproblems.listeners.HighlightProblemListener;
2121
import org.overengineer.inlineproblems.settings.SettingsState;
22-
import org.overengineer.inlineproblems.utils.FileNameUtil;
22+
import org.overengineer.inlineproblems.utils.FileUtil;
2323

2424
import java.util.ArrayList;
2525
import java.util.Arrays;
@@ -92,16 +92,20 @@ public void scanForProblemsManually() {
9292
FileEditorManager fileEditorManager = FileEditorManager.getInstance(project);
9393
for (var editor : fileEditorManager.getAllEditors()) {
9494

95-
if (editor.getFile() == null || FileNameUtil.ignoreFile(editor.getFile().getName())) {
95+
if (editor instanceof TextEditor) {
96+
var textEditor = (TextEditor) editor;
97+
98+
if (
99+
editor.getFile() == null ||
100+
FileUtil.ignoreFile(editor.getFile().getName(), textEditor.getEditor().getDocument().getLineCount())
101+
) {
96102
continue;
97103
}
98104

99-
if (editor instanceof TextEditor) {
100-
var textEditor = (TextEditor) editor;
101-
problems.addAll(getProblemsInEditor(textEditor));
102-
}
105+
problems.addAll(getProblemsInEditor(textEditor));
103106
}
104107
}
108+
}
105109

106110
problemManager.updateFromNewActiveProblems(problems);
107111
}
@@ -112,7 +116,10 @@ public void scanForProblemsManually() {
112116
* millisecond if the HighlightProblemListener is used.
113117
*/
114118
public void scanForProblemsManuallyInTextEditor(TextEditor textEditor) {
115-
if (textEditor.getFile() == null || FileNameUtil.ignoreFile(textEditor.getFile().getName())) {
119+
if (
120+
textEditor.getFile() == null ||
121+
FileUtil.ignoreFile(textEditor.getFile().getName(), textEditor.getEditor().getDocument().getLineCount())
122+
) {
116123
return;
117124
}
118125

src/main/java/org/overengineer/inlineproblems/ListenerManager.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.overengineer.inlineproblems.listeners.HighlightProblemListener;
1010
import org.overengineer.inlineproblems.listeners.MarkupModelProblemListener;
1111
import org.overengineer.inlineproblems.settings.SettingsState;
12-
import org.overengineer.inlineproblems.utils.FileNameUtil;
12+
import org.overengineer.inlineproblems.utils.FileUtil;
1313

1414

1515
public class ListenerManager {
@@ -40,12 +40,15 @@ public void installMarkupModelListenerOnAllProjects() {
4040
for (var project : manager.getOpenProjects()) {
4141
FileEditorManager fileEditorManager = FileEditorManager.getInstance(project);
4242
for (var editor : fileEditorManager.getAllEditors()) {
43-
44-
if (editor.getFile() == null || FileNameUtil.ignoreFile(editor.getFile().getName())) {
45-
continue;
46-
}
47-
4843
if (editor instanceof TextEditor) {
44+
var textEditor = (TextEditor) editor;
45+
if (
46+
editor.getFile() == null ||
47+
FileUtil.ignoreFile(editor.getFile().getName(), textEditor.getEditor().getDocument().getLineCount())
48+
) {
49+
continue;
50+
}
51+
4952
MarkupModelProblemListener.setup((TextEditor) editor);
5053
logger.debug("Installing MarkupModelListener");
5154
}

src/main/java/org/overengineer/inlineproblems/ProblemManager.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ public void addProblem(InlineProblem problem) {
6464
removeProblem(p);
6565
});
6666

67+
// Limit problems per line
68+
int maxProblemsPerLine = settingsState.getMaxProblemsPerLine();
69+
if (maxProblemsPerLine > 0 && problemsInLine.size() > maxProblemsPerLine) {
70+
problemsInLine.subList(maxProblemsPerLine, problemsInLine.size()).clear();
71+
}
72+
6773
/* This only works when using a method reference, if we move the code from the addProblemPrivate func into a lambda
6874
* it does not work like expected, that is because there are differences in the evaluation and the way it is called */
6975
problemsInLine.forEach(this::addProblemPrivate);

src/main/java/org/overengineer/inlineproblems/listeners/FileEditorListener.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import org.jetbrains.annotations.NotNull;
77
import org.overengineer.inlineproblems.entities.enums.Listener;
88
import org.overengineer.inlineproblems.settings.SettingsState;
9-
import org.overengineer.inlineproblems.utils.FileNameUtil;
9+
import org.overengineer.inlineproblems.utils.FileUtil;
1010

1111
import java.util.Arrays;
1212

@@ -24,13 +24,15 @@ public void fileOpenedSync(
2424
if (settingsState.getEnabledListener() != Listener.MARKUP_MODEL_LISTENER)
2525
return;
2626

27-
if (FileNameUtil.ignoreFile(file.getName())) {
27+
// Precheck only file name, later we check the line count only
28+
if (FileUtil.ignoreFile(file.getName(), -1)) {
2829
return;
2930
}
3031

3132
Arrays.stream(editors.first)
32-
.filter(e -> e instanceof TextEditor)
33-
.map(e -> (TextEditor)e)
34-
.forEach(MarkupModelProblemListener::setup);
33+
.filter(e -> e instanceof TextEditor)
34+
.map(e -> (TextEditor) e)
35+
.filter(tE -> !FileUtil.ignoreFile(null, tE.getEditor().getDocument().getLineCount()))
36+
.forEach(MarkupModelProblemListener::setup);
3537
}
3638
}

src/main/java/org/overengineer/inlineproblems/listeners/HighlightProblemListener.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import org.overengineer.inlineproblems.DocumentMarkupModelScanner;
1313
import org.overengineer.inlineproblems.entities.enums.Listener;
1414
import org.overengineer.inlineproblems.settings.SettingsState;
15-
import org.overengineer.inlineproblems.utils.FileNameUtil;
15+
import org.overengineer.inlineproblems.utils.FileUtil;
1616

1717

1818
public class HighlightProblemListener implements HighlightInfoFilter {
@@ -29,7 +29,8 @@ public boolean accept(@NotNull HighlightInfo highlightInfo, @Nullable PsiFile fi
2929
if (file == null || !file.isValid())
3030
return true;
3131

32-
if (FileNameUtil.ignoreFile(file.getName())) {
32+
// Only check file name here, the line count is checked in the scanForProblemsManuallyInTextEditor call
33+
if (FileUtil.ignoreFile(file.getName(), -1)) {
3334
return true;
3435
}
3536

@@ -48,7 +49,7 @@ public void handleAccept(PsiFile file) {
4849
return;
4950

5051
FileEditor editor = FileEditorManager.getInstance(file.getProject()).getSelectedEditor(file.getVirtualFile());
51-
if (editor == null) {
52+
if (editor == null || !(editor instanceof TextEditor)) {
5253
return;
5354
}
5455

src/main/java/org/overengineer/inlineproblems/settings/SettingsComponent.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ public class SettingsComponent {
6868
private final JBCheckBox enableXmlUnescaping = new JBCheckBox(SettingsBundle.message("settings.enableXmlUnescaping"));
6969
private final JFormattedTextField inlayFontSizeDeltaText;
7070
private final JFormattedTextField manualScannerDelay;
71+
private final JFormattedTextField maxProblemsPerLine;
72+
private final JFormattedTextField maxFileLines;
7173
private final JBCheckBox fillProblemLabels = new JBCheckBox(SettingsBundle.message("settings.fillProblemLabels"));
7274
private final JBCheckBox boldProblemLabels = new JBCheckBox(SettingsBundle.message("settings.boldProblemLabels"));
7375
private final JBCheckBox italicProblemLabels = new JBCheckBox(SettingsBundle.message("settings.italicProblemLabels"));
@@ -135,9 +137,15 @@ public SettingsComponent() {
135137
inlayFontSizeDeltaText = new JFormattedTextField(numberFormatter);
136138
inlayFontSizeDeltaText.setText(Integer.toString(settingsState.getInlayFontSizeDelta()));
137139

140+
maxProblemsPerLine = new JFormattedTextField(numberFormatter);
141+
maxProblemsPerLine.setText(Integer.toString(settingsState.getMaxProblemsPerLine()));
142+
138143
manualScannerDelay = new JFormattedTextField(numberFormatter);
139144
manualScannerDelay.setText(Integer.toString(settingsState.getManualScannerDelay()));
140145

146+
maxFileLines = new JFormattedTextField(numberFormatter);
147+
maxFileLines.setText(Integer.toString(settingsState.getMaxFileLines()));
148+
141149
fillProblemLabels.setSelected(settingsState.isFillProblemLabels());
142150
boldProblemLabels.setSelected(settingsState.isBoldProblemLabels());
143151
italicProblemLabels.setSelected(settingsState.isItalicProblemLabels());
@@ -186,6 +194,10 @@ public SettingsComponent() {
186194
.addTooltip(SettingsBundle.message("settings.problemFilterListTooltip"))
187195
.addLabeledComponent(new JLabel(SettingsBundle.message("settings.fileExtensionBlacklistLabel")), fileExtensionBlacklist)
188196
.addTooltip(SettingsBundle.message("settings.fileExtensionBlacklistTooltip"))
197+
.addLabeledComponent(new JBLabel(SettingsBundle.message("settings.maxProblemsPerLineLabel")), maxProblemsPerLine)
198+
.addTooltip(SettingsBundle.message("settings.maxProblemsPerLineTooltip"))
199+
.addLabeledComponent(new JLabel(SettingsBundle.message("settings.maxFileLinesLabel")), maxFileLines)
200+
.addTooltip(SettingsBundle.message("settings.maxFileLinesTooltip"))
189201
.addSeparator()
190202
.addComponent(new JBLabel(SettingsBundle.message("settings.submenu.colors")))
191203
.addComponent(showErrors)
@@ -644,4 +656,30 @@ public int getManualScannerDelay() {
644656
public void setManualScannerDelay(int delay) {
645657
manualScannerDelay.setText(Integer.toString(Math.max(10, delay)));
646658
}
659+
660+
public int getMaxProblemsPerLine() {
661+
try {
662+
return Math.max(Integer.parseInt(maxProblemsPerLine.getText()), 0);
663+
}
664+
catch (NumberFormatException e) {
665+
return 0;
666+
}
667+
}
668+
669+
public void setMaxProblemsPerLine(int max) {
670+
maxProblemsPerLine.setText(Integer.toString(Math.max(0, max)));
671+
}
672+
673+
public int getMaxFileLines() {
674+
try {
675+
return Math.max(Integer.parseInt(maxFileLines.getText()), 0);
676+
}
677+
catch (NumberFormatException e) {
678+
return 0;
679+
}
680+
}
681+
682+
public void setMaxFileLines(int lines) {
683+
maxFileLines.setText(Integer.toString(Math.max(0, lines)));
684+
}
647685
}

src/main/java/org/overengineer/inlineproblems/settings/SettingsConfigurable.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public boolean isModified() {
4848
state.isRoundedCornerBoxes() == settingsComponent.isRoundedCornerBoxes() &&
4949
state.isUseEditorFont() == settingsComponent.isUseEditorFont() &&
5050
state.isShowOnlyHighestSeverityPerLine() == settingsComponent.isShowOnlyHighestSeverityPerLine() &&
51+
state.getMaxProblemsPerLine() == settingsComponent.getMaxProblemsPerLine() &&
5152
state.isEnableHtmlStripping() == settingsComponent.isEnableHtmlStripping() &&
5253
state.isEnableXmlUnescaping() == settingsComponent.isEnableXmlUnescaping() &&
5354
state.getInlayFontSizeDelta() == settingsComponent.getInlayFontSizeDelta() &&
@@ -89,6 +90,7 @@ public boolean isModified() {
8990

9091
state.getProblemFilterList().equals(settingsComponent.getProblemFilterList()) &&
9192
state.getFileExtensionBlacklist().equals(settingsComponent.getFileExtensionBlacklist()) &&
93+
state.getMaxFileLines() == settingsComponent.getMaxFileLines() &&
9294

9395
state.getAdditionalInfoSeveritiesAsString().equals(settingsComponent.getAdditionalInfoSeverities()) &&
9496
state.getAdditionalWarningSeveritiesAsString().equals(settingsComponent.getAdditionalWarningSeverities()) &&
@@ -106,6 +108,7 @@ public void apply() {
106108
boolean listenerChanged = state.getEnabledListener() != settingsComponent.getEnabledListener();
107109
boolean fileExtensionBlacklistChanged = !Objects.equals(state.getFileExtensionBlacklist(), settingsComponent.getFileExtensionBlacklist());
108110
boolean manualScannerDelayChanged = state.getManualScannerDelay() != settingsComponent.getManualScannerDelay();
111+
boolean maxFileLinesChanged = state.getMaxFileLines() != settingsComponent.getMaxFileLines();
109112

110113
state.setShowErrors(settingsComponent.isShowErrors());
111114
state.setHighlightErrors(settingsComponent.isHighlightErrors());
@@ -143,6 +146,7 @@ public void apply() {
143146
state.setRoundedCornerBoxes(settingsComponent.isRoundedCornerBoxes());
144147
state.setUseEditorFont(settingsComponent.isUseEditorFont());
145148
state.setShowOnlyHighestSeverityPerLine(settingsComponent.isShowOnlyHighestSeverityPerLine());
149+
state.setMaxProblemsPerLine(settingsComponent.getMaxProblemsPerLine());
146150
state.setEnableHtmlStripping(settingsComponent.isEnableHtmlStripping());
147151
state.setEnableXmlUnescaping(settingsComponent.isEnableXmlUnescaping());
148152
state.setInlayFontSizeDelta(settingsComponent.getInlayFontSizeDelta());
@@ -155,6 +159,7 @@ public void apply() {
155159
state.setManualScannerDelay(settingsComponent.getManualScannerDelay());
156160
state.setProblemFilterList(settingsComponent.getProblemFilterList());
157161
state.setFileExtensionBlacklist(settingsComponent.getFileExtensionBlacklist());
162+
state.setMaxFileLines(settingsComponent.getMaxFileLines());
158163

159164
state.setAdditionalInfoSeverities(settingsComponent.getAdditionalInfoSeveritiesList());
160165
state.setAdditionalWarningSeverities(settingsComponent.getAdditionalWarningSeveritiesList());
@@ -167,8 +172,8 @@ public void apply() {
167172

168173
listenerManager.resetAndRescan();
169174

170-
// When the blacklist changes we need to re-apply all MarkupModelProblemListeners
171-
if (fileExtensionBlacklistChanged && state.getEnabledListener() == Listener.MARKUP_MODEL_LISTENER) {
175+
// When the blacklist or maxFileLines changes we need to re-apply all MarkupModelProblemListeners
176+
if ((fileExtensionBlacklistChanged || maxFileLinesChanged) && state.getEnabledListener() == Listener.MARKUP_MODEL_LISTENER) {
172177
listenerManager.resetMarkupModelProblemListeners();
173178
}
174179

@@ -217,6 +222,7 @@ public void reset() {
217222
settingsComponent.setRoundedCornerBoxes(state.isRoundedCornerBoxes());
218223
settingsComponent.setUseEditorFont(state.isUseEditorFont());
219224
settingsComponent.setShowOnlyHighestSeverityPerLine(state.isShowOnlyHighestSeverityPerLine());
225+
settingsComponent.setMaxProblemsPerLine(state.getMaxProblemsPerLine());
220226
settingsComponent.setEnableHtmlStripping(state.isEnableHtmlStripping());
221227
settingsComponent.setEnableXmlUnescaping(state.isEnableXmlUnescaping());
222228
settingsComponent.setInlayFontSizeDelta(state.getInlayFontSizeDelta());

src/main/java/org/overengineer/inlineproblems/settings/SettingsState.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ public class SettingsState implements PersistentStateComponent<SettingsState> {
100100
private int enabledListener = Listener.MARKUP_MODEL_LISTENER;
101101
private String problemFilterList = "todo;fixme;open in browser";
102102
private String fileExtensionBlacklist = "";
103+
private int maxFileLines = 0;
103104

104105
private List<Integer> additionalErrorSeverities = new ArrayList<>();
105106
private List<Integer> additionalWarningSeverities = new ArrayList<>();
@@ -109,6 +110,7 @@ public class SettingsState implements PersistentStateComponent<SettingsState> {
109110
private boolean showOnlyHighestSeverityPerLine = false;
110111
private boolean enableHtmlStripping = true;
111112
private boolean enableXmlUnescaping = true;
113+
private int maxProblemsPerLine = 20;
112114

113115
// migration booleans
114116
private boolean highlightProblemListenerDeprecateMigrationDone = false;

0 commit comments

Comments
 (0)