Skip to content

Commit e2dae44

Browse files
authored
Merge pull request #972 from SeeSharpSoft/copilot/fix-invalid-psi-element
Guard against invalid PSI elements in annotator, intentions, and inspection fixes
2 parents 9d3d3ad + 72ed1d3 commit e2dae44

7 files changed

Lines changed: 31 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010

1111
### Fixed
1212

13+
## 4.2.1 - Mar 29, 2026
14+
15+
### Fixed
16+
17+
- PluginException: Invalid PSI Element CsvFile when file is invalidated during annotation, intention actions, or inspection fixes
18+
1319
## 4.2.0 - Jan 26, 2026
1420

1521
### Fixed

gradlew

100644100755
File mode changed.

src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvAnnotator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ public void annotate(@NotNull final PsiElement element, @NotNull final Annotatio
3636
}
3737

3838
CsvFile csvFile = (CsvFile) element.getContainingFile();
39+
if (!csvFile.isValid()) {
40+
return;
41+
}
3942
if (handleSeparatorElement(element, holder, elementType, csvFile)) {
4043
return;
4144
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/inspection/CsvValidationInspection.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ public String getFamilyName() {
120120
@Override
121121
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
122122
PsiElement element = descriptor.getPsiElement();
123+
if (element == null || !element.isValid()) return;
123124
Document document = PsiDocumentManager.getInstance(project).getDocument(element.getContainingFile());
124125
if (document == null) return;
125126

@@ -147,6 +148,7 @@ public String getFamilyName() {
147148
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
148149
try {
149150
PsiElement element = descriptor.getPsiElement();
151+
if (element == null || !element.isValid()) return;
150152
Document document = PsiDocumentManager.getInstance(project).getDocument(element.getContainingFile());
151153
if (document == null) return;
152154

@@ -168,6 +170,7 @@ public String getFamilyName() {
168170
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
169171
try {
170172
PsiElement element = descriptor.getPsiElement();
173+
if (element == null || !element.isValid()) return;
171174
Document document = PsiDocumentManager.getInstance(project).getDocument(element.getContainingFile());
172175
if (document == null) return;
173176

src/main/java/net/seesharpsoft/intellij/plugins/csv/intention/CsvIntentionAction.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public String getFamilyName() {
2626
public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
2727
final PsiFile containingFile = element == null ? null : element.getContainingFile();
2828
return containingFile != null
29+
&& containingFile.isValid()
2930
&& containingFile.getLanguage().isKindOf(CsvLanguage.INSTANCE)
3031
&& PsiDocumentManager.getInstance(project).getDocument(containingFile) != null;
3132
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/intention/CsvShiftColumnLeftIntentionAction.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.intellij.openapi.editor.Editor;
44
import com.intellij.openapi.project.Project;
55
import com.intellij.psi.PsiElement;
6+
import com.intellij.psi.PsiFile;
67
import com.intellij.util.IncorrectOperationException;
78
import net.seesharpsoft.intellij.plugins.csv.CsvColumnInfo;
89
import net.seesharpsoft.intellij.plugins.csv.CsvColumnInfoMap;
@@ -18,7 +19,14 @@ public CsvShiftColumnLeftIntentionAction() {
1819

1920
@Override
2021
public void invoke(@NotNull Project project, Editor editor, @NotNull final PsiElement psiElement) throws IncorrectOperationException {
21-
CsvFile csvFile = (CsvFile) psiElement.getContainingFile();
22+
PsiFile containingFile = psiElement.getContainingFile();
23+
if (!(containingFile instanceof CsvFile)) {
24+
return;
25+
}
26+
CsvFile csvFile = (CsvFile) containingFile;
27+
if (!csvFile.isValid()) {
28+
return;
29+
}
2230

2331
PsiElement element = CsvHelper.getParentFieldElement(psiElement);
2432

src/main/java/net/seesharpsoft/intellij/plugins/csv/intention/CsvShiftColumnRightIntentionAction.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.intellij.openapi.editor.Editor;
44
import com.intellij.openapi.project.Project;
55
import com.intellij.psi.PsiElement;
6+
import com.intellij.psi.PsiFile;
67
import com.intellij.util.IncorrectOperationException;
78
import net.seesharpsoft.intellij.plugins.csv.CsvColumnInfo;
89
import net.seesharpsoft.intellij.plugins.csv.CsvColumnInfoMap;
@@ -19,7 +20,14 @@ public CsvShiftColumnRightIntentionAction() {
1920
@Override
2021
public void invoke(@NotNull Project project, Editor editor, @NotNull PsiElement psiElement)
2122
throws IncorrectOperationException {
22-
CsvFile csvFile = (CsvFile) psiElement.getContainingFile();
23+
PsiFile containingFile = psiElement.getContainingFile();
24+
if (!(containingFile instanceof CsvFile)) {
25+
return;
26+
}
27+
CsvFile csvFile = (CsvFile) containingFile;
28+
if (!csvFile.isValid()) {
29+
return;
30+
}
2331

2432
PsiElement element = CsvHelper.getParentFieldElement(psiElement);
2533

0 commit comments

Comments
 (0)