Skip to content

Switch MSC Code Utils to download csv file lazy when feature is enabled#15883

Open
Siedlerchr wants to merge 18 commits into
mainfrom
refactorMscCodeUtils
Open

Switch MSC Code Utils to download csv file lazy when feature is enabled#15883
Siedlerchr wants to merge 18 commits into
mainfrom
refactorMscCodeUtils

Conversation

@Siedlerchr
Copy link
Copy Markdown
Member

@Siedlerchr Siedlerchr commented Jun 2, 2026

Related issues and pull requests

Closes https://github.com/JabRef/jabref-issue-melting-pot/issues/1312

grafik grafik

PR Description

  • Migrate from static JSON loading to CSV loading at runtime and only when activated in the preferences, as this feature is only relevant for math people. We cannot ship the CSV as it is licensed under CC-BY-SA-NC
  • Wrap the csv file in an mvstore.

TODO: Decide in which preferences we store this MSC Switch, maybe wait for the cleanup preferences migration

´´

Steps to test

AI usage

chat gpt codex 5.4 mini and gemini flash 3
Reviewd the code myself


Checklist

  • I own the copyright of the code submitted and I license it under the MIT license
  • If AI tools were used, I disclosed them in the "AI usage" section and reviewed, understood, and take full ownership of all AI-generated code
  • I manually tested my changes in running JabRef (always required)
  • I added JUnit tests for changes (if applicable)
  • I added screenshots in the PR description (if change is visible to the user)
  • [/] I added a screenshot in the PR description showing a library with a single entry with me as author and as title the issue number
  • I described the change in CHANGELOG.md in a way that can be understood by the average user (if change is visible to the user)
  • [.] I checked the user documentation for up to dateness and submitted a pull request to our user documentation repository

@qodo-free-for-open-source-projects
Copy link
Copy Markdown
Contributor

Review Summary by Qodo

Implement lazy MSC code loading with runtime CSV download and MVStore storage

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Migrate MSC code loading from static JSON to lazy CSV download at runtime
• Add preference toggle to enable/disable MSC keyword descriptions feature
• Wrap CSV data in MVStore for efficient storage and retrieval
• Refactor MSC code utilities to support multiple loading strategies
Diagram
flowchart LR
  A["User enables MSC feature"] --> B["Download CSV from URL"]
  B --> C["Convert to MVStore"]
  C --> D["Store in user data directory"]
  D --> E["Load on demand for keyword descriptions"]
  E --> F["Display MSC descriptions in UI"]

Loading

Grey Divider

File Changes

1. jablib/src/main/java/org/jabref/logic/msc/MscCodeLoader.java ✨ Enhancement +124/-0

New MSC code loader with CSV and MVStore support

jablib/src/main/java/org/jabref/logic/msc/MscCodeLoader.java


2. jablib/src/main/java/org/jabref/logic/msc/MscCodeRepository.java ✨ Enhancement +44/-0

New repository class for MSC code storage and retrieval

jablib/src/main/java/org/jabref/logic/msc/MscCodeRepository.java


3. jablib/src/main/java/org/jabref/logic/msc/MscCodeEntry.java ✨ Enhancement +8/-0

New record class for MSC code data structure

jablib/src/main/java/org/jabref/logic/msc/MscCodeEntry.java


View more (19)
4. jablib/src/main/java/org/jabref/logic/util/MscCodeUtils.java ✨ Enhancement +24/-28

Refactor to support CSV and MVStore loading strategies

jablib/src/main/java/org/jabref/logic/util/MscCodeUtils.java


5. jablib/src/main/java/org/jabref/logic/formatter/bibtexfields/ConvertMSCCodesFormatter.java ✨ Enhancement +55/-38

Switch from static JSON to lazy MVStore loading with preference check

jablib/src/main/java/org/jabref/logic/formatter/bibtexfields/ConvertMSCCodesFormatter.java


6. jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java ✨ Enhancement +11/-0

Add preference methods for MSC keyword descriptions toggle

jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java


7. jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java ✨ Enhancement +4/-0

Add interface methods for MSC keyword descriptions preference

jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java


8. jablib/src/main/java/org/jabref/logic/util/Directories.java ✨ Enhancement +9/-0

Add method to get MSC data directory path

jablib/src/main/java/org/jabref/logic/util/Directories.java


9. jabgui/src/main/java/org/jabref/gui/preferences/general/GeneralTabViewModel.java ✨ Enhancement +46/-1

Add MSC preference binding and download functionality

jabgui/src/main/java/org/jabref/gui/preferences/general/GeneralTabViewModel.java


