Skip to content

Fix/copy linked files on entry transfer #13535

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 47 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
7b35786
refactor(RightClickMenu): pass libraryTab to createCopySubMenu
UmutAkbayin Jul 6, 2025
507c203
feat(ClipBoardManager): add static BibDatabaseContext field with gett…
UmutAkbayin Jul 6, 2025
327e8b3
refactor(ClipBoardManager): change sourceDatabaseContext to instance …
UmutAkbayin Jul 6, 2025
80a5dd8
feat(RightClickMenu): set sourceBibDatabaseContext from libraryTab
UmutAkbayin Jul 6, 2025
4a94235
feat: add LinkedFileTransferHelper#adjustLinkedFilesForTarget call to…
UmutAkbayin Jul 6, 2025
39e0484
feat(CopyTo): support file preferences in copy operations
UmutAkbayin Jul 6, 2025
2a58afb
feat(LinkedFileTransferHelper): add new helper class to support Entry…
UmutAkbayin Jul 6, 2025
4024b48
feat(LinkedFileTransferHelper): add helper to check reachability from…
UmutAkbayin Jul 7, 2025
87a064f
test(LinkedFileTransferHelperTest): add test cases for LinkedFileTran…
UmutAkbayin Jul 7, 2025
f864dc3
feat: adjust relative file paths after entry transfer between libraries
UmutAkbayin Jul 7, 2025
638bc91
feat(ImportHandler): clone entry in importEntryWithDuplicateCheck
UmutAkbayin Jul 12, 2025
593d36f
chore: update LinkedFileTransferHelper#adjustLinkedFilesForTarget cal…
UmutAkbayin Jul 12, 2025
f6cf22f
refactor: update LibraryTab#pasteEntry to copy with feedback
UmutAkbayin Jul 12, 2025
f53d4cc
feat(LinkedFileTransferHelper): enhance linked file adjustment and co…
UmutAkbayin Jul 12, 2025
d4871af
test(LinkedFileTransferHelperTest): add tests for all three scenarios
UmutAkbayin Jul 13, 2025
7385bd0
docs(requirements): add file transfer requirements specification
UmutAkbayin Jul 13, 2025
52fd290
chore: remove unnecessary comments and adjust filed.ms to increment t…
UmutAkbayin Jul 13, 2025
4b3011f
chore: replace Collection constructors with factories
UmutAkbayin Jul 13, 2025
2a9d039
chore: remove DisplayNames for test classes
UmutAkbayin Jul 13, 2025
646da11
chore: replace assertTrue with assertEquals
UmutAkbayin Jul 13, 2025
b06fbbc
refactor: change method signature to have boolean parameter last and …
UmutAkbayin Jul 13, 2025
3f03974
refactor: replace IOException with Exception in the throws clause and…
UmutAkbayin Jul 13, 2025
a85b157
refactor: remove unused import
UmutAkbayin Jul 13, 2025
a0dcacd
refactor: remove static modifier
UmutAkbayin Jul 13, 2025
0de8f52
fix: add messages for pasting entries in the properties file
UmutAkbayin Aug 1, 2025
9cc27f7
chore: use BibEntry copy constructor in LinkedFileTransferHelper for …
UmutAkbayin Aug 1, 2025
16bfa81
chore: align with style rules
UmutAkbayin Aug 1, 2025
a734930
fix: improve error logging and update assertions in LinkedFileTransfe…
UmutAkbayin Aug 1, 2025
2766ba9
fix: reorganize imports and improve code formatting in LinkedFileTran…
UmutAkbayin Aug 1, 2025
98b0a24
fix: rename filed.md to files.md for clarity
UmutAkbayin Aug 1, 2025
0309d35
docs: add requirement traceability comments to LinkedFileTransferHelper
UmutAkbayin Aug 1, 2025
ee18968
fix: replace file existence check with atomic copy and exception hand…
UmutAkbayin Aug 1, 2025
582c392
chore(LinkesFileTransferHelperTest): replace setters with withers
UmutAkbayin Aug 1, 2025
031f835
chore(LinkesFileTransferHelperTest): change back to setters
UmutAkbayin Aug 1, 2025
17d97b3
fix: reject null in setSourceBibDatabaseContext to enforce fail-fast
UmutAkbayin Aug 3, 2025
397efaf
test: update LinkedFileTransferHelperTest to use Set for returned ent…
UmutAkbayin Aug 3, 2025
f0e59a0
docs: clarify definition of "reachable" for linked files in file tran…
UmutAkbayin Aug 3, 2025
540fb72
chore: add line for separation
UmutAkbayin Aug 3, 2025
1e4e08c
refactor: remove requireNonNull
UmutAkbayin Aug 3, 2025
3863c2c
docs: update file transfer documentation for clarity and consistency
UmutAkbayin Aug 3, 2025
30c6ef5
refactor: streamline linked file adjustment by using ifPresent for so…
UmutAkbayin Aug 3, 2025
ac3cdd3
chore: move getSourceBibDatabaseContext method to improve code organi…
UmutAkbayin Aug 3, 2025
11d7dbe
chore: fix indentation in module-info.java after rebase
UmutAkbayin Aug 3, 2025
ae369d5
refactor: move clipboard context setting from RightClickMenu to EditA…
UmutAkbayin Aug 3, 2025
dd02975
test: refactor test to align with project standards
UmutAkbayin Aug 9, 2025
cd2cbf5
chore: change indents to 4 spaces to align with project standards
UmutAkbayin Aug 9, 2025
6e24f48
chore: change indents to 4 spaces to align with project standards in …
UmutAkbayin Aug 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions docs/requirements/filed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# File Transfer Between Bib Entries

