Skip to content

Fix Nullwarnings - B#14802

Merged
calixtus merged 6 commits into
mainfrom
fix-nullables-b
Jan 5, 2026
Merged

Fix Nullwarnings - B#14802
calixtus merged 6 commits into
mainfrom
fix-nullables-b

Conversation

@calixtus

@calixtus calixtus commented Jan 4, 2026

Copy link
Copy Markdown
Member

User description

Follow up to #14116

Steps to test

Run JabRef

Mandatory checks

  • I own the copyright of the code submitted and I license it under the MIT license
  • 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 described the change in CHANGELOG.md in a way that is understandable for the average user (if change is visible to the user)
  • [.] I checked the user documentation: Is the information available and up to date? If not, I created an issue at https://github.com/JabRef/user-documentation/issues or, even better, I submitted a pull request updating file(s) in https://github.com/JabRef/user-documentation/tree/main/en.

PR Type

Enhancement


Description

  • Add nullability annotations to improve null-safety across multiple model classes

  • Replace manual null checks with Optional-based patterns for cleaner code

  • Update JavaDoc comments to use JSpecify format (/// instead of /** */)

  • Mark classes and methods with @NullMarked and @Nullable/@nonnull annotations


Diagram Walkthrough

flowchart LR
  A["StringUtil methods"] -->|Add @Nullable annotations| B["Parameter null-safety"]
  C["FieldChange class"] -->|Add @NullMarked and @Nullable fields| D["Field null-safety"]
  E["BibDatabase methods"] -->|Replace null checks with Optional| F["Cleaner null handling"]
  G["BibEntry getCitationKey"] -->|Use Optional.ofNullable| H["Functional approach"]
  I["MetaData fields"] -->|Add @Nullable annotations| J["Property null-safety"]
Loading

File Walkthrough

Relevant files
Enhancement
StringUtil.java
Add nullability annotations to string utility methods       

jablib/src/main/java/org/jabref/logic/util/strings/StringUtil.java

  • Add imports for @NonNull and @Nullable annotations from jspecify
  • Annotate isNullOrEmpty() parameter with @Nullable
  • Annotate isBlank() string parameter with @Nullable
  • Annotate isBlank(Optional) parameter with @NonNull
+5/-3     
FieldChange.java
Apply @NullMarked and mark nullable field values                 

jablib/src/main/java/org/jabref/model/FieldChange.java

  • Replace @NonNull import with @NullMarked and @Nullable imports
  • Add class-level @NullMarked annotation
  • Mark oldValue and newValue fields with @Nullable
  • Remove @NonNull annotations from constructor parameters (implicit via
    @NullMarked)
  • Annotate getter return types with @Nullable
+8/-6     
BibDatabase.java
Refactor null handling with Optional patterns                       

jablib/src/main/java/org/jabref/model/database/BibDatabase.java

  • Mark preamble and sharedDatabaseID fields with @Nullable
  • Convert getPreamble() to use Optional.ofNullable().filter() pattern
  • Add @NonNull return type annotation to getPreamble()
  • Mark setPreamble() parameter with @Nullable
  • Change resolveString() return type from String to Optional
  • Update resolveContent() to handle Optional from resolveString()
  • Convert JavaDoc comments to JSpecify format (/// instead of /** */)
+22/-27 
BibEntry.java
Refactor getCitationKey to use Optional pattern                   

jablib/src/main/java/org/jabref/model/entry/BibEntry.java

  • Add @NonNull return type annotation to getCitationKey()
  • Replace manual null check with Optional.ofNullable().filter() pattern
  • Convert JavaDoc comment to JSpecify format (/// instead of /** */)
+4/-9     
FieldChangedEvent.java
Add nullability annotations to event method                           

jablib/src/main/java/org/jabref/model/entry/event/FieldChangedEvent.java

  • Add import for @Nullable annotation
  • Annotate computeMajorCharacterChange() parameters with @Nullable
+3/-1     
MetaData.java
Mark metadata fields as nullable                                                 

jablib/src/main/java/org/jabref/model/metadata/MetaData.java

  • Add import for @Nullable annotation
  • Remove unused Logger import and field
  • Mark multiple fields with @Nullable: encoding, saveOrder,
    defaultCiteKeyPattern, saveActions, mode,
    librarySpecificFileDirectory, versionDBStructure
+9/-10   

@calixtus calixtus added the dev: code-quality Issues related to code or architecture decisions label Jan 4, 2026
@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Jan 4, 2026

Copy link
Copy Markdown
Contributor

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

  • Update
Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Jan 4, 2026

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Learned
best practice
Maintain consistent documentation comment style

The conversion from JavaDoc (/ /) to JSpecify format (///) is inconsistent -
only some comments were converted while others remain in JavaDoc format. Either
convert all documentation comments to the new format or keep the existing
JavaDoc style for consistency.
*

jablib/src/main/java/org/jabref/model/database/BibDatabase.java [304-307]

-/// Returns the database's preamble.
-/// If the preamble text consists only of whitespace, then also an empty optional is returned.
+/**
+ * Returns the database's preamble.
+ * If the preamble text consists only of whitespace, then also an empty optional is returned.
+ */
 @NonNull
 public synchronized Optional<String> getPreamble() {
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why:
Relevant best practice - Use consistent comment style throughout the codebase. When converting documentation comments, maintain the same format for all similar comments in the file.

Low
Use proper JavaDoc reference syntax

The reference syntax [BibEntry#getAuthorTitleYear(int)] is not standard JavaDoc
format. Use {@link BibEntry#getAuthorTitleYear(int)} for proper
cross-referencing, or keep the original JavaDoc comment style.

jablib/src/main/java/org/jabref/model/entry/BibEntry.java [415-417]

-/// If not present, [BibEntry#getAuthorTitleYear(int)] can be used
+/**
+ * If not present, {@link BibEntry#getAuthorTitleYear(int)} can be used
+ */
 @NonNull
 public Optional<String> getCitationKey() {
  • Apply / Chat
Suggestion importance[1-10]: 5

__

Why:
Relevant best practice - Use proper JavaDoc reference syntax when referring to methods or classes in documentation. The standard JavaDoc format uses {@link ClassName#methodName} for cross-references.

Low
  • Update

@subhramit

Copy link
Copy Markdown
Member

capturing current state null warnings here for reference

Details
> Task :jablib:compileTestJava
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/event/EventListenerTest.java:14: warning: [NullAway] @NonNull field addedEntries not initialized
    private List<BibEntry> addedEntries;
                           ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/event/EventListenerTest.java:15: warning: [NullAway] @NonNull field firstInsertedEntry not initialized
    private BibEntry firstInsertedEntry;
                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/event/EventListenerTest.java:16: warning: [NullAway] @NonNull field removedEntries not initialized
    private List<BibEntry> removedEntries;
                           ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/event/EventListenerTest.java:17: warning: [NullAway] @NonNull field changedEntry not initialized
    private BibEntry changedEntry;
                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/event/EventListenerTest.java:22: warning: [NullAway] assigning @Nullable expression to @NonNull field
        this.firstInsertedEntry = event.getFirstEntry();
                                ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/groups/TexGroupTest.java:54: warning: [NullAway] dereferenced expression auxFile.getParent() is @Nullable
        metaData.setLatexFileDirectory(user, auxFile.getParent().toString());
                                                                ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/texparser/CitationTest.java:27: warning: [NullAway] initializer method does not guarantee @NonNull field key (line 22) is initialized along all control-flow paths (remember to check for exceptions or early returns).
    void init() {
         ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/TreeNodeTest.java:638: warning: [NullAway] returning @Nullable expression from method with @NonNull return type
            return null;
            ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/EntryLinkListTest.java:71: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        links = EntryLinkList.parse(null, database);
                                    ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorTest.java:83: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                new Author("", "", null, "{Company Name, LLC}", null).getFamilyName());
                                   ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorTest.java:83: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                new Author("", "", null, "{Company Name, LLC}", null).getFamilyName());
                                                                ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/DateTest.java:124: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        assertThrows(NullPointerException.class, () -> Date.parse(null));
                                                                  ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/BibEntryTest.java:54: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        assertThrows(NullPointerException.class, () -> entry.setType(null));
                                                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/BibEntryTest.java:318: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        assertTrue(e.allFieldsPresent(requiredFields, null));
                                                      ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/BibEntryTest.java:321: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        assertFalse(e.allFieldsPresent(requiredFields, null));
                                                       ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/BibEntryTest.java:333: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        assertTrue(e.allFieldsPresent(requiredFields, null));
                                                      ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/BibEntryTest.java:336: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        assertFalse(e.allFieldsPresent(requiredFields, null));
                                                       ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/BibEntryTest.java:342: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        assertThrows(NullPointerException.class, () -> e.setCitationKey(null));
                                                                        ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/BibEntryTest.java:390: warning: [NullAway] passing @Nullable parameter '(Keyword) null' where @NonNull is required
        assertThrows(NullPointerException.class, () -> entry.addKeyword((Keyword) null, ','));
                                                                        ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/identifier/DOITest.java:326: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        assertThrows(NullPointerException.class, () -> new DOI(null));
                                                               ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/BibtexStringTest.java:94: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        BibtexString bs = new BibtexString("SomeName", null);
                                                       ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:31: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
            new Author("Mu{\\d{h}}ammad", "M.", null, "al-Khw{\\={a}}rizm{\\={i}}", null);
                                                ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:31: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
            new Author("Mu{\\d{h}}ammad", "M.", null, "al-Khw{\\={a}}rizm{\\={i}}", null);
                                                                                    ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:33: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
            new Author("Corrado", "C.", null, "B{\\\"o}hm", null);
                                        ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:33: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
            new Author("Corrado", "C.", null, "B{\\\"o}hm", null);
                                                            ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:35: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
            new Author("Kurt", "K.", null, "G{\\\"{o}}del", null);
                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:35: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
            new Author("Kurt", "K.", null, "G{\\\"{o}}del", null);
                                                            ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:37: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
            new Author(null, null, null, "{The Ban\\={u} M\\={u}s\\={a} brothers}", null);
                       ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:37: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
            new Author(null, null, null, "{The Ban\\={u} M\\={u}s\\={a} brothers}", null);
                             ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:37: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
            new Author(null, null, null, "{The Ban\\={u} M\\={u}s\\={a} brothers}", null);
                                   ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:37: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
            new Author(null, null, null, "{The Ban\\={u} M\\={u}s\\={a} brothers}", null);
                                                                                    ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:47: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                    null, null, null, "{{\\L{}}ukasz Micha\\l{}}", null));
                    ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:47: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                    null, null, null, "{{\\L{}}ukasz Micha\\l{}}", null));
                          ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:47: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                    null, null, null, "{{\\L{}}ukasz Micha\\l{}}", null));
                                ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:47: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                    null, null, null, "{{\\L{}}ukasz Micha\\l{}}", null));
                                                                   ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:427: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author(null, null, null, "{JabRef Developers}", null);
                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:427: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author(null, null, null, "{JabRef Developers}", null);
                                           ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:427: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author(null, null, null, "{JabRef Developers}", null);
                                                 ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:427: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author(null, null, null, "{JabRef Developers}", null);
                                                                              ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:433: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author company = new Author(null, null, null, "{JabRef Developers}", null);
                                    ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:433: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author company = new Author(null, null, null, "{JabRef Developers}", null);
                                          ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:433: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author company = new Author(null, null, null, "{JabRef Developers}", null);
                                                ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:433: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author company = new Author(null, null, null, "{JabRef Developers}", null);
                                                                             ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:434: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author person = new Author("Stefan", "S.", null, "Kolb", null);
                                                   ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:434: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author person = new Author("Stefan", "S.", null, "Kolb", null);
                                                                 ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:442: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author(null, null, null, "{JabRef Developers on Fire}", null);
                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:442: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author(null, null, null, "{JabRef Developers on Fire}", null);
                                           ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:442: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author(null, null, null, "{JabRef Developers on Fire}", null);
                                                 ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:442: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author(null, null, null, "{JabRef Developers on Fire}", null);
                                                                                      ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:449: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author("{\\relax Ch}ristoph", "{\\relax Ch}.", null, "Cholera", null);
                                                                             ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:449: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author("{\\relax Ch}ristoph", "{\\relax Ch}.", null, "Cholera", null);
                                                                                              ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:671: warning: [NullAway] passing @Nullable parameter 'givenName.isEmpty() ? null : givenName' where @NonNull is required
                givenName.isEmpty() ? null : givenName,
                                    ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:672: warning: [NullAway] passing @Nullable parameter 'givenNameAbbr.isEmpty() ? null : givenNameAbbr' where @NonNull is required
                givenNameAbbr.isEmpty() ? null : givenNameAbbr,
                                        ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:673: warning: [NullAway] passing @Nullable parameter 'namePrefix.isEmpty() ? null : namePrefix' where @NonNull is required
                namePrefix.isEmpty() ? null : namePrefix,
                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:674: warning: [NullAway] passing @Nullable parameter 'familyName.isEmpty() ? null : familyName' where @NonNull is required
                familyName.isEmpty() ? null : familyName,
                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:675: warning: [NullAway] passing @Nullable parameter 'nameSuffix.isEmpty() ? null : nameSuffix' where @NonNull is required
                nameSuffix.isEmpty() ? null : nameSuffix
                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:683: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author("ʿAbdallāh", "ʿ.", null, "al-Ṭūlī", null);
                                                        ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:683: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author("ʿAbdallāh", "ʿ.", null, "al-Ṭūlī", null);
                                                                         ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:692: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                        new Author("Z.", "Z.", null, "Yao", null),
                                               ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:692: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                        new Author("Z.", "Z.", null, "Yao", null),
                                                            ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:693: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                        new Author("D. S.", "D. S.", null, "Weld", null),
                                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:693: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                        new Author("D. S.", "D. S.", null, "Weld", null),
                                                                   ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:694: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                        new Author("W-P.", "W-P.", null, "Chen", null),
                                                   ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:694: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                        new Author("W-P.", "W-P.", null, "Chen", null),
                                                                 ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:695: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                        new Author("H.", "H.", null, "Sun", null)
                                               ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:695: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
                        new Author("H.", "H.", null, "Sun", null)
                                                            ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:786: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author("Alexander der Große", "A. d. G.", null, "Canon der Barbar", null);
                                                                        ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:786: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        Author expected = new Author("Alexander der Große", "A. d. G.", null, "Canon der Barbar", null);
                                                                                                  ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:790: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        expected = new Author("Alexander H. G.", "A. H. G.", null, "Rinnooy Kan", null);
                                                             ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:790: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        expected = new Author("Alexander H. G.", "A. H. G.", null, "Rinnooy Kan", null);
                                                                                  ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:793: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        expected = new Author("Alexander Hendrik George", "A. H. G.", null, "Rinnooy Kan", null);
                                                                      ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:793: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        expected = new Author("Alexander Hendrik George", "A. H. G.", null, "Rinnooy Kan", null);
                                                                                           ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:797: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        expected = new Author("José María", "J. M.", null, "Rodriguez Fernandez", null);
                                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:797: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        expected = new Author("José María", "J. M.", null, "Rodriguez Fernandez", null);
                                                                                  ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:809: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList authorList = AuthorList.of(new Author(null, null, null, null, null));
                                                         ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:809: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList authorList = AuthorList.of(new Author(null, null, null, null, null));
                                                               ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:809: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList authorList = AuthorList.of(new Author(null, null, null, null, null));
                                                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:809: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList authorList = AuthorList.of(new Author(null, null, null, null, null));
                                                                           ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:809: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList authorList = AuthorList.of(new Author(null, null, null, null, null));
                                                                                 ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:821: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList firstAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                   ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:821: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList firstAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                         ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:821: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList firstAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                               ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:821: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList firstAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:822: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList secondAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                    ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:822: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList secondAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                          ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:822: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList secondAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                                ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:822: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList secondAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                                      ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:829: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList firstAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                   ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:829: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList firstAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                         ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:829: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList firstAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                               ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:829: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList firstAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:830: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList secondAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                    ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:830: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList secondAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                          ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:830: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList secondAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                                ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:830: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList secondAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                                      ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:831: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList thirdAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                   ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:831: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList thirdAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                         ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:831: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList thirdAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                               ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:831: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList thirdAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                                     ^
    (see http://t.uber.com/nullaway )
/home/runner/work/jabref/jabref/jablib/src/test/java/org/jabref/model/entry/AuthorListTest.java:839: warning: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
        AuthorList firstAuthorList = AuthorList.of(new Author("A", null, null, null, null));
                                                                   ^

@calixtus

calixtus commented Jan 5, 2026

Copy link
Copy Markdown
Member Author

capturing current state null warnings here for reference
Details

I think nullaway only prints the first ~100 warnings.

@calixtus calixtus enabled auto-merge January 5, 2026 14:03
@koppor

koppor commented Jan 5, 2026

Copy link
Copy Markdown
Member

JBang error was:

[jbang] Resolving dependencies...
[jbang]    org.jabref:jablib:6.0-SNAPSHOT
[jbang]    info.picocli:picocli:4.7.7
[jbang]    com.fasterxml.jackson.core:jackson-annotations:2.20
[jbang]    org.apache.logging.log4j:log4j-to-slf4j:2.25.3
[jbang]    org.eclipse.lsp4j:org.eclipse.lsp4j:0.24.0
[jbang]    org.slf4j:jul-to-slf4j:2.0.17
[jbang]    org.slf4j:slf4j-api:2.0.17
[jbang]    org.tinylog:slf4j-tinylog:2.7.0
[jbang]    org.tinylog:tinylog-impl:2.7.0
[jbang] Dependencies resolved
[jbang] Building jar for JabLsLauncher.java...
/home/runner/work/jabref/jabref/jablib/src/main/java/org/jabref/logic/util/strings/StringUtil.java:25: error: cannot find symbol
import org.apache.commons.lang3.Strings;
                               ^
  symbol:   class Strings
  location: package org.apache.commons.lang3
/home/runner/work/jabref/jabref/jablib/src/main/java/org/jabref/logic/util/strings/StringUtil.java:744: error: package Strings does not exist
        return Strings.CI.contains(text, searchString);
                      ^

That dependency was introduced at #14287

grafik

Interestingly, the line before works:

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Strings;

@calixtus calixtus added this pull request to the merge queue Jan 5, 2026
Merged via the queue into main with commit 3c0b62e Jan 5, 2026
53 checks passed
@calixtus calixtus deleted the fix-nullables-b branch January 5, 2026 15:10
Siedlerchr added a commit that referenced this pull request Jan 6, 2026
…es/jablib/src/main/resources/csl-locales-50e46eb

* upstream/main: (119 commits)
  chore(sbom): update CycloneDX SBOM files (#14813)
  Add "preferences" constant to ServiceLocator initialization (#14810)
  adjust bom generation to only use runtime (#14809)
  Remove (nearly) obsolete hint in ghprcomment.yml
  Update dependency org.apache.commons:commons-lang3 to v3.20.0 (#14808)
  Fix Nullwarnings - B (#14802)
  Add https
  Add ouput
  Fix stale (again)
  Fix output
  Fix re-downloading of ltwa file
  Chore(deps): Bump jablib/src/main/resources/csl-styles from `9bb1fc1` to `0201999` (#14796)
  Chore(deps): Bump org.ow2.asm:asm from 9.9 to 9.9.1 in /versions (#14799)
  Chore(deps): Bump org.controlsfx:controlsfx in /versions (#14800)
  Chore(deps): Bump org.postgresql:postgresql in /versions (#14798)
  Chore(deps): Bump jablib/src/main/abbrv.jabref.org (#14795)
  Chore(deps): Bump org.apache.logging.log4j:log4j-to-slf4j in /versions (#14797)
  Chore(deps): Bump org.apache.commons:commons-text from 1.14.0 to 1.15.0 in /versions (#14801)
  fix postgres for arm (#14792)
  Docs: minor grammar and clarity fixes in privacy policy (#14786)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dev: code-quality Issues related to code or architecture decisions Review effort 2/5

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants