Skip to content

Commit 60ba0f6

Browse files
authored
Merge pull request #360 from SeeSharpSoft/main
Release 3.0.1
2 parents f85276c + 78ae35b commit 60ba0f6

File tree

6 files changed

+30
-19
lines changed

6 files changed

+30
-19
lines changed

CHANGELOG

+7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
3.0.1
2+
Nov 11, 2022
3+
4+
FIX: cannot init component state (componentName=CsvFileAttributes) #359
5+
FIX: image in plugin description
6+
FIX: plugin update restart
7+
18
3.0.0
29
Nov 09, 2022
310

build.gradle

+12-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ var final EAP_BUILD = '223'
7373
var idea_version = System.getenv().getOrDefault('IDEA_VERSION', '2022.2.1')
7474
var build_version = idea_version == EAP_VERSION ? EAP_BUILD : idea_version.substring(2, 4) + idea_version.charAt(5) // extract e.g. '221' from '2022.1.1'
7575

76-
version '3.0.0-' + build_version
76+
version '3.0.1-' + build_version
7777

7878
apply plugin: 'org.jetbrains.intellij'
7979
intellij {
@@ -100,9 +100,20 @@ For this release, the plugin was reworked quite a bit, focusing on performance a
100100
101101
Some options were removed for simplification and consistency (e.g. 'Tabularize' formatting), while new features were added (e.g. comment support in table editor).
102102
103+
Due to incompatible code changes, file specific settings (value separator & escape character) are lost and might need to be set again accordingly.
104+
103105
Feedback is welcome!
104106
105107
PS: The previous versions are still available on the project page.
108+
109+
110+
Update 3.0.1
111+
112+
FIX: cannot init component state (componentName=CsvFileAttributes) #359
113+
FIX: image in plugin description
114+
FIX: plugin update restart
115+
116+
106117
</pre>"""
107118
}
108119
publishPlugin {

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.seesharpsoft.intellij.plugins.csv;
22

33
import com.intellij.util.xmlb.Converter;
4+
import com.intellij.xml.util.XmlStringUtil;
45

56
import java.util.Objects;
67
import java.util.regex.Pattern;
@@ -48,11 +49,11 @@ public static CsvEscapeCharacter create(String character) {
4849

4950
public static class CsvEscapeCharacterConverter extends Converter<CsvEscapeCharacter> {
5051
public CsvEscapeCharacter fromString(String value) {
51-
return CsvEscapeCharacter.create(value);
52+
return CsvEscapeCharacter.create(XmlStringUtil.unescapeIllegalXmlChars(value));
5253
}
5354

5455
public String toString(CsvEscapeCharacter value) {
55-
return value.getCharacter();
56+
return XmlStringUtil.escapeIllegalXmlChars(value.getCharacter());
5657
}
5758
}
5859

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import java.util.regex.Pattern;
1111

1212
public final class CsvStorageHelper {
13-
public static final String CSV_STATE_STORAGE_FILE = "csv-plugin.xml";
13+
public static final String CSV_STATE_STORAGE_FILE = "csv-editor.xml";
1414

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

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

+5-11
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import com.intellij.openapi.project.Project;
1212
import com.intellij.openapi.vfs.VirtualFile;
1313
import com.intellij.psi.PsiFile;
14-
import com.intellij.util.PathUtil;
1514
import com.intellij.util.xmlb.XmlSerializerUtil;
1615
import com.intellij.util.xmlb.annotations.OptionTag;
1716
import net.seesharpsoft.commons.collection.Pair;
@@ -22,16 +21,16 @@
2221
import org.jetbrains.annotations.Nullable;
2322

2423
import java.util.*;
24+
import java.util.concurrent.ConcurrentHashMap;
2525

2626
@State(
2727
name = "CsvFileAttributes",
2828
storages = {@Storage(CsvStorageHelper.CSV_STATE_STORAGE_FILE)}
2929
)
30-
@SuppressWarnings("all")
3130
public class CsvFileAttributes implements PersistentStateComponent<CsvFileAttributes> {
3231
private final static Logger LOG = Logger.getInstance(CsvFileAttributes.class);
3332

34-
public Map<String, Attribute> attributeMap = new HashMap<>();
33+
public Map<String, Attribute> attributeMap = new ConcurrentHashMap<>();
3534

3635
public static class Attribute {
3736
@OptionTag(converter = CsvValueSeparator.CsvValueSeparatorConverter.class)
@@ -58,7 +57,6 @@ public void loadState(@NotNull CsvFileAttributes state) {
5857

5958
public void cleanupAttributeMap(@NotNull Project project) {
6059
List<String> faultyFiles = new ArrayList<>();
61-
final String projectBasePath = PathUtil.getLocalPath(project.getBasePath());
6260
attributeMap.forEach((fileName, attribute) -> {
6361
if (!CsvStorageHelper.csvFileExists(project, fileName)) {
6462
LOG.debug(fileName + " not found or not CSV file");
@@ -72,21 +70,17 @@ public void reset() {
7270
attributeMap.clear();
7371
}
7472

75-
protected String generateMapKey(@NotNull PsiFile psiFile) {
76-
return generateMapKey(psiFile.getProject(), psiFile.getOriginalFile().getVirtualFile());
77-
}
78-
7973
protected String generateMapKey(@NotNull Project project, @NotNull VirtualFile virtualFile) {
8074
return CsvStorageHelper.getRelativeFilePath(project, virtualFile);
8175
}
8276

8377
@Nullable
84-
private Attribute getFileAttribute(@NotNull Project project, @NotNull VirtualFile virtualFile, boolean createIfMissing) {
78+
private synchronized Attribute getFileAttribute(@NotNull Project project, @NotNull VirtualFile virtualFile, boolean createIfMissing) {
8579
String key = generateMapKey(project, virtualFile);
8680
if (key == null) {
8781
return null;
8882
}
89-
Attribute attribute = key != null ? attributeMap.get(key) : null;
83+
Attribute attribute = attributeMap.get(key);
9084
if (attribute == null && createIfMissing) {
9185
attribute = new Attribute();
9286
if (!CsvHelper.isCsvFile(project, virtualFile)) {
@@ -144,7 +138,7 @@ private CsvValueSeparator autoDetectOrGetDefaultValueSeparator(Project project,
144138
private CsvValueSeparator autoDetectSeparator(Project project, VirtualFile virtualFile) {
145139
final Document document = FileDocumentManager.getInstance().getDocument(virtualFile);
146140
final String text = document == null ? "" : document.getText();
147-
final List<CsvValueSeparator> applicableValueSeparators = new ArrayList(Arrays.asList(CsvValueSeparator.values()));
141+
final List<CsvValueSeparator> applicableValueSeparators = new ArrayList<>(Arrays.asList(CsvValueSeparator.values()));
148142
final CsvValueSeparator defaultValueSeparator = CsvEditorSettings.getInstance().getDefaultValueSeparator();
149143
if (defaultValueSeparator.isCustom()) {
150144
applicableValueSeparators.add(defaultValueSeparator);

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
<idea-plugin require-restart="false">
1+
<idea-plugin require-restart="true">
22
<id>net.seesharpsoft.intellij.plugins.csv</id>
33
<name>CSV Editor</name>
44
<vendor url="https://github.com/SeeSharpSoft/intellij-csv-validator">
55
Martin Sommer
66
</vendor>
77

88
<description><![CDATA[
9-
109
<p>Plugin for editing CSV files with a rainbow colored text- & table-editor. It supports are syntax validation, customization, intentions and many more.</p><br>
11-
<img width="600" height="297" src="https://plugins.jetbrains.com/files/10037/screenshot_80656a25-da46-4f76-b5c1-a9e8263b8bf3.png" /><br><br>
10+
<img width="600" height="297" src="https://plugins.jetbrains.com/files/10037/screenshot_80656a25-da46-4f76-b5c1-a9e8263b8bf3" />
1211
<p><b>Features:</b><br>
1312
<ul>
1413
<li>support for CSV/TSV/PSV file extensions</li>
@@ -29,7 +28,6 @@
2928
<li>tab (&#8633;) separator highlighting</li>
3029
</ul>
3130
</p><br>
32-
3331
<p>
3432
<b>TSV/PSV file support:</b> <em>TSV/PSV files are recognized as such but treated as a variant of CSV files, the same syntax highlighting and code style settings are applied.</em>
3533
<br><br>

0 commit comments

Comments
 (0)