## File is reachable and should not be copied
`req~logic.externalfiles.file-transfer.reachable-no-copy~1`
When a linked file is reachable from the target context, the system must adjust the relative path in the target entry but must not copy the file again.

Needs: impl

## File is not reachable, but the path is the same
`req~logic.externalfiles.file-transfer.not-reachable-same-path~1`
When a linked file is not reachable from the target context, and the relative path in both source and target entry is the same, the file must be copied to the target context.

Needs: impl

## File is not reachable, and a different path is used
`req~logic.externalfiles.file-transfer.not-reachable-different-path~1`
When a linked file is not reachable from the target context, and the relative path differs between source and target entries, the file must be copied and the directory structure must be created to preserve the relative link.

Needs: impl

<!-- markdownlint-disable-file MD022 -->
15 changes: 15 additions & 0 deletions jabgui/src/main/java/org/jabref/gui/ClipBoardManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.List;
import java.util.Optional;

import javafx.application.Platform;
import javafx.scene.control.TextInputControl;
Expand All @@ -19,6 +20,7 @@
import org.jabref.logic.bibtex.BibEntryWriter;
import org.jabref.logic.bibtex.FieldWriter;
import org.jabref.logic.preferences.CliPreferences;
import org.jabref.model.database.BibDatabaseContext;
import org.jabref.model.database.BibDatabaseMode;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.entry.BibEntryTypesManager;
Expand All @@ -36,8 +38,11 @@ public class ClipBoardManager {
private static final Logger LOGGER = LoggerFactory.getLogger(ClipBoardManager.class);

private static Clipboard clipboard;

private static java.awt.datatransfer.Clipboard primary;

private BibDatabaseContext sourceDatabaseContext;

public ClipBoardManager() {
this(Clipboard.getSystemClipboard(), Toolkit.getDefaultToolkit().getSystemSelection());
}
Expand Down Expand Up @@ -117,6 +122,10 @@ public static String getContentsPrimary() {
return getContents();
}

public Optional<BibDatabaseContext> getSourceBibDatabaseContext() {
Copy link
Member

Choose a reason for hiding this comment

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

Please keep setters and getters together.

Copy link
Author

Choose a reason for hiding this comment

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

Done.

return Optional.ofNullable(sourceDatabaseContext);
}

/**
* Puts content onto the system clipboard.
*
Expand Down Expand Up @@ -166,6 +175,12 @@ public void setContent(List<BibEntry> entries, BibEntryTypesManager entryTypesMa
setContent(builder.toString());
}

public void setSourceBibDatabaseContext(BibDatabaseContext context) {
if (context != null) {
sourceDatabaseContext = context;
}
}
Copy link

Choose a reason for hiding this comment

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

Method allows null input despite not being necessary for operation. This violates the principle of fail-fast and contradicts modern Java practices of explicit null handling.

Copy link
Member

Choose a reason for hiding this comment

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

Why is there no unset of the sourceDatabaseContext in case of null?

If null is never passed: add @NonNull annotation to context and remove check for null. Otherwise add handling of null

Copy link
Author

Choose a reason for hiding this comment

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

Thanks, updated as suggested.


private String serializeEntries(List<BibEntry> entries, BibEntryTypesManager entryTypesManager) throws IOException {
CliPreferences preferences = Injector.instantiateModelOrService(CliPreferences.class);
// BibEntry is not Java serializable. Thus, we need to do the serialization manually
Expand Down
57 changes: 45 additions & 12 deletions jabgui/src/main/java/org/jabref/gui/LibraryTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import org.jabref.gui.collab.DatabaseChangeMonitor;
import org.jabref.gui.dialogs.AutosaveUiManager;
import org.jabref.gui.exporter.SaveDatabaseAction;
import org.jabref.gui.externalfiles.EntryImportHandlerTracker;
import org.jabref.gui.externalfiles.ImportHandler;
import org.jabref.gui.fieldeditors.LinkedFileViewModel;
import org.jabref.gui.importer.actions.OpenDatabaseAction;
Expand All @@ -60,6 +61,7 @@
import org.jabref.logic.ai.AiService;
import org.jabref.logic.citationstyle.CitationStyleCache;
import org.jabref.logic.command.CommandSelectionTab;
import org.jabref.logic.externalfiles.LinkedFileTransferHelper;
import org.jabref.logic.importer.FetcherClientException;
import org.jabref.logic.importer.FetcherException;
import org.jabref.logic.importer.FetcherServerException;
Expand Down Expand Up @@ -822,21 +824,52 @@ private int doCopyEntry(List<BibEntry> selectedEntries) {
}
}

public void pasteEntry() {
List<BibEntry> entriesToAdd;
String content = ClipBoardManager.getContents();
entriesToAdd = importHandler.handleBibTeXData(content);
if (entriesToAdd.isEmpty()) {
entriesToAdd = handleNonBibTeXStringData(content);
}
if (entriesToAdd.isEmpty()) {
return;
}
public void pasteEntry() {
String content = ClipBoardManager.getContents();
List<BibEntry> entriesToAdd = importHandler.handleBibTeXData(content);
if (entriesToAdd.isEmpty()) {
entriesToAdd = handleNonBibTeXStringData(content);
}
if (entriesToAdd.isEmpty()) {
return;
}
copyEntriesWithFeedback(entriesToAdd);
}

importHandler.importEntriesWithDuplicateCheck(bibDatabaseContext, entriesToAdd);
private void copyEntriesWithFeedback(List<BibEntry> entriesToAdd) {
final List<BibEntry> finalEntriesToAdd = entriesToAdd;

EntryImportHandlerTracker tracker = new EntryImportHandlerTracker(finalEntriesToAdd.size());

tracker.setOnFinish(() -> {
int importedCount = tracker.getImportedCount();
int skippedCount = tracker.getSkippedCount();

String targetName = bibDatabaseContext.getDatabasePath()
.map(path -> path.getFileName().toString())
.orElse(Localization.lang("target library"));

if (importedCount == finalEntriesToAdd.size()) {
dialogService.notify(Localization.lang("Pasted %0 entry(s) to %1",
String.valueOf(importedCount), targetName));
} else if (importedCount == 0) {
dialogService.notify(Localization.lang("No entry was pasted to %0", targetName));
} else {
dialogService.notify(Localization.lang("Pasted %0 entry(s) to %1. %2 were skipped",
String.valueOf(importedCount), targetName, String.valueOf(skippedCount)));
}
});

importHandler.importEntriesWithDuplicateCheck(bibDatabaseContext, finalEntriesToAdd, tracker);

if (clipBoardManager.getSourceBibDatabaseContext().isPresent()) {
Copy link
Member

Choose a reason for hiding this comment

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

Use ifPresent and directly use the available context.

Copy link
Author

Choose a reason for hiding this comment

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

Done.

tracker.setOnFinish(() -> LinkedFileTransferHelper
.adjustLinkedFilesForTarget(clipBoardManager.getSourceBibDatabaseContext().get(),
bibDatabaseContext, preferences.getFilePreferences()));
}
}

private List<BibEntry> handleNonBibTeXStringData(String data) {
private List<BibEntry> handleNonBibTeXStringData(String data) {
try {
return this.importHandler.handleStringData(data);
} catch (FetcherException exception) {
Expand Down
8 changes: 8 additions & 0 deletions jabgui/src/main/java/org/jabref/gui/edit/CopyTo.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import org.jabref.gui.actions.SimpleCommand;
import org.jabref.gui.externalfiles.EntryImportHandlerTracker;
import org.jabref.gui.externalfiles.ImportHandler;
import org.jabref.logic.FilePreferences;
import org.jabref.logic.externalfiles.LinkedFileTransferHelper;
import org.jabref.logic.l10n.Localization;
import org.jabref.model.database.BibDatabaseContext;
import org.jabref.model.entry.BibEntry;
Expand All @@ -25,19 +27,22 @@ public class CopyTo extends SimpleCommand {
private final DialogService dialogService;
private final StateManager stateManager;
private final CopyToPreferences copyToPreferences;
private final FilePreferences filePreferences;
private final ImportHandler importHandler;
private final BibDatabaseContext sourceDatabaseContext;
private final BibDatabaseContext targetDatabaseContext;

public CopyTo(DialogService dialogService,
StateManager stateManager,
CopyToPreferences copyToPreferences,
FilePreferences filePreferences,
ImportHandler importHandler,
BibDatabaseContext sourceDatabaseContext,
BibDatabaseContext targetDatabaseContext) {
this.dialogService = dialogService;
this.stateManager = stateManager;
this.copyToPreferences = copyToPreferences;
this.filePreferences = filePreferences;
this.importHandler = importHandler;
this.sourceDatabaseContext = sourceDatabaseContext;
this.targetDatabaseContext = targetDatabaseContext;
Expand Down Expand Up @@ -106,6 +111,9 @@ private void copyEntriesWithFeedback(List<BibEntry> entriesToAdd, BibDatabaseCon
});

importHandler.importEntriesWithDuplicateCheck(targetDatabaseContext, entriesToAdd, tracker);
tracker.setOnFinish(() -> LinkedFileTransferHelper
.adjustLinkedFilesForTarget(sourceDatabaseContext, targetDatabaseContext, filePreferences)
);
}

public Optional<BibEntry> getCrossRefEntry(BibEntry bibEntryToCheck, BibDatabaseContext sourceDatabaseContext) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ public void importEntryWithDuplicateCheck(BibDatabaseContext bibDatabaseContext,
}

private void importEntryWithDuplicateCheck(BibDatabaseContext bibDatabaseContext, BibEntry entry, DuplicateResolverDialog.DuplicateResolverResult decision, EntryImportHandlerTracker tracker) {
BibEntry entryToInsert = cleanUpEntry(bibDatabaseContext, entry);
BibEntry entryToInsert = new BibEntry(cleanUpEntry(bibDatabaseContext, entry));

BackgroundTask.wrap(() -> findDuplicate(bibDatabaseContext, entryToInsert))
.onFailure(e -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public static ContextMenu create(BibEntryTableViewModel entry,

contextMenu.getItems().addAll(
factory.createMenuItem(StandardActions.COPY, new EditAction(StandardActions.COPY, () -> libraryTab, stateManager, undoManager)),
createCopySubMenu(factory, dialogService, stateManager, preferences, clipBoardManager, abbreviationRepository, taskExecutor),
createCopySubMenu(factory, dialogService, stateManager, preferences, libraryTab, clipBoardManager, abbreviationRepository, taskExecutor),
createCopyToMenu(factory, dialogService, stateManager, preferences, libraryTab, importHandler),
factory.createMenuItem(StandardActions.PASTE, new EditAction(StandardActions.PASTE, () -> libraryTab, stateManager, undoManager)),
factory.createMenuItem(StandardActions.CUT, new EditAction(StandardActions.CUT, () -> libraryTab, stateManager, undoManager)),
Expand Down Expand Up @@ -157,7 +157,8 @@ private static Menu createCopyToMenu(ActionFactory factory,
copyToMenu.getItems().addAll(
factory.createCustomMenuItem(
StandardActions.COPY_TO,
new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(), importHandler, sourceDatabaseContext, bibDatabaseContext),
new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(),
preferences.getFilePreferences(), importHandler, sourceDatabaseContext, bibDatabaseContext),
destinationDatabaseName
)
);
Expand All @@ -171,11 +172,14 @@ private static Menu createCopySubMenu(ActionFactory factory,
DialogService dialogService,
StateManager stateManager,
GuiPreferences preferences,
LibraryTab libraryTab,
ClipBoardManager clipBoardManager,
JournalAbbreviationRepository abbreviationRepository,
TaskExecutor taskExecutor) {
Menu copySpecialMenu = factory.createMenu(StandardActions.COPY_MORE);

clipBoardManager.setSourceBibDatabaseContext(libraryTab.getBibDatabaseContext());
Copy link
Member

Choose a reason for hiding this comment

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

This is toatally wrong.

Every thought of switchting tabs? Ever thought about the order of calls? Ever thoght about that there are key bindings such as Ctrl+C?

--> move this to org.jabref.gui.edit.EditAction#execute at the correct place.

Copy link
Author

Choose a reason for hiding this comment

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

Done. I hope the new approach is okay. At least the automatic and manual tests aren't breaking.


copySpecialMenu.getItems().addAll(
factory.createMenuItem(StandardActions.COPY_TITLE, new CopyMoreAction(StandardActions.COPY_TITLE, dialogService, stateManager, clipBoardManager, preferences, abbreviationRepository)),
factory.createMenuItem(StandardActions.COPY_KEY, new CopyMoreAction(StandardActions.COPY_KEY, dialogService, stateManager, clipBoardManager, preferences, abbreviationRepository)),
Expand Down
17 changes: 11 additions & 6 deletions jabgui/src/test/java/org/jabref/gui/edit/CopyToTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ void executeCopyEntriesWithoutCrossRef() {
selectedEntries.add(entry);
when(stateManager.getSelectedEntries()).thenReturn((ObservableList<BibEntry>) selectedEntries);

copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(),
copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(), preferences.getFilePreferences(),
importHandler, sourceDatabaseContext, targetDatabaseContext);

ArgumentCaptor<EntryImportHandlerTracker> trackerCaptor = ArgumentCaptor.forClass(EntryImportHandlerTracker.class);
Expand All @@ -98,7 +98,8 @@ void executeCopyEntriesWithCrossRef() {
selectedEntries.add(entryWithCrossRef);
when(stateManager.getSelectedEntries()).thenReturn((ObservableList<BibEntry>) selectedEntries);

copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(), importHandler, sourceDatabaseContext, targetDatabaseContext);
copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(),
preferences.getFilePreferences(), importHandler, sourceDatabaseContext, targetDatabaseContext);

ArgumentCaptor<EntryImportHandlerTracker> trackerCaptor = ArgumentCaptor.forClass(EntryImportHandlerTracker.class);
copyTo.copyEntriesWithCrossRef(selectedEntries, targetDatabaseContext);
Expand All @@ -111,7 +112,8 @@ void executeCopyEntriesWithCrossRef() {

@Test
void executeGetCrossRefEntry() {
copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(), importHandler, sourceDatabaseContext, targetDatabaseContext);
copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(),
preferences.getFilePreferences(), importHandler, sourceDatabaseContext, targetDatabaseContext);

BibEntry result = copyTo.getCrossRefEntry(entryWithCrossRef, sourceDatabaseContext).orElse(null);

Expand All @@ -125,7 +127,8 @@ void executeExecuteWithoutCrossRef() {
when(stateManager.getSelectedEntries()).thenReturn((ObservableList<BibEntry>) selectedEntries);
when(preferences.getCopyToPreferences().getShouldAskForIncludingCrossReferences()).thenReturn(false);

copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(), importHandler, sourceDatabaseContext, targetDatabaseContext);
copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(),
preferences.getFilePreferences(), importHandler, sourceDatabaseContext, targetDatabaseContext);

ArgumentCaptor<EntryImportHandlerTracker> trackerCaptor = ArgumentCaptor.forClass(EntryImportHandlerTracker.class);
copyTo.execute();
Expand All @@ -140,7 +143,8 @@ void executeExecuteWithCrossRefAndUserIncludes() {
when(preferences.getCopyToPreferences().getShouldAskForIncludingCrossReferences()).thenReturn(true);
when(dialogService.showConfirmationDialogWithOptOutAndWait(anyString(), anyString(), anyString(), anyString(), anyString(), any())).thenReturn(true);

copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(), importHandler, sourceDatabaseContext, targetDatabaseContext);
copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(),
preferences.getFilePreferences(), importHandler, sourceDatabaseContext, targetDatabaseContext);

ArgumentCaptor<EntryImportHandlerTracker> trackerCaptor = ArgumentCaptor.forClass(EntryImportHandlerTracker.class);
copyTo.execute();
Expand All @@ -158,7 +162,8 @@ void executeWithCrossRefAndUserExcludes() {
when(preferences.getCopyToPreferences().getShouldAskForIncludingCrossReferences()).thenReturn(true);
when(dialogService.showConfirmationDialogWithOptOutAndWait(anyString(), anyString(), anyString(), anyString(), anyString(), any())).thenReturn(false);

copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(), importHandler, sourceDatabaseContext, targetDatabaseContext);
copyTo = new CopyTo(dialogService, stateManager, preferences.getCopyToPreferences(),
preferences.getFilePreferences(), importHandler, sourceDatabaseContext, targetDatabaseContext);

ArgumentCaptor<EntryImportHandlerTracker> trackerCaptor = ArgumentCaptor.forClass(EntryImportHandlerTracker.class);
copyTo.execute();
Expand Down
11 changes: 4 additions & 7 deletions jablib/src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -113,17 +113,14 @@
exports org.jabref.logic.git.status;
exports org.jabref.logic.command;

requires java.base;

requires javafx.base;
requires javafx.base;
requires javafx.graphics; // because of javafx.scene.paint.Color
requires afterburner.fx;
requires com.tobiasdiez.easybind;

// for java.awt.geom.Rectangle2D required by org.jabref.logic.pdf.TextExtractor
requires java.desktop;

// SQL
// SQL
requires java.sql;
Copy link
Member

Choose a reason for hiding this comment

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

?!

Copy link
Author

Choose a reason for hiding this comment

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

?? I dont know why this happened. the file was not touched by me. it is also not in my commit history

Copy link
Author

Choose a reason for hiding this comment

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

maybe during rebase or something? idk

Copy link
Author

Choose a reason for hiding this comment

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

Fixed indentation and removal issues in module-info.java. Not ideal for commit history, but a straightforward fix. If you prefer a different approach, please let me know.

requires java.sql.rowset;

Expand Down Expand Up @@ -255,6 +252,6 @@
requires mslinks;
requires org.antlr.antlr4.runtime;
requires org.libreoffice.uno;
requires org.jetbrains.annotations;
// endregion
requires org.jetbrains.annotations;
// endregion
Copy link
Member

Choose a reason for hiding this comment

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

Why is the indent changed? Is this some Cursor generated code?

Copy link
Author

Choose a reason for hiding this comment

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

I'm using Intellij Idea. I have made use of auto-import of the IDE. Don't know why this file was touched.

Copy link
Author

Choose a reason for hiding this comment

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

Fixed indentation and removal issues in module-info.java. Not ideal for commit history, but a straightforward fix. If you prefer a different approach, please let me know.

}
Loading
Loading