Skip to content

Commit 8d1b8e1

Browse files
committed
Fix: Rework CSV file detection for FileEditorProvider
java.lang.NoSuchFieldException: INSTANCE #904
1 parent 6e76484 commit 8d1b8e1

File tree

4 files changed

+21
-27
lines changed

4 files changed

+21
-27
lines changed

src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvHelper.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.intellij.lang.*;
44
import com.intellij.lexer.Lexer;
5+
import com.intellij.openapi.fileTypes.FileType;
56
import com.intellij.openapi.fileTypes.FileTypeRegistry;
67
import com.intellij.openapi.project.Project;
78
import com.intellij.openapi.vfs.VirtualFile;
@@ -51,32 +52,21 @@ public static PsiElement createEmptyCsvField(PsiFile psiFile) {
5152
return node.getPsi();
5253
}
5354

54-
public static boolean isCsvFile(String extension) {
55-
if (extension == null) {
56-
return false;
57-
}
58-
Language language = LanguageUtil.getFileTypeLanguage(
59-
FileTypeRegistry.getInstance().getFileTypeByExtension(extension)
60-
);
55+
public static boolean isCsvFile(FileType fileType) {
56+
Language language = LanguageUtil.getFileTypeLanguage(fileType);
6157
return language != null && language.isKindOf(CsvLanguage.INSTANCE);
6258
}
6359

64-
public static boolean isCsvFile(Project project, VirtualFile file) {
65-
if (file == null) {
66-
return false;
67-
}
68-
if (project == null) {
69-
return isCsvFile(file.getExtension());
70-
}
71-
final Language language = LanguageUtil.getLanguageForPsi(project, file);
72-
return language != null && language.isKindOf(CsvLanguage.INSTANCE);
60+
public static boolean isCsvFile(String extension) {
61+
return extension != null && isCsvFile(FileTypeRegistry.getInstance().getFileTypeByExtension(extension));
62+
}
63+
64+
public static boolean isCsvFile(VirtualFile file) {
65+
return file != null && isCsvFile(file.getFileType());
7366
}
7467

7568
public static boolean isCsvFile(PsiFile file) {
76-
if (file == null) {
77-
return false;
78-
}
79-
return isCsvFile(file.getProject(), getVirtualFile(file));
69+
return file != null && isCsvFile(getVirtualFile(file));
8070
}
8171

8272
public static boolean isCommentElement(PsiElement element) {

src/main/java/net/seesharpsoft/intellij/plugins/csv/components/CsvFileAttributes.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ private synchronized Attribute getFileAttribute(@NotNull Project project, @NotNu
8383
Attribute attribute = attributeMap.get(key);
8484
if (attribute == null && createIfMissing) {
8585
attribute = new Attribute();
86-
if (!CsvHelper.isCsvFile(project, virtualFile)) {
86+
if (!CsvHelper.isCsvFile(virtualFile)) {
8787
LOG.error("CSV file attribute requested for non CSV file: " + virtualFile.toString());
8888
} else {
8989
attributeMap.put(key, attribute);
@@ -167,7 +167,7 @@ private CsvValueSeparator autoDetectSeparator(Project project, VirtualFile virtu
167167

168168
@NotNull
169169
public CsvValueSeparator getValueSeparator(Project project, VirtualFile virtualFile) {
170-
if (!CsvHelper.isCsvFile(project, virtualFile)) {
170+
if (!CsvHelper.isCsvFile(virtualFile)) {
171171
return CsvEditorSettings.getInstance().getDefaultValueSeparator();
172172
}
173173
FileType fileType = virtualFile.getFileType();
@@ -207,7 +207,7 @@ public void resetEscapeSeparator(@NotNull PsiFile psiFile) {
207207

208208
@NotNull
209209
public CsvEscapeCharacter getEscapeCharacter(Project project, VirtualFile virtualFile) {
210-
if (!CsvHelper.isCsvFile(project, virtualFile)) {
210+
if (!CsvHelper.isCsvFile(virtualFile)) {
211211
return CsvEditorSettings.getInstance().getDefaultEscapeCharacter();
212212
}
213213
FileType fileType = virtualFile.getFileType();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public static boolean acceptCsvFile(@NotNull Project project, @NotNull VirtualFi
2222
return !SingleRootFileViewProvider.isTooLargeForContentLoading(file)
2323
&& !SingleRootFileViewProvider.isTooLargeForIntelligence(file)
2424
&& !(file instanceof DiffViewerVirtualFile)
25-
&& CsvHelper.isCsvFile(project, file);
25+
&& CsvHelper.isCsvFile(file);
2626
} catch(Exception exc) {
2727
return false;
2828
}

src/main/resources/META-INF/plugin.xml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@
4949
<depends optional="true" config-file="withGithub.xml">org.jetbrains.plugins.github</depends>
5050

5151
<extensions defaultExtensionNs="com.intellij">
52-
<fileType name="CSV" language="csv" implementationClass="net.seesharpsoft.intellij.plugins.csv.CsvFileType" extensions="csv" fieldName="INSTANCE"/>
53-
<fileType name="TSV" language="csv" implementationClass="net.seesharpsoft.intellij.plugins.tsv.TsvFileType" extensions="tsv;tab" fieldName="INSTANCE"/>
54-
<fileType name="PSV" language="csv" implementationClass="net.seesharpsoft.intellij.plugins.psv.PsvFileType" extensions="psv" fieldName="INSTANCE"/>
52+
<fileType name="CSV" language="csv" implementationClass="net.seesharpsoft.intellij.plugins.csv.CsvFileType" extensions="csv"/>
53+
<fileType name="TSV" language="csv" implementationClass="net.seesharpsoft.intellij.plugins.tsv.TsvFileType" extensions="tsv;tab"/>
54+
<fileType name="PSV" language="csv" implementationClass="net.seesharpsoft.intellij.plugins.psv.PsvFileType" extensions="psv"/>
5555

5656
<lang.parserDefinition language="csv"
5757
implementationClass="net.seesharpsoft.intellij.plugins.csv.CsvParserDefinition"/>
@@ -60,6 +60,10 @@
6060
implementationClass="net.seesharpsoft.intellij.plugins.csv.highlighter.CsvSyntaxHighlighterFactory"/>
6161
<editorHighlighterProvider filetype="CSV"
6262
implementationClass="net.seesharpsoft.intellij.plugins.csv.highlighter.CsvEditorHighlighterProvider"/>
63+
<editorHighlighterProvider filetype="TSV"
64+
implementationClass="net.seesharpsoft.intellij.plugins.csv.highlighter.CsvEditorHighlighterProvider"/>
65+
<editorHighlighterProvider filetype="PSV"
66+
implementationClass="net.seesharpsoft.intellij.plugins.csv.highlighter.CsvEditorHighlighterProvider"/>
6367
<highlightUsagesHandlerFactory
6468
implementation="net.seesharpsoft.intellij.plugins.csv.highlighter.CsvHighlightUsagesHandlerFactory"/>
6569

0 commit comments

Comments
 (0)