Skip to content

Commit c66754e

Browse files
committed
Chore: Simplify customizable language elements
1 parent d674ec3 commit c66754e

File tree

4 files changed

+72
-105
lines changed

4 files changed

+72
-105
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ public static String unquoteCsvValue(String content, CsvEscapeCharacter escapeCh
279279
if (trimmedContent.length() > 1 && trimmedContent.startsWith("\"") && trimmedContent.endsWith("\"")) {
280280
result = trimmedContent.substring(1, trimmedContent.length() - 1);
281281
if (escapeCharacter != null) {
282-
result = result.replaceAll("(?:" + escapeCharacter.getRegexPattern() + ")\"", "\"");
282+
result = result.replaceAll("(?:" + escapeCharacter.getStringPattern() + ")\"", "\"");
283283
}
284284
}
285285
return result;
@@ -299,7 +299,7 @@ public static String quoteCsvField(String content,
299299
}
300300
if (quotingEnforced || isQuotingRequired(content, valueSeparator)) {
301301
String result = content;
302-
result = result.replaceAll("\"", escapeCharacter.getRegexPattern() + "\"");
302+
result = result.replaceAll("\"", escapeCharacter.getStringPattern() + "\"");
303303
return "\"" + result + "\"";
304304
}
305305
return content;
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package net.seesharpsoft.intellij.plugins.csv.components;
2+
3+
import java.util.Objects;
4+
import java.util.regex.Pattern;
5+
6+
public class CsvCustomizableElement {
7+
private final String myCharacter;
8+
private final String myDisplay;
9+
private final Pattern myPattern;
10+
private final String myName;
11+
12+
protected static final String CUSTOM_NAME = "CUSTOM";
13+
protected static final String CUSTOM_DISPLAY = "Custom";
14+
15+
protected CsvCustomizableElement(String character, String display, String regexPattern, String name) {
16+
myCharacter = character;
17+
myDisplay = display;
18+
myPattern = Pattern.compile(regexPattern);
19+
myName = name;
20+
}
21+
22+
public String getCharacter() {
23+
return myCharacter;
24+
}
25+
26+
public String getDisplay() {
27+
return myDisplay;
28+
}
29+
30+
public Pattern getPattern() { return myPattern; }
31+
32+
public String getName() {
33+
return myName;
34+
}
35+
36+
public boolean isCustom() {
37+
return CUSTOM_NAME.equals(getName());
38+
}
39+
40+
@Override
41+
public int hashCode() {
42+
return Objects.hash(getCharacter(), isCustom());
43+
}
44+
45+
@Override
46+
public boolean equals(Object obj) {
47+
if (!(obj instanceof CsvCustomizableElement otherObj) || !obj.getClass().equals(this.getClass())) {
48+
return false;
49+
}
50+
return Objects.equals(otherObj.getCharacter(), this.getCharacter()) && Objects.equals(otherObj.isCustom(), this.isCustom());
51+
}
52+
53+
@Override
54+
public String toString() {
55+
return getDisplay();
56+
}
57+
}

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

Lines changed: 7 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,10 @@
44
import com.intellij.xml.util.XmlStringUtil;
55
import org.jetbrains.annotations.NotNull;
66

7-
import java.util.Objects;
87
import java.util.regex.Pattern;
98

10-
public class CsvEscapeCharacter {
11-
private final String myCharacter;
12-
private final String myDisplay;
13-
private final Pattern myPattern;
14-
private final String myRegexPattern;
15-
private final String myName;
16-
17-
private static final String CUSTOM_NAME = "CUSTOM";
18-
private static final String CUSTOM_DISPLAY = "Custom";
9+
public class CsvEscapeCharacter extends CsvCustomizableElement {
10+
private final String myStringPattern;
1911

2012
public static CsvEscapeCharacter QUOTE = new CsvEscapeCharacter("\"", "Double Quote (\")", "\"", "QUOTE");
2113
public static CsvEscapeCharacter BACKSLASH = new CsvEscapeCharacter("\\", "Backslash (\\)", "\\\\", "BACKSLASH");
@@ -63,52 +55,15 @@ public CsvEscapeCharacter(String myCharacter) {
6355
}
6456

6557
private CsvEscapeCharacter(String character, String display, String regexPattern, String name) {
66-
myCharacter = character;
67-
myDisplay = display;
68-
myRegexPattern = regexPattern;
69-
myPattern = Pattern.compile(Pattern.quote(myCharacter + "\""));
70-
myName = name;
71-
}
72-
73-
public String getCharacter() {
74-
return myCharacter;
75-
}
76-
77-
public String getDisplay() {
78-
return myDisplay;
79-
}
80-
81-
public String getRegexPattern() {
82-
return myRegexPattern;
58+
super(character, display, Pattern.quote(character + "\""), name);
59+
myStringPattern = regexPattern;
8360
}
8461

8562
public boolean isEscapedQuote(String text) {
86-
return myPattern.matcher(text).matches();
87-
}
88-
89-
public String getName() {
90-
return myName;
91-
}
92-
93-
public boolean isCustom() {
94-
return CUSTOM_NAME.equals(getName());
95-
}
96-
97-
@Override
98-
public int hashCode() {
99-
return Objects.hash(getCharacter(), isCustom());
100-
}
101-
102-
@Override
103-
public boolean equals(Object obj) {
104-
if (!(obj instanceof CsvEscapeCharacter otherObj)) {
105-
return false;
106-
}
107-
return Objects.equals(otherObj.getCharacter(), this.getCharacter()) && Objects.equals(otherObj.isCustom(), this.isCustom());
63+
return getPattern().matcher(text).matches();
10864
}
10965

110-
@Override
111-
public String toString() {
112-
return getDisplay();
66+
public String getStringPattern() {
67+
return myStringPattern;
11368
}
11469
}

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

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

33
import com.intellij.util.xmlb.Converter;
44
import com.intellij.xml.util.XmlStringUtil;
5+
import org.jetbrains.annotations.NotNull;
56

6-
import java.util.Objects;
77
import java.util.regex.Pattern;
88

9-
public class CsvValueSeparator {
10-
private final String myCharacter;
11-
private final String myDisplay;
12-
private final Pattern myPattern;
13-
private final String myName;
9+
public class CsvValueSeparator extends CsvCustomizableElement {
1410
private final boolean myRequiresCustomLexer;
1511

16-
private static final String CUSTOM_NAME = "CUSTOM";
17-
private static final String CUSTOM_DISPLAY = "Custom";
18-
1912
public static final CsvValueSeparator COMMA = new CsvValueSeparator(",", "Comma (,)", "COMMA");
2013
public static final CsvValueSeparator SEMICOLON = new CsvValueSeparator(";", "Semicolon (;)", "SEMICOLON");
2114
public static final CsvValueSeparator PIPE = new CsvValueSeparator("|", "Pipe (|)", "PIPE");
@@ -64,7 +57,7 @@ public static CsvValueSeparator[] values() {
6457
}
6558

6659
public static class CsvValueSeparatorConverter extends Converter<CsvValueSeparator> {
67-
public CsvValueSeparator fromString(String value) {
60+
public CsvValueSeparator fromString(@NotNull String value) {
6861
return CsvValueSeparator.create(XmlStringUtil.unescapeIllegalXmlChars(value));
6962
}
7063

@@ -82,57 +75,19 @@ private CsvValueSeparator(String character, String display, String name) {
8275
}
8376

8477
private CsvValueSeparator(String character, String display, String name, boolean requiresCustomLexer) {
85-
myCharacter = character;
86-
myDisplay = display;
87-
myPattern = Pattern.compile(Pattern.quote(myCharacter));
88-
myName = name;
78+
super(character, display, Pattern.quote(character), name);
8979
myRequiresCustomLexer = requiresCustomLexer;
9080
}
9181

92-
public String getCharacter() {
93-
return myCharacter;
94-
}
95-
96-
public String getDisplay() {
97-
return myDisplay;
98-
}
99-
10082
public boolean isValueSeparator(String text) {
101-
return myPattern.matcher(text).matches();
83+
return getPattern().matcher(text).matches();
10284
}
10385

10486
public boolean isValueSeparator(char c) {
105-
return myCharacter.charAt(0) == c;
106-
}
107-
108-
public String getName() {
109-
return myName;
110-
}
111-
112-
public boolean isCustom() {
113-
return CUSTOM_NAME.equals(getName());
87+
return getCharacter().charAt(0) == c;
11488
}
11589

11690
public boolean requiresCustomLexer() {
11791
return myRequiresCustomLexer || isCustom();
11892
}
119-
120-
@Override
121-
public int hashCode() {
122-
return Objects.hash(getCharacter(), isCustom());
123-
}
124-
125-
@Override
126-
public boolean equals(Object obj) {
127-
if (obj == null || !(obj instanceof CsvValueSeparator)) {
128-
return false;
129-
}
130-
CsvValueSeparator otherObj = (CsvValueSeparator) obj;
131-
return Objects.equals(otherObj.getCharacter(), this.getCharacter()) && Objects.equals(otherObj.isCustom(), this.isCustom());
132-
}
133-
134-
@Override
135-
public String toString() {
136-
return getDisplay();
137-
}
13893
}

0 commit comments

Comments
 (0)