Skip to content

Commit a49079c

Browse files
committed
Bonus: Remove reflection in CitationKeyPattern
1 parent 72bae6c commit a49079c

File tree

1 file changed

+72
-78
lines changed

1 file changed

+72
-78
lines changed

jablib/src/main/java/org/jabref/logic/citationkeypattern/CitationKeyPattern.java

Lines changed: 72 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package org.jabref.logic.citationkeypattern;
22

3-
import java.lang.reflect.Modifier;
4-
import java.util.Arrays;
3+
import java.util.ArrayList;
54
import java.util.List;
6-
import java.util.stream.Collectors;
5+
import java.util.stream.Stream;
76

87
public record CitationKeyPattern(String stringRepresentation, Category category) {
98
public enum Category {
@@ -12,91 +11,86 @@ public enum Category {
1211

1312
public static final CitationKeyPattern NULL_CITATION_KEY_PATTERN = new CitationKeyPattern("", Category.OTHER_FIELDS);
1413

15-
// region - Author-related field markers
16-
public static final CitationKeyPattern AUTHOR_YEAR = new CitationKeyPattern("[auth_year]", Category.AUTHOR_RELATED);
17-
public static final CitationKeyPattern AUTHOR_FIRST_FULL = new CitationKeyPattern("[authFirstFull]", Category.AUTHOR_RELATED);
18-
public static final CitationKeyPattern AUTHOR_FORE_INI = new CitationKeyPattern("[authForeIni]", Category.AUTHOR_RELATED);
19-
public static final CitationKeyPattern AUTHOR_ETAL = new CitationKeyPattern("[auth.etal]", Category.AUTHOR_RELATED);
20-
public static final CitationKeyPattern AUTHOR_ET_AL = new CitationKeyPattern("[authEtAl]", Category.AUTHOR_RELATED);
21-
public static final CitationKeyPattern AUTHOR_AUTH_EA = new CitationKeyPattern("[auth.auth.ea]", Category.AUTHOR_RELATED);
22-
public static final CitationKeyPattern AUTHORS = new CitationKeyPattern("[authors]", Category.AUTHOR_RELATED);
23-
public static final CitationKeyPattern AUTHORS_N = new CitationKeyPattern("[authorsN]", Category.AUTHOR_RELATED);
24-
public static final CitationKeyPattern AUTH_INI_N = new CitationKeyPattern("[authIniN]", Category.AUTHOR_RELATED);
25-
public static final CitationKeyPattern AUTH_N = new CitationKeyPattern("[authN]", Category.AUTHOR_RELATED);
26-
public static final CitationKeyPattern AUTH_N_M = new CitationKeyPattern("[authN_M]", Category.AUTHOR_RELATED);
27-
public static final CitationKeyPattern AUTHOR_INI = new CitationKeyPattern("[authorIni]", Category.AUTHOR_RELATED);
28-
public static final CitationKeyPattern AUTH_SHORT = new CitationKeyPattern("[authshort]", Category.AUTHOR_RELATED);
29-
public static final CitationKeyPattern AUTHORS_ALPHA = new CitationKeyPattern("[authorsAlpha]", Category.AUTHOR_RELATED);
30-
public static final CitationKeyPattern AUTHORS_ALPHA_LNI = new CitationKeyPattern("[authorsAlphaLNI]", Category.AUTHOR_RELATED);
31-
public static final CitationKeyPattern AUTHORS_LAST = new CitationKeyPattern("[authorsLast]", Category.AUTHOR_RELATED);
32-
public static final CitationKeyPattern AUTHORS_LAST_FORE_INI = new CitationKeyPattern("[authorsLastForeIni]", Category.AUTHOR_RELATED);
33-
// endregion
14+
private static final List<CitationKeyPattern> AUTHOR_PATTERNS =
15+
Stream.of("[auth_year]",
16+
"[authFirstFull]",
17+
"[authForeIni]",
18+
"[auth.etal]",
19+
"[authEtAl]",
20+
"[auth.auth.ea]",
21+
"[authors]",
22+
"[authorsN]",
23+
"[authIniN]",
24+
"[authN]",
25+
"[authN_M]",
26+
"[authorIni]",
27+
"[authshort]",
28+
"[authorsAlpha]",
29+
"[authorsAlphaLNI]",
30+
"[authorsLast]",
31+
"[authorsLastForeIni]")
32+
.map(pattern -> new CitationKeyPattern(pattern, Category.AUTHOR_RELATED))
33+
.toList();
3434

35-
// region - Editor-related field markers
36-
public static final CitationKeyPattern EDTR = new CitationKeyPattern("[edtr]", Category.EDITOR_RELATED);
37-
public static final CitationKeyPattern EDTR_INI_N = new CitationKeyPattern("[edtrIniN]", Category.EDITOR_RELATED);
38-
public static final CitationKeyPattern EDITORS = new CitationKeyPattern("[editors]", Category.EDITOR_RELATED);
39-
public static final CitationKeyPattern EDITOR_LAST = new CitationKeyPattern("[editorLast]", Category.EDITOR_RELATED);
40-
public static final CitationKeyPattern EDITOR_INI = new CitationKeyPattern("[editorIni]", Category.EDITOR_RELATED);
41-
public static final CitationKeyPattern EDTR_N = new CitationKeyPattern("[edtrN]", Category.EDITOR_RELATED);
42-
public static final CitationKeyPattern EDTR_N_M = new CitationKeyPattern("[edtrN_M]", Category.EDITOR_RELATED);
43-
public static final CitationKeyPattern EDTR_EDTR_EA = new CitationKeyPattern("[edtr.edtr.ea]", Category.EDITOR_RELATED);
44-
public static final CitationKeyPattern EDTRSHORT = new CitationKeyPattern("[edtrshort]", Category.EDITOR_RELATED);
45-
public static final CitationKeyPattern EDTR_FORE_INI = new CitationKeyPattern("[edtrForeIni]", Category.EDITOR_RELATED);
46-
public static final CitationKeyPattern EDITOR_LAST_FORE_INI = new CitationKeyPattern("[editorLastForeIni]", Category.EDITOR_RELATED);
47-
// endregion
35+
private static final List<CitationKeyPattern> EDITOR_PATTERNS =
36+
Stream.of("[edtr]",
37+
"[edtrIniN]",
38+
"[editors]",
39+
"[editorLast]",
40+
"[editorIni]",
41+
"[edtrN]",
42+
"[edtrN_M]",
43+
"[edtr.edtr.ea]",
44+
"[edtrshort]",
45+
"[edtrForeIni]",
46+
"[editorLastForeIni]")
47+
.map(pattern -> new CitationKeyPattern(pattern, Category.EDITOR_RELATED))
48+
.toList();
4849

49-
// region - Title-related field markers
50-
public static final CitationKeyPattern SHORTTITLE = new CitationKeyPattern("[shorttitle]", Category.TITLE_RELATED);
51-
public static final CitationKeyPattern SHORTTITLE_INI = new CitationKeyPattern("[shorttitleINI]", Category.TITLE_RELATED);
52-
public static final CitationKeyPattern VERYSHORTTITLE = new CitationKeyPattern("[veryshorttitle]", Category.TITLE_RELATED);
53-
public static final CitationKeyPattern CAMEL = new CitationKeyPattern("[camel]", Category.TITLE_RELATED);
54-
public static final CitationKeyPattern CAMEL_N = new CitationKeyPattern("[camelN]", Category.TITLE_RELATED);
55-
public static final CitationKeyPattern TITLE = new CitationKeyPattern("[title]", Category.TITLE_RELATED);
56-
public static final CitationKeyPattern FULLTITLE = new CitationKeyPattern("[fulltitle]", Category.TITLE_RELATED);
57-
// endregion
50+
private static final List<CitationKeyPattern> TITLE_PATTERNS =
51+
Stream.of("[shorttitle]",
52+
"[shorttitleINI]",
53+
"[veryshorttitle]",
54+
"[camel]",
55+
"[camelN]",
56+
"[title]",
57+
"[fulltitle]")
58+
.map(pattern -> new CitationKeyPattern(pattern, Category.TITLE_RELATED))
59+
.toList();
5860

59-
// region - Other field markers
60-
public static final CitationKeyPattern ENTRYTYPE = new CitationKeyPattern("[entrytype]", Category.OTHER_FIELDS);
61-
public static final CitationKeyPattern FIRSTPAGE = new CitationKeyPattern("[firstpage]", Category.OTHER_FIELDS);
62-
public static final CitationKeyPattern PAGEPREFIX = new CitationKeyPattern("[pageprefix]", Category.OTHER_FIELDS);
63-
public static final CitationKeyPattern KEYWORD_N = new CitationKeyPattern("[keywordN]", Category.OTHER_FIELDS);
64-
public static final CitationKeyPattern KEYWORDS_N = new CitationKeyPattern("[keywordsN]", Category.OTHER_FIELDS);
65-
public static final CitationKeyPattern LASTPAGE = new CitationKeyPattern("[lastpage]", Category.OTHER_FIELDS);
66-
public static final CitationKeyPattern SHORTYEAR = new CitationKeyPattern("[shortyear]", Category.OTHER_FIELDS);
67-
// endregion
61+
private static final List<CitationKeyPattern> OTHER_FIELD_PATTERNS =
62+
Stream.of("[entrytype]",
63+
"[firstpage]",
64+
"[pageprefix]",
65+
"[keywordN]",
66+
"[keywordsN]",
67+
"[lastpage]",
68+
"[shortyear]")
69+
.map(pattern -> new CitationKeyPattern(pattern, Category.OTHER_FIELDS))
70+
.toList();
6871

69-
// region - Bibentry fields
70-
public static final CitationKeyPattern AUTHOR = new CitationKeyPattern("[AUTHOR]", Category.BIBENTRY_FIELDS);
71-
public static final CitationKeyPattern DATE = new CitationKeyPattern("[DATE]", Category.BIBENTRY_FIELDS);
72-
public static final CitationKeyPattern DAY = new CitationKeyPattern("[DAY]", Category.BIBENTRY_FIELDS);
73-
public static final CitationKeyPattern GROUPS = new CitationKeyPattern("[GROUPS]", Category.BIBENTRY_FIELDS);
74-
public static final CitationKeyPattern MONTH = new CitationKeyPattern("[MONTH]", Category.BIBENTRY_FIELDS);
75-
public static final CitationKeyPattern YEAR = new CitationKeyPattern("[YEAR]", Category.BIBENTRY_FIELDS);
76-
// endregion
72+
private static final List<CitationKeyPattern> BIBENTRY_FIELDS =
73+
Stream.of("[AUTHOR]",
74+
"[DATE]",
75+
"[DAY]",
76+
"[GROUPS]",
77+
"[MONTH]",
78+
"[YEAR]")
79+
.map(pattern -> new CitationKeyPattern(pattern, Category.BIBENTRY_FIELDS))
80+
.toList();
7781

7882
public CitationKeyPattern(String stringRepresentation) {
7983
this(stringRepresentation, Category.OTHER_FIELDS);
8084
}
8185

8286
public static List<CitationKeyPattern> getAllPatterns() {
83-
return Arrays.stream(CitationKeyPattern.class.getDeclaredFields())
84-
.filter(field -> {
85-
int modifiers = field.getModifiers();
86-
return Modifier.isPublic(modifiers) &&
87-
Modifier.isStatic(modifiers) &&
88-
Modifier.isFinal(modifiers) &&
89-
field.getType() == CitationKeyPattern.class &&
90-
!field.equals(CitationKeyPattern.NULL_CITATION_KEY_PATTERN);
91-
})
92-
.map(field -> {
93-
try {
94-
return (CitationKeyPattern) field.get(null);
95-
} catch (IllegalAccessException e) {
96-
throw new RuntimeException("Could not access field", e);
97-
}
98-
})
99-
.collect(Collectors.toList());
87+
List<CitationKeyPattern> result = new ArrayList<>();
88+
result.addAll(AUTHOR_PATTERNS);
89+
result.addAll(EDITOR_PATTERNS);
90+
result.addAll(TITLE_PATTERNS);
91+
result.addAll(OTHER_FIELD_PATTERNS);
92+
result.addAll(BIBENTRY_FIELDS);
93+
return result;
10094
}
10195

10296
public Category getCategory() {

0 commit comments

Comments
 (0)