10. jabgui/src/main/java/org/jabref/gui/preferences/general/GeneralTab.java ✨ Enhancement +6/-1

Wire MSC checkbox to view model and inject TaskExecutor

jabgui/src/main/java/org/jabref/gui/preferences/general/GeneralTab.java


11. jabgui/src/main/java/org/jabref/gui/fieldeditors/KeywordsEditor.java ✨ Enhancement +29/-29

Refactor to load MSC codes from MVStore on demand

jabgui/src/main/java/org/jabref/gui/fieldeditors/KeywordsEditor.java


12. jablib/src/test/java/org/jabref/logic/formatter/bibtexfields/ConvertMSCCodesFormatterTest.java 🧪 Tests +31/-3

Update tests to use mock preferences and MscCodeRepository

jablib/src/test/java/org/jabref/logic/formatter/bibtexfields/ConvertMSCCodesFormatterTest.java


13. jablib/src/test/java/org/jabref/logic/msc/MscCodeLoaderTest.java 🧪 Tests +70/-0

New tests for CSV reading and MVStore conversion

jablib/src/test/java/org/jabref/logic/msc/MscCodeLoaderTest.java


14. jablib/src/main/java/org/jabref/logic/net/URLDownload.java 🐞 Bug fix +10/-3

Update user agent and improve input stream handling

jablib/src/main/java/org/jabref/logic/net/URLDownload.java


15. jablib/src/test/java/org/jabref/logic/net/URLDownloadTest.java 🧪 Tests +5/-5

Update test URLs to use stable endpoints

jablib/src/test/java/org/jabref/logic/net/URLDownloadTest.java


16. jablib/src/main/java/org/jabref/logic/importer/fetcher/UnpaywallFetcher.java 🐞 Bug fix +1/-1

Use URLUtil.create for URL instantiation

jablib/src/main/java/org/jabref/logic/importer/fetcher/UnpaywallFetcher.java


17. jablib/src/main/java/org/jabref/logic/importer/fetcher/OpenAlex.java 🐞 Bug fix +1/-1

Use URLUtil.create for URL instantiation

jablib/src/main/java/org/jabref/logic/importer/fetcher/OpenAlex.java


18. jablib/src/main/java/module-info.java ✨ Enhancement +1/-0

Export new MSC code package

jablib/src/main/java/module-info.java


19. jablib/src/main/resources/l10n/JabRef_en.properties 📝 Documentation +4/-0

Add localization strings for MSC feature

jablib/src/main/resources/l10n/JabRef_en.properties


20. jabgui/src/main/resources/org/jabref/gui/preferences/general/GeneralTab.fxml ✨ Enhancement +1/-0

Add checkbox UI element for MSC keyword descriptions

jabgui/src/main/resources/org/jabref/gui/preferences/general/GeneralTab.fxml


21. jablib/src/main/resources/msc_codes.json Additional files +0/-6523

...

jablib/src/main/resources/msc_codes.json


22. scripts/convertMSC.py Additional files +0/-333

...

scripts/convertMSC.py


Grey Divider

Qodo Logo

@qodo-free-for-open-source-projects
Copy link
Copy Markdown
Contributor

qodo-free-for-open-source-projects Bot commented Jun 2, 2026

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (1) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0)

Grey Divider


Action required

1. setEnableMscKeywordDescriptions boolean parameter 📘 Rule violation ⚙ Maintainability
Description
A new public API setEnableMscKeywordDescriptions(boolean enabled) was introduced, which creates
ambiguous call sites and violates the guideline to avoid boolean flags in public methods. This
reduces readability and makes future API evolution harder.
Code

jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java[R73-76]

Evidence
PR Compliance ID 11 forbids introducing boolean parameters in public methods. The PR adds
setEnableMscKeywordDescriptions(boolean enabled) to the public CliPreferences interface,
creating a boolean-flag API.

AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods: AGENTS.md: Avoid boolean parameters in public methods
jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java[73-76]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A public method was added with a boolean parameter (`setEnableMscKeywordDescriptions(boolean enabled)`), which is discouraged because boolean flags make call sites unclear.
## Issue Context
This method is part of `CliPreferences` and is called from GUI/logic to toggle the MSC keyword description feature.
## Fix Focus Areas
- jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java[73-76]
- jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java[1851-1859]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. isMvStoreAvailableWithData catches Exception ✓ Resolved 📘 Rule violation ☼ Reliability
Description
isMvStoreAvailableWithData catches broad Exception and logs without including the exception
object, which reduces diagnosability and can mask unexpected failures. This violates the requirement
for precise exception handling and proper exception logging.
Code

