Skip to content

Commit bd97374

Browse files
authored
Merge pull request #129 from SeeSharpSoft/fb_extended_separator_support
Fix separator & .psv file support
2 parents 619f486 + 97f7405 commit bd97374

23 files changed

+188
-48
lines changed

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

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

3+
import com.intellij.openapi.project.Project;
34
import com.intellij.openapi.util.Key;
4-
import com.intellij.psi.PsiFile;
5+
import com.intellij.openapi.vfs.VirtualFile;
56
import com.intellij.util.PathUtil;
6-
import org.jetbrains.annotations.NotNull;
77

88
import java.util.regex.Pattern;
99

@@ -12,13 +12,16 @@ public final class CsvStorageHelper {
1212

1313
public static final Key<String> RELATIVE_FILE_URL = Key.create("CSV_PLUGIN_RELATIVE_URL");
1414

15-
public static String getRelativeFileUrl(@NotNull PsiFile psiFile) {
16-
String url = psiFile.getUserData(RELATIVE_FILE_URL);
15+
public static String getRelativeFileUrl(Project project, VirtualFile virtualFile) {
16+
if (project == null || virtualFile == null) {
17+
return null;
18+
}
19+
String url = virtualFile.getUserData(RELATIVE_FILE_URL);
1720
if (url == null) {
18-
String projectDir = PathUtil.getLocalPath(psiFile.getProject().getBasePath());
19-
url = PathUtil.getLocalPath(psiFile.getOriginalFile().getVirtualFile().getPath())
21+
String projectDir = PathUtil.getLocalPath(project.getBasePath());
22+
url = PathUtil.getLocalPath(virtualFile.getPath())
2023
.replaceFirst("^" + Pattern.quote(projectDir), "");
21-
psiFile.putUserData(RELATIVE_FILE_URL, url);
24+
virtualFile.putUserData(RELATIVE_FILE_URL, url);
2225
}
2326
return url;
2427
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeSeparatorAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public boolean isSelected(@NotNull AnActionEvent anActionEvent) {
2828
return false;
2929
}
3030
CsvFileAttributes csvFileAttributes = ServiceManager.getService(psiFile.getProject(), CsvFileAttributes.class);
31-
return csvFileAttributes.getFileSeparator(psiFile) != null && CsvCodeStyleSettings.getCurrentSeparator(psiFile).equals(mySeparator);
31+
return csvFileAttributes.getFileSeparator(psiFile) != null && CsvCodeStyleSettings.getCurrentSeparator(anActionEvent.getProject(), psiFile).equals(mySeparator);
3232
}
3333

3434
@Override

src/main/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeSeparatorActionGroup.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ public void update(AnActionEvent anActionEvent) {
3434

3535
if (psiFile != null) {
3636
anActionEvent.getPresentation()
37-
.setText(String.format("CSV Value Separator: %s", CsvCodeStyleSettings.getSeparatorDisplayText(CsvCodeStyleSettings.getCurrentSeparator(psiFile))));
37+
.setText(String.format("CSV Value Separator: %s",
38+
CsvCodeStyleSettings.getSeparatorDisplayText(CsvCodeStyleSettings.getCurrentSeparator(anActionEvent.getProject(), psiFile)))
39+
);
3840
}
3941
}
4042

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

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.intellij.openapi.components.PersistentStateComponent;
44
import com.intellij.openapi.components.State;
55
import com.intellij.openapi.components.Storage;
6+
import com.intellij.openapi.project.Project;
7+
import com.intellij.openapi.vfs.VirtualFile;
68
import com.intellij.psi.PsiFile;
79
import com.intellij.util.xmlb.XmlSerializerUtil;
810
import net.seesharpsoft.intellij.plugins.csv.CsvStorageHelper;
@@ -37,27 +39,45 @@ public void loadState(@NotNull CsvFileAttributes state) {
3739
}
3840

3941
protected String generateMapKey(@NotNull PsiFile psiFile) {
40-
return CsvStorageHelper.getRelativeFileUrl(psiFile);
42+
return generateMapKey(psiFile.getProject(), psiFile.getOriginalFile().getVirtualFile());
43+
}
44+
45+
protected String generateMapKey(@NotNull Project project, @NotNull VirtualFile virtualFile) {
46+
return CsvStorageHelper.getRelativeFileUrl(project, virtualFile);
4147
}
4248

4349
public void setFileSeparator(@NotNull PsiFile psiFile, @NotNull String separator) {
44-
Attribute state = attributeMap.get(generateMapKey(psiFile));
50+
String key = generateMapKey(psiFile);
51+
if (key == null) {
52+
return;
53+
}
54+
Attribute state = attributeMap.get(key);
4555
if (state == null) {
4656
state = new Attribute();
47-
attributeMap.put(generateMapKey(psiFile), state);
57+
attributeMap.put(key, state);
4858
}
4959
state.separator = separator;
5060
}
5161

5262
public void removeFileSeparator(@NotNull PsiFile psiFile) {
53-
attributeMap.remove(generateMapKey(psiFile));
63+
String key = generateMapKey(psiFile);
64+
if (key != null) {
65+
attributeMap.remove(key);
66+
}
5467
}
5568

56-
public String getFileSeparator(@NotNull PsiFile psiFile) {
57-
Attribute state = attributeMap.get(generateMapKey(psiFile));
58-
if (state != null) {
59-
return state.separator;
69+
public String getFileSeparator(@NotNull Project project, @NotNull VirtualFile virtualFile) {
70+
String key = generateMapKey(project, virtualFile);
71+
if (key != null) {
72+
Attribute state = attributeMap.get(key);
73+
if (state != null) {
74+
return state.separator;
75+
}
6076
}
6177
return null;
6278
}
79+
80+
public String getFileSeparator(@NotNull PsiFile psiFile) {
81+
return getFileSeparator(psiFile.getProject(), psiFile.getOriginalFile().getVirtualFile());
82+
}
6383
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void annotate(@NotNull final PsiElement element, @NotNull final Annotatio
3939
return;
4040
}
4141

42-
CsvColumnInfo<PsiElement> columnInfo = csvFile.getMyColumnInfoMap().getColumnInfo(element);
42+
CsvColumnInfo<PsiElement> columnInfo = csvFile.getColumnInfoMap().getColumnInfo(element);
4343

4444
if (columnInfo != null) {
4545
PsiElement headerElement = columnInfo.getHeaderElement();
@@ -82,7 +82,7 @@ protected boolean handleSeparatorElement(@NotNull PsiElement element, @NotNull A
8282
if (elementType == CsvTypes.COMMA) {
8383
TextAttributes textAttributes = holder.getCurrentAnnotationSession().getUserData(TAB_SEPARATOR_HIGHLIGHT_COLOR_KEY);
8484
if (!Boolean.TRUE.equals(holder.getCurrentAnnotationSession().getUserData(TAB_SEPARATOR_HIGHLIGHT_COLOR_DETERMINED_KEY))) {
85-
String separator = CsvCodeStyleSettings.getCurrentSeparator(csvFile.getProject(), csvFile.getLanguage());
85+
String separator = CsvCodeStyleSettings.getCurrentSeparator(csvFile);
8686
if (CsvEditorSettingsExternalizable.getInstance().isHighlightTabSeparator() && separator.equals(CsvCodeStyleSettings.TAB_SEPARATOR)) {
8787
textAttributes = new TextAttributes(null,
8888
CsvEditorSettingsExternalizable.getInstance().getTabHighlightColor(),

src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableEditor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public boolean isEditable() {
101101

102102
public CsvColumnInfoMap<PsiElement> getColumnInfoMap() {
103103
CsvFile csvFile = getCsvFile();
104-
return csvFile == null ? null : csvFile.getMyColumnInfoMap();
104+
return csvFile == null ? null : csvFile.getColumnInfoMap();
105105
}
106106

107107
public boolean hasErrors() {
@@ -289,7 +289,7 @@ public CsvFile getCsvFile() {
289289
this.document = FileDocumentManager.getInstance().getDocument(this.file);
290290
PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project);
291291
this.psiFile = documentManager.getPsiFile(this.document);
292-
this.currentSeparator = CsvCodeStyleSettings.getCurrentSeparator(this.psiFile);
292+
this.currentSeparator = CsvCodeStyleSettings.getCurrentSeparator(this.getProject(), this.getFile());
293293
}
294294
return this.psiFile instanceof CsvFile ? (CsvFile) psiFile : null;
295295
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/table/swing/CsvTableEditorSwing.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ protected void updateUIComponents() {
338338
return;
339339
}
340340

341-
CsvColumnInfoMap<PsiElement> columnInfoMap = csvFile.getMyColumnInfoMap();
341+
CsvColumnInfoMap<PsiElement> columnInfoMap = csvFile.getColumnInfoMap();
342342
if (Objects.equals(lastColumnInfoMap, columnInfoMap)) {
343343
return;
344344
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/highlighter/CsvHighlightUsagesHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ protected void selectTargets(List<PsiElement> list, Consumer<List<PsiElement>> c
5252

5353
@Override
5454
public void computeUsages(List<PsiElement> list) {
55-
CsvColumnInfoMap<PsiElement> columnInfoMap = getCsvFile().getMyColumnInfoMap();
55+
CsvColumnInfoMap<PsiElement> columnInfoMap = getCsvFile().getColumnInfoMap();
5656
for (PsiElement listElement : list) {
57-
CsvColumnInfo<PsiElement> csvColumnInfo = getCsvFile().getMyColumnInfoMap().getColumnInfo(listElement);
57+
CsvColumnInfo<PsiElement> csvColumnInfo = getCsvFile().getColumnInfoMap().getColumnInfo(listElement);
5858
if (csvColumnInfo == null) {
5959
continue;
6060
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/highlighter/CsvSyntaxHighlighter.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package net.seesharpsoft.intellij.plugins.csv.highlighter;
22

3-
import com.intellij.lang.Language;
43
import com.intellij.lexer.Lexer;
54
import com.intellij.openapi.editor.DefaultLanguageHighlighterColors;
65
import com.intellij.openapi.editor.HighlighterColors;
76
import com.intellij.openapi.editor.colors.TextAttributesKey;
8-
import com.intellij.openapi.fileTypes.LanguageFileType;
97
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
108
import com.intellij.openapi.project.Project;
119
import com.intellij.openapi.vfs.VirtualFile;
@@ -38,19 +36,17 @@ public class CsvSyntaxHighlighter extends SyntaxHighlighterBase {
3836
private static final TextAttributesKey[] EMPTY_KEYS = new TextAttributesKey[0];
3937

4038
private Project myProject;
41-
private Language myLanguage;
39+
private VirtualFile myVirtualFile;
4240

4341
public CsvSyntaxHighlighter(Project project, VirtualFile virtualFile) {
4442
this.myProject = project;
45-
if (virtualFile != null && virtualFile.getFileType() instanceof LanguageFileType) {
46-
this.myLanguage = ((LanguageFileType)virtualFile.getFileType()).getLanguage();
47-
}
43+
this.myVirtualFile = virtualFile;
4844
}
4945

5046
@NotNull
5147
@Override
5248
public Lexer getHighlightingLexer() {
53-
return new CsvLexerAdapter(CsvCodeStyleSettings.getCurrentSeparator(this.myProject, this.myLanguage));
49+
return new CsvLexerAdapter(CsvCodeStyleSettings.getCurrentSeparator(this.myProject, this.myVirtualFile));
5450
}
5551

5652
@NotNull

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descri
148148
try {
149149
PsiElement element = descriptor.getPsiElement();
150150
Document document = PsiDocumentManager.getInstance(project).getDocument(element.getContainingFile());
151-
String separator = CsvCodeStyleSettings.getCurrentSeparator(element.getProject(), element.getContainingFile().getLanguage());
151+
String separator = CsvCodeStyleSettings.getCurrentSeparator(project, element.getContainingFile());
152152
String text = document.getText();
153153
document.setText(text.substring(0, element.getTextOffset()) + separator + text.substring(element.getTextOffset()));
154154
} catch (IncorrectOperationException e) {

0 commit comments

Comments
 (0)