From 91f402b10f877f06400f1a14f76b3ecad6c6c20f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 29 Mar 2026 19:40:23 +0000 Subject: [PATCH 01/10] Initial plan From 7a39ed196387cf71294d7b34ccbec96f618f87df Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 29 Mar 2026 19:52:39 +0000 Subject: [PATCH 02/10] Refactor Pattern.compile from methods to static fields Agent-Logs-Url: https://github.com/InAnYan/jabref/sessions/0740bebe-7c6a-4991-95f8-a8d901ba8a69 Co-authored-by: InAnYan <13097618+InAnYan@users.noreply.github.com> --- .../gui/maintable/ExtractReferencesAction.java | 4 ++-- .../preview/PreviewTabViewModel.java | 11 +++++------ .../ai/chatting/FollowUpQuestionGenerator.java | 4 ++-- .../logic/importer/fileformat/CoinsParser.java | 18 +++++++++--------- .../jabref/logic/integrity/PagesChecker.java | 7 +++++-- .../org/jabref/logic/msbib/MSBibEntry.java | 2 +- .../oocsltext/CSLCitationOOAdapter.java | 4 ++-- .../openoffice/oocsltext/CSLFormatUtils.java | 5 ++--- .../oocsltext/CSLReferenceMarkManager.java | 4 ++-- .../jabref/logic/util/strings/StringUtil.java | 6 +++--- .../entry/identifier/ArXivIdentifier.java | 4 ++-- .../model/entry/identifier/IacrEprint.java | 3 ++- .../definition/MarkdownDefinitionProvider.java | 7 +++++-- 13 files changed, 42 insertions(+), 37 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/maintable/ExtractReferencesAction.java b/jabgui/src/main/java/org/jabref/gui/maintable/ExtractReferencesAction.java index 75c18152ed0..50d25232f56 100644 --- a/jabgui/src/main/java/org/jabref/gui/maintable/ExtractReferencesAction.java +++ b/jabgui/src/main/java/org/jabref/gui/maintable/ExtractReferencesAction.java @@ -39,6 +39,7 @@ /// /// The mode is selected by the preferences whether to use Grobid or not. public class ExtractReferencesAction extends SimpleCommand { + private static final Pattern COMMENT_NUMBER_PATTERN = Pattern.compile("^\\[(\\d+)\\]"); private final int FILES_LIMIT = 10; private final DialogService dialogService; @@ -182,8 +183,7 @@ private static String getCites(List entries, BibEntry currentEntry) { String newCitationKey; // Could happen if no author and no year is present // We use the number of the comment field (because there is no other way to get the number reliable) - Pattern pattern = Pattern.compile("^\\[(\\d+)\\]"); - Matcher matcher = pattern.matcher(importedEntry.getField(StandardField.COMMENT).orElse("")); + Matcher matcher = COMMENT_NUMBER_PATTERN.matcher(importedEntry.getField(StandardField.COMMENT).orElse("")); if (matcher.hasMatch()) { newCitationKey = sourceCitationKey + "-" + matcher.group(1); } else { diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/preview/PreviewTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/preferences/preview/PreviewTabViewModel.java index 7ed767d8653..62744721a39 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/preview/PreviewTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/preview/PreviewTabViewModel.java @@ -62,6 +62,9 @@ public class PreviewTabViewModel implements PreferenceTabViewModel { private static final Logger LOGGER = LoggerFactory.getLogger(PreviewTabViewModel.class); + private static final Pattern XML_TAG_PATTERN = Pattern.compile("(?(]*)(\\h*/?>))" + + "|(?)"); + private static final Pattern XML_ATTRIBUTES_PATTERN = Pattern.compile("(\\w+\\h*)(=)(\\h*\"[^\"]+\")"); private final BooleanProperty showAsExtraTabProperty = new SimpleBooleanProperty(false); private final BooleanProperty showPreviewInEntryTableTooltip = new SimpleBooleanProperty(false); @@ -330,10 +333,6 @@ public void resetDefaultLayout() { /// @param text to parse and highlight /// @return highlighted span for codeArea public StyleSpans> computeHighlighting(String text) { - final Pattern XML_TAG = Pattern.compile("(?(]*)(\\h*/?>))" - + "|(?)"); - final Pattern ATTRIBUTES = Pattern.compile("(\\w+\\h*)(=)(\\h*\"[^\"]+\")"); - final int GROUP_OPEN_BRACKET = 2; final int GROUP_ELEMENT_NAME = 3; final int GROUP_ATTRIBUTES_SECTION = 4; @@ -342,7 +341,7 @@ public StyleSpans> computeHighlighting(String text) { final int GROUP_EQUAL_SYMBOL = 2; final int GROUP_ATTRIBUTE_VALUE = 3; - Matcher matcher = XML_TAG.matcher(text); + Matcher matcher = XML_TAG_PATTERN.matcher(text); int lastKeywordEnd = 0; StyleSpansBuilder> spansBuilder = new StyleSpansBuilder<>(); while (matcher.find()) { @@ -359,7 +358,7 @@ public StyleSpans> computeHighlighting(String text) { if (!attributesText.isEmpty()) { lastKeywordEnd = 0; - Matcher attributesMatcher = ATTRIBUTES.matcher(attributesText); + Matcher attributesMatcher = XML_ATTRIBUTES_PATTERN.matcher(attributesText); while (attributesMatcher.find()) { spansBuilder.add(List.of(), attributesMatcher.start() - lastKeywordEnd); spansBuilder.add(Set.of("attribute"), attributesMatcher.end(GROUP_ATTRIBUTE_NAME) - attributesMatcher.start(GROUP_ATTRIBUTE_NAME)); diff --git a/jablib/src/main/java/org/jabref/logic/ai/chatting/FollowUpQuestionGenerator.java b/jablib/src/main/java/org/jabref/logic/ai/chatting/FollowUpQuestionGenerator.java index 3ed8d70ed07..5f119a962b2 100644 --- a/jablib/src/main/java/org/jabref/logic/ai/chatting/FollowUpQuestionGenerator.java +++ b/jablib/src/main/java/org/jabref/logic/ai/chatting/FollowUpQuestionGenerator.java @@ -18,6 +18,7 @@ public class FollowUpQuestionGenerator { private static final Logger LOGGER = LoggerFactory.getLogger(FollowUpQuestionGenerator.class); private static final int MIN_QUESTION_LENGTH = 5; private static final int MAX_QUESTION_LENGTH = 100; + private static final Pattern NUMBERED_PATTERN = Pattern.compile("^\\s*\\d+\\.\\s*(.+)$", Pattern.MULTILINE); private final ChatModel chatLanguageModel; private final AiTemplatesService aiTemplatesService; @@ -58,8 +59,7 @@ private String buildPrompt(String userMessage, String aiResponse) { private List parseQuestions(String response) { List questions = new ArrayList<>(); - Pattern numberedPattern = Pattern.compile("^\\s*\\d+\\.\\s*(.+)$", Pattern.MULTILINE); - Matcher matcher = numberedPattern.matcher(response); + Matcher matcher = NUMBERED_PATTERN.matcher(response); while (matcher.find() && questions.size() < aiPreferences.getFollowUpQuestionsCount()) { String question = matcher.group(1).trim(); diff --git a/jablib/src/main/java/org/jabref/logic/importer/fileformat/CoinsParser.java b/jablib/src/main/java/org/jabref/logic/importer/fileformat/CoinsParser.java index 246a125feb2..0fad0f12609 100644 --- a/jablib/src/main/java/org/jabref/logic/importer/fileformat/CoinsParser.java +++ b/jablib/src/main/java/org/jabref/logic/importer/fileformat/CoinsParser.java @@ -20,15 +20,15 @@ /// implemented by reverse-engineering the implementation by CiteSeerX public class CoinsParser implements Parser { - private final Pattern DOI = Pattern.compile("%3Fdoi%3D([^&]+)"); - private final Pattern TITLE = Pattern.compile("&rft.atitle=([^&]+)"); - private final Pattern JOURNAL = Pattern.compile("&rft.jtitle=([^&]+)"); - private final Pattern YEAR = Pattern.compile("&rft.date=([^&]+)"); - private final Pattern VOLUME = Pattern.compile("&rft.volume=([^&]+)"); - private final Pattern PAGES = Pattern.compile("&rft.pages=([^&]+)"); - private final Pattern ISSUE = Pattern.compile("&rft.issue=([^&]+)"); - private final Pattern TYPE = Pattern.compile("&rft.genre=([^&]+)"); - private final Pattern AUTHOR = Pattern.compile("&rft.au=([^&]+)"); + private static final Pattern DOI = Pattern.compile("%3Fdoi%3D([^&]+)"); + private static final Pattern TITLE = Pattern.compile("&rft.atitle=([^&]+)"); + private static final Pattern JOURNAL = Pattern.compile("&rft.jtitle=([^&]+)"); + private static final Pattern YEAR = Pattern.compile("&rft.date=([^&]+)"); + private static final Pattern VOLUME = Pattern.compile("&rft.volume=([^&]+)"); + private static final Pattern PAGES = Pattern.compile("&rft.pages=([^&]+)"); + private static final Pattern ISSUE = Pattern.compile("&rft.issue=([^&]+)"); + private static final Pattern TYPE = Pattern.compile("&rft.genre=([^&]+)"); + private static final Pattern AUTHOR = Pattern.compile("&rft.au=([^&]+)"); @Override public List parseEntries(InputStream inputStream) throws ParseException { diff --git a/jablib/src/main/java/org/jabref/logic/integrity/PagesChecker.java b/jablib/src/main/java/org/jabref/logic/integrity/PagesChecker.java index b96fba62a06..f39b9add3c2 100644 --- a/jablib/src/main/java/org/jabref/logic/integrity/PagesChecker.java +++ b/jablib/src/main/java/org/jabref/logic/integrity/PagesChecker.java @@ -34,13 +34,16 @@ public class PagesChecker implements ValueChecker { + ")?" + "\\z"; // end String + private static final Predicate IS_VALID_PAGE_NUMBER_BIBTEX = Pattern.compile(PAGES_EXP_BIBTEX).asPredicate(); + private static final Predicate IS_VALID_PAGE_NUMBER_BIBLATEX = Pattern.compile(PAGES_EXP_BIBLATEX).asPredicate(); + private final Predicate isValidPageNumber; public PagesChecker(BibDatabaseContext databaseContext) { if (databaseContext.isBiblatexMode()) { - isValidPageNumber = Pattern.compile(PAGES_EXP_BIBLATEX).asPredicate(); + isValidPageNumber = IS_VALID_PAGE_NUMBER_BIBLATEX; } else { - isValidPageNumber = Pattern.compile(PAGES_EXP_BIBTEX).asPredicate(); + isValidPageNumber = IS_VALID_PAGE_NUMBER_BIBTEX; } } diff --git a/jablib/src/main/java/org/jabref/logic/msbib/MSBibEntry.java b/jablib/src/main/java/org/jabref/logic/msbib/MSBibEntry.java index 5da0cf99ef3..4919aaa4150 100644 --- a/jablib/src/main/java/org/jabref/logic/msbib/MSBibEntry.java +++ b/jablib/src/main/java/org/jabref/logic/msbib/MSBibEntry.java @@ -70,7 +70,7 @@ class MSBibEntry { /// WORD SPACE , SPACE WORD SPACE (Can be zero or more) , SPACE WORD (Can be zero or more)
/// Matches both single locations (only city) like Berlin and full locations like Stroudsburg, PA, USA
/// tested using http://www.regexpal.com/ - private final Pattern ADDRESS_PATTERN = Pattern.compile("\\b(\\w+)\\s?[,]?\\s?(\\w*)\\s?[,]?\\s?(\\w*)\\b"); + private static final Pattern ADDRESS_PATTERN = Pattern.compile("\\b(\\w+)\\s?[,]?\\s?(\\w*)\\s?[,]?\\s?(\\w*)\\b"); public MSBibEntry() { // empty diff --git a/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLCitationOOAdapter.java b/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLCitationOOAdapter.java index 606b71321c3..812f1537602 100644 --- a/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLCitationOOAdapter.java +++ b/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLCitationOOAdapter.java @@ -40,6 +40,7 @@ public class CSLCitationOOAdapter { private static final CitationStyleOutputFormat HTML_OUTPUT_FORMAT = CitationStyleOutputFormat.HTML; + private static final Pattern CITATION_NUMBER_PATTERN = Pattern.compile("(\\D*)(\\d+)(\\D*)"); private final XTextDocument document; private final CSLReferenceMarkManager markManager; @@ -259,8 +260,7 @@ private void insertReferences(XTextCursor cursor, List entries, OOText /// Transforms the numbers in the citation to globally-unique (and thus, reusable) numbers. private String updateSingleOrMultipleCitationNumbers(String citation, List entries) { - Pattern pattern = Pattern.compile("(\\D*)(\\d+)(\\D*)"); - Matcher matcher = pattern.matcher(citation); + Matcher matcher = CITATION_NUMBER_PATTERN.matcher(citation); StringBuilder sb = new StringBuilder(); Iterator iterator = entries.iterator(); diff --git a/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java b/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java index 02ab703b0c1..b5949a6ab2a 100644 --- a/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java +++ b/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java @@ -48,7 +48,7 @@ public final class CSLFormatUtils { private static final String DEFAULT_HANGING_INDENT_BIBLIOGRAPHY_BODY_FORMAT = "Hanging indent"; private static final Pattern YEAR_IN_CITATION_PATTERN = Pattern.compile("(.)(.*), (\\d{4}.*)"); - + private static final Pattern BIBLIOGRAPHY_NUMBER_PATTERN = Pattern.compile("([\\[(])?(\\d+)([])])?(\\.)?\\s*"); private CSLFormatUtils() { // prevent instantiation } @@ -168,8 +168,7 @@ public static String generateAlphanumericInTextCitation(BibEntry entry, BibDatab /// @param currentNumber the correct number to update the citation with. /// @return the bibliographic citation with resolved number. public static String updateSingleBibliographyNumber(String citation, int currentNumber) { - Pattern pattern = Pattern.compile("([\\[(])?(\\d+)([])])?(\\.)?\\s*"); - Matcher matcher = pattern.matcher(citation); + Matcher matcher = BIBLIOGRAPHY_NUMBER_PATTERN.matcher(citation); StringBuilder sb = new StringBuilder(); boolean numberReplaced = false; diff --git a/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLReferenceMarkManager.java b/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLReferenceMarkManager.java index 3653f336d3e..92795227e30 100644 --- a/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLReferenceMarkManager.java +++ b/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLReferenceMarkManager.java @@ -40,6 +40,7 @@ /// Class for generation, insertion and management of all reference marks in the document. public class CSLReferenceMarkManager { private static final Logger LOGGER = LoggerFactory.getLogger(CSLReferenceMarkManager.class); + private static final Pattern CITATION_NUMBER_PATTERN = Pattern.compile("(\\D*)(\\d+)(\\D*)"); private final XTextDocument document; private final XMultiServiceFactory factory; @@ -227,8 +228,7 @@ private void updateAllCitationNumbers() throws Exception, CreationException { } private String getUpdatedCitationTextWithNewNumbers(String currentText, List newNumbers) { - Pattern pattern = Pattern.compile("(\\D*)(\\d+)(\\D*)"); - Matcher matcher = pattern.matcher(currentText); + Matcher matcher = CITATION_NUMBER_PATTERN.matcher(currentText); StringBuilder result = new StringBuilder(); int lastEnd = 0; int numberIndex = 0; diff --git a/jablib/src/main/java/org/jabref/logic/util/strings/StringUtil.java b/jablib/src/main/java/org/jabref/logic/util/strings/StringUtil.java index 1ccb290d343..db54a63652b 100644 --- a/jablib/src/main/java/org/jabref/logic/util/strings/StringUtil.java +++ b/jablib/src/main/java/org/jabref/logic/util/strings/StringUtil.java @@ -49,6 +49,8 @@ public class StringUtil { private static final UnicodeToReadableCharMap UNICODE_CHAR_MAP = new UnicodeToReadableCharMap(); private static final String WRAPPED_LINE_PREFIX = ""; // If a line break is added, this prefix will be inserted at the beginning of the next line private static final String STRING_TABLE_DELIMITER = " : "; + // A sentence ends with a .?!;, but not in the case of "Mr.", "Ms.", "Mrs.", "Dr.", "st.", "jr.", "co.", "inc.", and "ltd." + private static final Pattern SPLIT_TEXT_PATTERN = Pattern.compile("(?<=[\\.!;\\?])(? getStringAsWords(String text) { /// Returns a list of sentences contained in the given text. public static List getStringAsSentences(String text) { - // A sentence ends with a .?!;, but not in the case of "Mr.", "Ms.", "Mrs.", "Dr.", "st.", "jr.", "co.", "inc.", and "ltd." - Pattern splitTextPattern = Pattern.compile("(?<=[\\.!;\\?])(?\\d{4}\\.\\d{4,5})(v(?\\d+))?\\s?(\\[(?\\S+)\\])?"); + private static final Pattern OLD_IDENTIFIER_PATTERN = Pattern.compile("(" + ARXIV_PREFIX + ")?\\s?:?\\s?(?(?[a-z\\-]+(\\.[A-Z]{2})?)/\\d{7})(v(?\\d+))?"); private final String identifier; private final String classification; private final String version; @@ -45,8 +46,7 @@ public static Optional parse(String value) { return getArXivIdentifier(identifierMatcher); } - Pattern oldIdentifierPattern = Pattern.compile("(" + ARXIV_PREFIX + ")?\\s?:?\\s?(?(?[a-z\\-]+(\\.[A-Z]{2})?)/\\d{7})(v(?\\d+))?"); - Matcher oldIdentifierMatcher = oldIdentifierPattern.matcher(identifier); + Matcher oldIdentifierMatcher = OLD_IDENTIFIER_PATTERN.matcher(identifier); if (oldIdentifierMatcher.matches()) { return getArXivIdentifier(oldIdentifierMatcher); } diff --git a/jablib/src/main/java/org/jabref/model/entry/identifier/IacrEprint.java b/jablib/src/main/java/org/jabref/model/entry/identifier/IacrEprint.java index cf2e037d768..498a0ca9d72 100644 --- a/jablib/src/main/java/org/jabref/model/entry/identifier/IacrEprint.java +++ b/jablib/src/main/java/org/jabref/model/entry/identifier/IacrEprint.java @@ -21,13 +21,14 @@ public class IacrEprint implements Identifier { private static final Logger LOGGER = LoggerFactory.getLogger(IacrEprint.class); private static final String IACR_EPRINT_EXP = "\\d{4}\\/\\d{3,5}"; + private static final Pattern IACR_EPRINT_PATTERN = Pattern.compile(IACR_EPRINT_EXP); private final String iacrEprint; IacrEprint(@NonNull String iacrEprint) { String trimmedId = iacrEprint.trim(); if (matchesExcepted(trimmedId)) { - Matcher matcher = Pattern.compile(IACR_EPRINT_EXP).matcher(trimmedId); + Matcher matcher = IACR_EPRINT_PATTERN.matcher(trimmedId); matcher.find(); this.iacrEprint = matcher.group(0); } else { diff --git a/jabls/src/main/java/org/jabref/languageserver/util/definition/MarkdownDefinitionProvider.java b/jabls/src/main/java/org/jabref/languageserver/util/definition/MarkdownDefinitionProvider.java index 9571156fbdf..3e6121caeed 100644 --- a/jabls/src/main/java/org/jabref/languageserver/util/definition/MarkdownDefinitionProvider.java +++ b/jabls/src/main/java/org/jabref/languageserver/util/definition/MarkdownDefinitionProvider.java @@ -6,9 +6,12 @@ public class MarkdownDefinitionProvider extends DefinitionProvider { + private static final Pattern CITATION_COMMAND_PATTERN = Pattern.compile("(?\\[[^\\]]*@[^\\]]*\\]|@[a-z0-9_.+:-]+(?:\\s*;\\s*@[a-z0-9_.+:-]+)*)", Pattern.CASE_INSENSITIVE); + private static final Pattern CITATION_KEY_INSIDE_PATTERN = Pattern.compile("@(?[a-z0-9_.+:-]+)", Pattern.CASE_INSENSITIVE); + public MarkdownDefinitionProvider(LspParserHandler parserHandler) { super(parserHandler); - this.citationCommandPattern = Pattern.compile("(?\\[[^\\]]*@[^\\]]*\\]|@[a-z0-9_.+:-]+(?:\\s*;\\s*@[a-z0-9_.+:-]+)*)", Pattern.CASE_INSENSITIVE); - this.citationKeyInsidePattern = Pattern.compile("@(?[a-z0-9_.+:-]+)", Pattern.CASE_INSENSITIVE); + this.citationCommandPattern = CITATION_COMMAND_PATTERN; + this.citationKeyInsidePattern = CITATION_KEY_INSIDE_PATTERN; } } From c19bdbb0e9d6ede0c79f0717284f24c1e1e2b7b3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 30 Mar 2026 07:11:44 +0000 Subject: [PATCH 03/10] Fix remaining Pattern.compile violation and add Checkstyle rule Agent-Logs-Url: https://github.com/InAnYan/jabref/sessions/baedd9c8-4d70-49bb-96da-eeabd65e4503 Co-authored-by: InAnYan <13097618+InAnYan@users.noreply.github.com> --- config/checkstyle/checkstyle.xml | 13 +++++++++++++ .../org/jabref/logic/importer/ImporterTest.java | 5 +++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index 93828fef592..67526561011 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -70,6 +70,19 @@ + + + + + + + + diff --git a/jablib/src/test/java/org/jabref/logic/importer/ImporterTest.java b/jablib/src/test/java/org/jabref/logic/importer/ImporterTest.java index ac4a164da39..9c9bfb329e4 100644 --- a/jablib/src/test/java/org/jabref/logic/importer/ImporterTest.java +++ b/jablib/src/test/java/org/jabref/logic/importer/ImporterTest.java @@ -33,6 +33,8 @@ @ResourceLock("Localization.lang") public class ImporterTest { + private static final Pattern WHITESPACE_PATTERN = Pattern.compile("\\s"); + @ParameterizedTest @MethodSource("instancesToTest") void getFormatterNameDoesNotReturnNull(Importer format) { @@ -54,8 +56,7 @@ void getIdDoesNotReturnNull(Importer format) { @ParameterizedTest @MethodSource("instancesToTest") void getIdDoesNotContainWhitespace(Importer format) { - Pattern whitespacePattern = Pattern.compile("\\s"); - assertFalse(whitespacePattern.matcher(format.getId()).find()); + assertFalse(WHITESPACE_PATTERN.matcher(format.getId()).find()); } @ParameterizedTest From eaaba1304bd7acb078919ec7de144974e2a94fdf Mon Sep 17 00:00:00 2001 From: Ruslan Date: Mon, 30 Mar 2026 21:30:13 +0200 Subject: [PATCH 04/10] Remove duplicate ADDRESS_PATTERN and comments Removed redundant ADDRESS_PATTERN declaration and its documentation. --- .../java/org/jabref/logic/msbib/MSBibEntry.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/msbib/MSBibEntry.java b/jablib/src/main/java/org/jabref/logic/msbib/MSBibEntry.java index 4919aaa4150..41df41774e5 100644 --- a/jablib/src/main/java/org/jabref/logic/msbib/MSBibEntry.java +++ b/jablib/src/main/java/org/jabref/logic/msbib/MSBibEntry.java @@ -26,6 +26,13 @@ /// @see ECMA Standard class MSBibEntry { + /// reduced subset, supports only "CITY , STATE, COUNTRY"
+ /// **\b(\w+)\s?[,]?\s?(\w+)\s?[,]?\s?(\w*)\b**
+ /// WORD SPACE , SPACE WORD SPACE (Can be zero or more) , SPACE WORD (Can be zero or more)
+ /// Matches both single locations (only city) like Berlin and full locations like Stroudsburg, PA, USA
+ /// tested using http://www.regexpal.com/ + private static final Pattern ADDRESS_PATTERN = Pattern.compile("\\b(\\w+)\\s?[,]?\\s?(\\w*)\\s?[,]?\\s?(\\w*)\\b"); + public Map fields = new HashMap<>(); public List authors; @@ -65,13 +72,6 @@ class MSBibEntry { private String bibtexEntryType; - /// reduced subset, supports only "CITY , STATE, COUNTRY"
- /// **\b(\w+)\s?[,]?\s?(\w+)\s?[,]?\s?(\w*)\b**
- /// WORD SPACE , SPACE WORD SPACE (Can be zero or more) , SPACE WORD (Can be zero or more)
- /// Matches both single locations (only city) like Berlin and full locations like Stroudsburg, PA, USA
- /// tested using http://www.regexpal.com/ - private static final Pattern ADDRESS_PATTERN = Pattern.compile("\\b(\\w+)\\s?[,]?\\s?(\\w*)\\s?[,]?\\s?(\\w*)\\b"); - public MSBibEntry() { // empty } From 9ff03322fb6c8fd9e82f492c71546629d65d67c8 Mon Sep 17 00:00:00 2001 From: Ruslan Date: Mon, 30 Mar 2026 21:32:40 +0200 Subject: [PATCH 05/10] Add FILES_LIMIT constant to ExtractReferencesAction --- .../java/org/jabref/gui/maintable/ExtractReferencesAction.java | 1 + 1 file changed, 1 insertion(+) diff --git a/jabgui/src/main/java/org/jabref/gui/maintable/ExtractReferencesAction.java b/jabgui/src/main/java/org/jabref/gui/maintable/ExtractReferencesAction.java index 50d25232f56..733e1908660 100644 --- a/jabgui/src/main/java/org/jabref/gui/maintable/ExtractReferencesAction.java +++ b/jabgui/src/main/java/org/jabref/gui/maintable/ExtractReferencesAction.java @@ -40,6 +40,7 @@ /// The mode is selected by the preferences whether to use Grobid or not. public class ExtractReferencesAction extends SimpleCommand { private static final Pattern COMMENT_NUMBER_PATTERN = Pattern.compile("^\\[(\\d+)\\]"); + private final int FILES_LIMIT = 10; private final DialogService dialogService; From bd8197ded521a5a56c9edefd8bd886b93b871201 Mon Sep 17 00:00:00 2001 From: Ruslan Date: Mon, 30 Mar 2026 21:33:30 +0200 Subject: [PATCH 06/10] Update checkstyle.xml --- config/checkstyle/checkstyle.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index 67526561011..4b5d71480cf 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -73,8 +73,6 @@ From d2fc19eac162728a65779c0f26ebd684d0d799f7 Mon Sep 17 00:00:00 2001 From: Ruslan Date: Mon, 30 Mar 2026 21:34:15 +0200 Subject: [PATCH 07/10] Update CSLFormatUtils.java --- .../org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java b/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java index b5949a6ab2a..5253af17619 100644 --- a/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java +++ b/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java @@ -49,6 +49,7 @@ public final class CSLFormatUtils { private static final Pattern YEAR_IN_CITATION_PATTERN = Pattern.compile("(.)(.*), (\\d{4}.*)"); private static final Pattern BIBLIOGRAPHY_NUMBER_PATTERN = Pattern.compile("([\\[(])?(\\d+)([])])?(\\.)?\\s*"); + private CSLFormatUtils() { // prevent instantiation } From cd47b5b384d3ce9a3625ae70ef736a25c2d7e8cf Mon Sep 17 00:00:00 2001 From: Ruslan Date: Mon, 30 Mar 2026 21:34:39 +0200 Subject: [PATCH 08/10] Update CSLFormatUtils.java --- .../org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java b/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java index 5253af17619..c5339f20bc5 100644 --- a/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java +++ b/jablib/src/main/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtils.java @@ -49,7 +49,7 @@ public final class CSLFormatUtils { private static final Pattern YEAR_IN_CITATION_PATTERN = Pattern.compile("(.)(.*), (\\d{4}.*)"); private static final Pattern BIBLIOGRAPHY_NUMBER_PATTERN = Pattern.compile("([\\[(])?(\\d+)([])])?(\\.)?\\s*"); - + private CSLFormatUtils() { // prevent instantiation } From 7544db48066dbb4f42a55bf6ef663935b18a6268 Mon Sep 17 00:00:00 2001 From: Ruslan Date: Mon, 30 Mar 2026 21:37:26 +0200 Subject: [PATCH 09/10] Update ArXivIdentifier.java --- .../java/org/jabref/model/entry/identifier/ArXivIdentifier.java | 1 + 1 file changed, 1 insertion(+) diff --git a/jablib/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java b/jablib/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java index 8309c891468..9e2e6770242 100644 --- a/jablib/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java +++ b/jablib/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java @@ -21,6 +21,7 @@ public class ArXivIdentifier extends EprintIdentifier { private static final String ARXIV_PREFIX = "http(s)?://arxiv.org/(abs|html|pdf)/|arxiv|arXiv"; private static final Pattern IDENTIFIER_PATTERN = Pattern.compile("(" + ARXIV_PREFIX + ")?\\s?:?\\s?(?\\d{4}\\.\\d{4,5})(v(?\\d+))?\\s?(\\[(?\\S+)\\])?"); private static final Pattern OLD_IDENTIFIER_PATTERN = Pattern.compile("(" + ARXIV_PREFIX + ")?\\s?:?\\s?(?(?[a-z\\-]+(\\.[A-Z]{2})?)/\\d{7})(v(?\\d+))?"); + private final String identifier; private final String classification; private final String version; From dd288acd57abf7cb8b57c8a28742fd4ecf4d78f6 Mon Sep 17 00:00:00 2001 From: Ruslan Date: Mon, 30 Mar 2026 21:38:55 +0200 Subject: [PATCH 10/10] Update IacrEprint.java --- .../main/java/org/jabref/model/entry/identifier/IacrEprint.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jablib/src/main/java/org/jabref/model/entry/identifier/IacrEprint.java b/jablib/src/main/java/org/jabref/model/entry/identifier/IacrEprint.java index 498a0ca9d72..d86b35fbdd7 100644 --- a/jablib/src/main/java/org/jabref/model/entry/identifier/IacrEprint.java +++ b/jablib/src/main/java/org/jabref/model/entry/identifier/IacrEprint.java @@ -18,10 +18,12 @@ @AllowedToUseLogic("Because URL utility is needed") public class IacrEprint implements Identifier { public static final URI RESOLVER = URLUtil.createUri("https://ia.cr"); + private static final Logger LOGGER = LoggerFactory.getLogger(IacrEprint.class); private static final String IACR_EPRINT_EXP = "\\d{4}\\/\\d{3,5}"; private static final Pattern IACR_EPRINT_PATTERN = Pattern.compile(IACR_EPRINT_EXP); + private final String iacrEprint; IacrEprint(@NonNull String iacrEprint) {