jablib/src/main/java/org/jabref/logic/msc/MscCodeLoader.java[R112-122]

Evidence
PR Compliance ID 16 requires catching specific exceptions (not Exception) and logging exceptions
properly by passing the exception object to the logger. The added code catches Exception and logs
only the path without the exception, preventing troubleshooting.

AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling must be precise, logged properly, and avoid unchecked exceptions: AGENTS.md: Exception handling m...

Comment on lines +73 to +76
boolean shouldEnableMscKeywordDescriptions();

void setEnableMscKeywordDescriptions(boolean enabled);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. setenablemsckeyworddescriptions boolean parameter 📘 Rule violation ⚙ Maintainability

A new public API setEnableMscKeywordDescriptions(boolean enabled) was introduced, which creates
ambiguous call sites and violates the guideline to avoid boolean flags in public methods. This
reduces readability and makes future API evolution harder.
Agent Prompt
## Issue description
A public method was added with a boolean parameter (`setEnableMscKeywordDescriptions(boolean enabled)`), which is discouraged because boolean flags make call sites unclear.

## Issue Context
This method is part of `CliPreferences` and is called from GUI/logic to toggle the MSC keyword description feature.

## Fix Focus Areas
- jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java[73-76]
- jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java[1851-1859]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread jablib/src/main/java/org/jabref/logic/msc/MscCodeLoader.java
Comment thread jabgui/src/main/java/org/jabref/gui/fieldeditors/KeywordsEditor.java Outdated
@koppor koppor changed the title Switch MSC Code Utils to download csv file lazy when feature is enabeld^ Switch MSC Code Utils to download csv file lazy when feature is enabled Jun 2, 2026
Copy link
Copy Markdown
Member

@koppor koppor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

small changes

The file ´CC-BY-SA-NC` cannot be downloaded too just automically.

The UI needs to have a warning and clearly link the license. We also need to cache the file.

A new dir needs to be added at org.jabref.logic.util.Directories - maybe "mvcodes"? There, the csv and the .mv can live in.

String mscClassification = mscmap.get(tagLabel.getText());
Tooltip tooltip = new Tooltip(mscClassification);
tagLabel.setTooltip(tooltip);
if (!preferences.shouldEnableMscKeywordDescriptions()) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we just store these preferences locally? (I think we also do that elsewhere)

dialogService.notify(Localization.lang("Downloading MSC codes..."));

BackgroundTask.wrap(() -> {
MscCodeLoader.downloadAndConvert(URLUtil.create(MscCodeLoader.MSC_CSV_URL), mscMvFile);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Too much load. 😅

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

??

Comment on lines -43 to +65
"Jabref123,Search theory,Hello Jabref,Direct methods ( G-spaces of Busemann etc.)",
"Jabref123,Search theory,Hello Jabref,Direct methods (\\\\(G\\\\)-spaces of Busemann\\, etc.)",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The test is about NON-MSC keywords preserved - why does JabRef change them?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the non MSC keyword is JabRef 123. The others are valid msc codes and expected to be formatted. I renamed the test to make it clear.

"53C70"	"Direct methods (\(G\)-spaces of Busemann, etc.)"	"Direct methods (\(G\)-spaces of Busemann, etc.)"

@github-actions github-actions Bot added the status: changes-required Pull requests that are not yet complete label Jun 2, 2026
public static Path getMscDirectory() {
return Path.of(
AppDirsFactory.getInstance()
.getUserDataDir(
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@koppor I have a dir for the file

* upstream/main:
  Fix formatter annotation script and dedupe CI formatting checks (#15895)
  Introduce workflow permissions (#15881)
  Chore(deps): Bump org.xmlunit:xmlunit-matchers in /versions (#15890)
  Fix formatter annotation script: apostrophes broke awk quoting
  Annotate only changed lines in CI formatting check (#15880)
  Chore(deps): Bump net.bytebuddy:byte-buddy in /versions (#15893)
  Chore(deps): Bump net.java.dev.jna:jna-jpms in /versions (#15888)
  Chore(deps): Bump com.github.javaparser:javaparser-core in /versions (#15892)
  Chore(deps): Bump tools.jackson:jackson-bom in /versions (#15891)
  Chore(deps): Bump io.zonky.test.postgres:embedded-postgres-binaries-bom (#15889)
  Chore(deps): Bump net.java.dev.jna:jna-platform in /versions (#15886)
  Chore(deps): Bump com.github.javaparser:javaparser-symbol-solver-core (#15887)
  Chore(deps): Bump com.autonomousapps:dependency-analysis-gradle-plugin (#15884)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status: changes-required Pull requests that are not yet complete

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants