Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
190 commits
Select commit Hold shift + click to select a range
c215fa2
Mechanical jspecify swap: fdb-record-layer-core cascades-core packages
arnaud-lacurie Aug 29, 2026
8dc2276
Mechanical jspecify swap: fdb-record-layer-core cascades-values packages
arnaud-lacurie Aug 29, 2026
fd132f0
Mechanical jspecify swap: fdb-record-layer-core cascades-rules and ma…
arnaud-lacurie Aug 28, 2026
5dcb393
Mechanical jspecify swap: fdb-record-layer-core non-cascades query-pl…
arnaud-lacurie Aug 29, 2026
5f33551
Mechanical jspecify swap: fdb-record-layer-core provider/foundationdb…
arnaud-lacurie Aug 29, 2026
3e05ac8
Mechanical jspecify swap: fdb-record-layer-core provider indexes/keys…
arnaud-lacurie Aug 28, 2026
2ac12fc
Mechanical jspecify swap: fdb-record-layer-core root/metadata/cursors…
arnaud-lacurie Aug 29, 2026
6322176
Wire up NullAway for fdb-record-layer-core
arnaud-lacurie Aug 29, 2026
4729024
Fix NullAway errors in cascades core/rules/combinatorics packages
arnaud-lacurie Sep 2, 2026
2758c30
Fix NullAway errors in cascades.values and values.simplification
arnaud-lacurie Sep 2, 2026
6aac226
Fix NullAway errors in expressions/query.plan.{plans,planning,sorting…
arnaud-lacurie Sep 2, 2026
0b3a24d
Fix NullAway errors in QueryToKeyMatcher.java and RankComparisons.java
arnaud-lacurie Sep 2, 2026
ab24234
Fix NullAway errors in ComposedBitmapIndexCursor.java and ComposedBit…
arnaud-lacurie Sep 2, 2026
8950419
Fix NullAway errors in ComposedBitmapIndexAggregate.java and Composed…
arnaud-lacurie Sep 3, 2026
8d3fe9a
Fix NullAway errors in TextScan.java
arnaud-lacurie Sep 3, 2026
cb4f617
Fix first batch of RecordQueryPlanner.java NullAway errors
arnaud-lacurie Sep 3, 2026
c9ae4b4
Fix second batch of RecordQueryPlanner.java NullAway errors
arnaud-lacurie Sep 3, 2026
fc67a3f
Fix final batch of RecordQueryPlanner.java NullAway errors
arnaud-lacurie Sep 3, 2026
6b4ccb8
Fix NullAway errors in provider.foundationdb core/timer/context files…
arnaud-lacurie Sep 2, 2026
40a06d1
Fix NullAway errors in FDBStoreTimer.java
arnaud-lacurie Sep 2, 2026
bc6380f
Fix NullAway errors in KeyValueCursorBase.java
arnaud-lacurie Sep 2, 2026
2215a1c
Fix NullAway errors in FDBRecordStoreBase.java
arnaud-lacurie Sep 2, 2026
6499a71
Fix NullAway errors in SplitHelper.java
arnaud-lacurie Sep 3, 2026
6b9706f
Fix NullAway errors in FDBRecordStore.java and FDBStoredRecordBuilder…
arnaud-lacurie Sep 3, 2026
32f09c1
Fix NullAway errors in FDBDatabaseRunnerImpl, FDBExceptions, FDBRecor…
arnaud-lacurie Sep 3, 2026
5a4bc53
Fix NullAway errors in remaining small provider.foundationdb files
arnaud-lacurie Sep 4, 2026
4f2060c
Fix NullAway errors in online-indexing subsystem (Indexing*/OnlineInd…
arnaud-lacurie Sep 2, 2026
d97f41d
Fix NullAway errors in cursors and provider.common packages
arnaud-lacurie Sep 2, 2026
b1d5c9f
Fix NullAway errors in vector/atomic-mutation index maintainers
arnaud-lacurie Sep 2, 2026
8d1e14f
Fix NullAway errors in ValueIndexScrubbingTools{Missing,Dangling}
arnaud-lacurie Sep 2, 2026
82ee688
Fix NullAway errors in SlidingWindowIndexMaintainer
arnaud-lacurie Sep 2, 2026
944b46d
Fix NullAway errors in MultidimensionalIndexMaintainer and start Rank…
arnaud-lacurie Sep 2, 2026
cf57ff7
Fix remaining NullAway errors in RankIndexMaintainer
arnaud-lacurie Sep 3, 2026
8f03fee
Fix remaining NullAway errors in provider.foundationdb.indexes
arnaud-lacurie Sep 3, 2026
f6df946
Fix NullAway errors in KeySpaceDirectory
arnaud-lacurie Sep 3, 2026
5eeb7a4
Fix NullAway errors in KeySpacePathSerializer
arnaud-lacurie Sep 3, 2026
ca562fc
Fix NullAway errors in KeySpace
arnaud-lacurie Sep 3, 2026
2a8949a
Fix NullAway errors in ResolvedKeySpacePath
arnaud-lacurie Sep 3, 2026
4b868ba
Fix NullAway errors in KeySpaceTreeResolver
arnaud-lacurie Sep 3, 2026
9cb4841
Fix NullAway errors in PathValue
arnaud-lacurie Sep 3, 2026
626ebbf
Fix NullAway errors in DirectoryLayerDirectory
arnaud-lacurie Sep 3, 2026
3c1e156
Fix NullAway errors in ResolverResult
arnaud-lacurie Sep 3, 2026
7885ab9
Reposition ResolvedKeySpacePath#getResolvedMetadata to match PathValue
arnaud-lacurie Sep 3, 2026
34ac995
Fix NullAway errors in KeySpacePath
arnaud-lacurie Sep 3, 2026
2f40109
Fix NullAway errors in LocatableResolver, ExtendedDirectoryLayer, Sco…
arnaud-lacurie Sep 4, 2026
1070a6b
Fix NullAway errors in ExtendedDirectoryLayer, ScopedDirectoryLayer, …
arnaud-lacurie Sep 4, 2026
76c9878
Fix NullAway errors in cursors.aggregate package and ResolverValidator
arnaud-lacurie Sep 4, 2026
a442312
Fix NullAway errors in record root, metadata, and util packages
arnaud-lacurie Sep 2, 2026
ff6140d
Fix NullAway replaceLeavesMaybe lambda nullability mismatches
arnaud-lacurie Sep 4, 2026
b869a47
Fix more NullAway cross-scope nullability mismatches in cascades
arnaud-lacurie Sep 4, 2026
cb32ac3
Fix remaining cascades NullAway errors (Pair, PrimaryKey/RecordTypes,…
arnaud-lacurie Sep 4, 2026
8bc17c3
Fix NullAway errors in provider.foundationdb store/plan classes
arnaud-lacurie Sep 4, 2026
c624c5b
Fix remaining scope-gap NullAway errors (locking, logging, interning,…
arnaud-lacurie Sep 4, 2026
d201eb6
Fix all remaining NullAway errors in the record.sorting package
arnaud-lacurie Sep 4, 2026
ad796e5
Fix NullAway errors in SortedFileReader
arnaud-lacurie Sep 4, 2026
bf9c94c
Fix cascading NullAway errors from widening handleOneItem's return type
arnaud-lacurie Sep 4, 2026
9771e8d
Fix NullAway errors in hand-written testFixtures sources
arnaud-lacurie Sep 5, 2026
569ef23
Fix remaining testFixtures NullAway errors (Pair, byte[] continuation…
arnaud-lacurie Sep 5, 2026
afe8b1f
Defensively null-check ValueComparison#getValue() to silence SpotBugs…
arnaud-lacurie Sep 5, 2026
399741c
Add missing NullAway:ExcludedClasses entries for testFixtures test-re…
arnaud-lacurie Sep 5, 2026
1550153
Fix CommentsIndentation checkstyle violations in cursor/store classes
arnaud-lacurie Sep 5, 2026
bf189bd
Fix CommentsIndentation checkstyle violations in indexes package
arnaud-lacurie Sep 5, 2026
2e4d521
Fix CommentsIndentation checkstyle violations in keyspace package
arnaud-lacurie Sep 5, 2026
d37826f
Fix CommentsIndentation checkstyle violations in cascades/expressions…
arnaud-lacurie Sep 5, 2026
0a170cd
Fix CommentsIndentation checkstyle violations in query/plan/plans pac…
arnaud-lacurie Sep 5, 2026
36a9e3a
Fix remaining PMD violations (CloseResource false positives, Preserve…
arnaud-lacurie Sep 5, 2026
359d353
Fix NullAway errors in VersionIndexTest
arnaud-lacurie Sep 5, 2026
d65225d
Fix NullAway errors in UnnestedRecordTypeTest
arnaud-lacurie Sep 5, 2026
0d92e57
Fix NullAway errors in RankIndexTest
arnaud-lacurie Sep 5, 2026
66e85aa
Fix NullAway errors in RemoteFetchTest; simplify RankIndexTest contin…
arnaud-lacurie Sep 5, 2026
9c8fefc
Fix remaining NullAway continuation error in RemoteFetchTest.scanInde…
arnaud-lacurie Sep 5, 2026
148ccc3
Fix NullAway errors in SplitHelperTest
arnaud-lacurie Sep 5, 2026
7c117fe
Suppress residual NullAway byte[] mismatch in SplitHelperTest load/sc…
arnaud-lacurie Sep 5, 2026
1c04466
Fix NullAway errors in SyntheticRecordPlannerIndexUpdatesTest
arnaud-lacurie Sep 5, 2026
8b1ca55
Fix NullAway errors in SortCursorTests
arnaud-lacurie Sep 5, 2026
af2ccc5
Fix NullAway errors in OnlineIndexerIndexFromIndexTest and OnlineInde…
arnaud-lacurie Sep 5, 2026
5c256d9
Fix NullAway errors in ScanRecordKeysTest
arnaud-lacurie Sep 5, 2026
b77c3ff
Fix NullAway errors in AsyncLockCursorTest
arnaud-lacurie Sep 5, 2026
66d96b5
Fix NullAway errors in PendingWritesQueueTest and PendingWritesQueueS…
arnaud-lacurie Sep 6, 2026
75a9be7
Fix NullAway errors in ChainedCursorTest and EnvironmentKeySpace
arnaud-lacurie Sep 6, 2026
7c13f5b
Fix residual NullAway continuation mismatch in ChainedCursorTest.newC…
arnaud-lacurie Sep 6, 2026
4aed98a
Fix NullAway errors in FDBComparatorPlanTest
arnaud-lacurie Sep 6, 2026
4a87b23
Fix NullAway errors in FDBModificationQueryTest and OutsideValueLikeI…
arnaud-lacurie Sep 6, 2026
29b6182
Fix NullAway errors in FDBRecordStorePerformanceTest and FDBQueryGrap…
arnaud-lacurie Sep 6, 2026
ca6f1fe
Fix qualified-annotation syntax and add method-level @Nullable to get…
arnaud-lacurie Sep 6, 2026
8e91735
Fix NullAway errors in FDBRecordStoreEstimateSizeTest and ArrayAggVal…
arnaud-lacurie Sep 6, 2026
77b5f60
Fix NullAway errors in FDBSimpleJoinQueryTest and ResolverMappingDige…
arnaud-lacurie Sep 6, 2026
98b21c9
Fix NullAway errors in OnlineIndexerTest, FDBRecordStoreRepairHeaderT…
arnaud-lacurie Sep 6, 2026
1db763f
Fix NullAway errors in ExtendedDirectoryLayerTest, GuardiannVectorInd…
arnaud-lacurie Sep 6, 2026
885890a
Fix NullAway errors in RecordCursorTest and SizeStatisticsGroupingCur…
arnaud-lacurie Sep 5, 2026
c29b714
Fix NullAway errors in FDBRecordStoreTest; fix remaining call-site su…
arnaud-lacurie Sep 5, 2026
d9e68b5
Fix NullAway errors in TextIndexTest and BitmapValueIndexTest
arnaud-lacurie Sep 5, 2026
ac2b321
Fix NullAway errors in DeleteStoreTest and FDBRecordStoreScanLimitTest
arnaud-lacurie Sep 5, 2026
3dfda4c
Fix NullAway errors in KeySpacePathSerializerTest
arnaud-lacurie Sep 5, 2026
1237b58
Fix remaining KeySpacePathSerializerTest gap; fix NullAway errors in …
arnaud-lacurie Sep 5, 2026
c0da8ea
Fix NullAway errors in FunctionKeyIndexTest
arnaud-lacurie Sep 5, 2026
089665d
Fix NullAway errors in LockRegistryTest
arnaud-lacurie Sep 6, 2026
3c17d48
Fix NullAway errors in FDBVersionsQueryTest
arnaud-lacurie Sep 6, 2026
d4df1fb
Fix NullAway error in AutoContinuingCursorTest
arnaud-lacurie Sep 6, 2026
2f9c247
Fix NullAway errors in FDBCoveringIndexQueryTest and SlidingWindowInd…
arnaud-lacurie Sep 6, 2026
f1877bd
Fix NullAway errors in ConditionalCascadesRuleTest, OnlineIndexerBuil…
arnaud-lacurie Sep 6, 2026
c4a8a41
Fix NullAway errors in CastValueTest, ValidationTestUtils, OnlineInde…
arnaud-lacurie Sep 6, 2026
602c937
Fix NullAway errors in ScopedDirectoryLayerTest, RemoteFetchOldVersio…
arnaud-lacurie Sep 6, 2026
241866e
Fix NullAway errors in TempTableTestBase, PlanPartitionsTest, Guardia…
arnaud-lacurie Sep 6, 2026
cb4f1ec
Fix follow-on NullAway error in PlanPartitionsTest
arnaud-lacurie Sep 6, 2026
faf4eb2
Fix NullAway errors in LeaderboardIndexTest, FDBRecordStoreIndexTest,
arnaud-lacurie Sep 5, 2026
cecd397
Fix remaining NullAway errors in FDBRecordStoreIndexTest, MemoExpress…
arnaud-lacurie Sep 5, 2026
2e90777
Fix NullAway errors in FDBReverseDirectoryCacheTest and FDBCrossRecor…
arnaud-lacurie Sep 5, 2026
b223e96
Fix NullAway errors in FDBRepeatedFieldQueryTest, OnlineIndexerPendin…
arnaud-lacurie Sep 5, 2026
b3f5d2a
Fix NullAway errors in KeySpacePathDataExportTest, OnlineIndexerBuild…
arnaud-lacurie Sep 5, 2026
2e3bcda
Fix NullAway errors in ResolvedKeySpacePathTest, SynchronizedSessionT…
arnaud-lacurie Sep 5, 2026
b6f6605
Fix NullAway errors in OnlineIndexerSimpleTest, LocatableResolverTest,
arnaud-lacurie Sep 6, 2026
75452f9
Fix NullAway errors in OuterJoinExpressionTest, SyntheticRecordPlanne…
arnaud-lacurie Sep 6, 2026
2b133ab
Fix regressions in QueryExpressionTest and ConcatCursorTest surfaced …
arnaud-lacurie Sep 6, 2026
49faa31
Fix NullAway errors in UnorderedUnionCursorTest, FDBRecordStoreSplitR…
arnaud-lacurie Sep 5, 2026
f498403
Fix NullAway errors in FDBRecordStoreSplitRecordsTest and FDBStoreTim…
arnaud-lacurie Sep 5, 2026
ef65440
Fix NullAway errors in UnorderedUnionCursorTest and FDBRecordStoreQue…
arnaud-lacurie Sep 5, 2026
8178e68
Fix NullAway errors in RecordTypeKeyTest
arnaud-lacurie Sep 5, 2026
bdbc36a
Fix NullAway errors in FDBOrQueryToUnionTest
arnaud-lacurie Sep 5, 2026
1e6a290
Fix NullAway errors in OnlineIndexerUniqueIndexTest
arnaud-lacurie Sep 5, 2026
40749b0
Fix NullAway errors in TransformedRecordSerializerTest, ValueIndexMai…
arnaud-lacurie Sep 6, 2026
de3e74a
Fix NullAway errors in FDBDatabaseTest, FDBMetaDataStoreTest, FDBType…
arnaud-lacurie Sep 6, 2026
c4f2635
Fix NullAway errors in FDBFilterCoalescingQueryTest, FDBRecordStoreNu…
arnaud-lacurie Sep 6, 2026
440c246
Fix NullAway errors in PermutedMinMaxIndexTest and SlowMultidimension…
arnaud-lacurie Sep 6, 2026
cce8346
Fix NullAway errors in ExplainPlanVisitorTest and TypeRepositoryTest
arnaud-lacurie Sep 6, 2026
eebdd20
Fix NullAway errors in SyntheticRecordPlannerFunctionJoinsTest, Synth…
arnaud-lacurie Sep 6, 2026
bae4756
Fix a latent null-safety gap in FDBDatabaseTest.getReadVersion expose…
arnaud-lacurie Sep 6, 2026
73598af
Move ExplodePlanTest's suppression comment above the annotation
arnaud-lacurie Sep 6, 2026
95d7991
Fix NullAway errors in KeyValueCursorTest, ThrottledIteratorTest, Onl…
arnaud-lacurie Sep 5, 2026
30a5bf3
Fix NullAway errors in RemoteFetchIndexScanTest, FDBRecordStoreUnique…
arnaud-lacurie Sep 5, 2026
3fe1ba1
Fix NullAway errors in RecordValidateAndRepairTest
arnaud-lacurie Sep 5, 2026
7b7db65
Fix NullAway errors in FDBRecordStoreDeleteWhereTest
arnaud-lacurie Sep 5, 2026
0a323f4
Fix NullAway errors in FDBSimpleQueryGraphTest
arnaud-lacurie Sep 5, 2026
ea942c8
Fix NullAway errors in VectorIndexEngineTestSuite
arnaud-lacurie Sep 5, 2026
954ed5e
Fix NullAway errors in FDBRecordStoreRepairTest
arnaud-lacurie Sep 5, 2026
ada5969
Fix NullAway errors in QueryPlanCursorTest
arnaud-lacurie Sep 5, 2026
dcfa388
Fix NullAway errors in VariadicFunctionValueTest
arnaud-lacurie Sep 5, 2026
7fbca26
Fix NullAway errors in FallbackCursorTest
arnaud-lacurie Sep 5, 2026
53278f0
Fix NullAway errors in FDBReturnedRecordLimitQueryTest
arnaud-lacurie Sep 5, 2026
23a3288
Fix NullAway errors in RecordMetaDataBuilderTest
arnaud-lacurie Sep 5, 2026
9d34f3d
Fix NullAway errors in StringInterningLayerTest
arnaud-lacurie Sep 5, 2026
8da398a
Fix NullAway errors in SizeStatisticsCollectorTest
arnaud-lacurie Sep 6, 2026
352c5ff
Fix NullAway errors in TypeTest
arnaud-lacurie Sep 6, 2026
2657563
Fix NullAway errors in PendingWritesQueueConcurrencyTest
arnaud-lacurie Sep 6, 2026
f07ad70
Fix NullAway errors in OnlineIndexerBuildUnnestedIndexTest
arnaud-lacurie Sep 6, 2026
4676e85
Fix NullAway errors in AsyncLoadingCacheTest
arnaud-lacurie Sep 6, 2026
4de1c36
Fix NullAway errors in TranslateGraphTest, QueryPlanResultTest
arnaud-lacurie Sep 6, 2026
6e22a64
Fix NullAway errors in TestingResolverFactory
arnaud-lacurie Sep 6, 2026
fe952d7
Fix NullAway errors in HnswVectorIndexIndexingTest
arnaud-lacurie Sep 6, 2026
c9986c7
Fix NullAway errors in OnlineIndexScrubberTest
arnaud-lacurie Sep 6, 2026
e64af39
Fix NullAway error in FDBSelectorPlanTest
arnaud-lacurie Sep 6, 2026
6d97cb5
Fix NullAway error in QueryPredicateTest
arnaud-lacurie Sep 6, 2026
a038301
Fix NullAway errors in BooleanValueTest, FDBOrderingQueryTest
arnaud-lacurie Sep 6, 2026
0f97f0a
Fix NullAway error in SlidingWindowWithPredicateTest
arnaud-lacurie Sep 6, 2026
6cd0fb9
Fix NullAway errors in MockedLocalityUtil, MetaDataProtoEditorIntegra…
arnaud-lacurie Sep 6, 2026
a4b0315
Fix NullAway errors in QueryPlanHashTest, FDBRecordStoreIndexTest (qu…
arnaud-lacurie Sep 5, 2026
20b6a89
Fix NullAway errors in FDBRecordStoreStateCacheTest
arnaud-lacurie Sep 5, 2026
fb22ebe
Fix NullAway errors in KeySpaceDirectoryTest; fix duplicate @Test in …
arnaud-lacurie Sep 5, 2026
8aad7f4
Fix NullAway errors in ProbableIntersectionCursorTest
arnaud-lacurie Sep 5, 2026
d664529
Fix NullAway errors in MultidimensionalIndexTestBase
arnaud-lacurie Sep 5, 2026
3cd23e6
Fix NullAway errors in TransactionalRunnerTest
arnaud-lacurie Sep 5, 2026
b94cafc
Fix NullAway errors in RemoteFetchTestBase and FDBRecordStoreOpeningTest
arnaud-lacurie Sep 5, 2026
b9d43f0
Fix NullAway errors in OnlineIndexerMultiTargetTest
arnaud-lacurie Sep 5, 2026
ddab94e
Fix NullAway errors in RecordQueryIndexPlanWithOverScanTest
arnaud-lacurie Sep 5, 2026
d888dcc
Fix NullAway errors in RecursiveCursorTest
arnaud-lacurie Sep 5, 2026
ea42f19
Fix NullAway errors in RecordValidatorTest
arnaud-lacurie Sep 5, 2026
fb4686c
Fix NullAway errors in DedupCursorTest
arnaud-lacurie Sep 5, 2026
c891a8f
Fix NullAway errors in FDBInQueryTest
arnaud-lacurie Sep 5, 2026
d191bd0
Fix NullAway errors in OnlineIndexerBuildValueIndexTest and TaskEvent…
arnaud-lacurie Sep 5, 2026
c8d33db
Fix NullAway errors in SyntheticRecordPlannerJoinsTest
arnaud-lacurie Sep 5, 2026
97b0505
Revert indexValue type change in OnlineIndexerBuildValueIndexTest; su…
arnaud-lacurie Sep 6, 2026
624f14d
Fix NullAway errors in ExceptionLoggingDetailsExtensionTest
arnaud-lacurie Sep 6, 2026
4932298
Fix NullAway errors in FDBSystemOperationsTest and FDBSortQueryIndexS…
arnaud-lacurie Sep 6, 2026
f590bd5
Fix remaining NullAway errors in FDBSystemOperationsTest, MessageHelp…
arnaud-lacurie Sep 6, 2026
800bb32
Fix NullAway errors in QueryPlanFullySortedTest and ResolverMappingRe…
arnaud-lacurie Sep 6, 2026
d2bd4f6
Fix NullAway errors in OnlineIndexingHeartbeatTest
arnaud-lacurie Sep 6, 2026
e669398
Fix NullAway errors in FunctionKeyRecordTest
arnaud-lacurie Sep 6, 2026
1d5f505
Fix remaining NullAway errors in the last 6 small files
arnaud-lacurie Sep 6, 2026
d71ab50
Fix remaining leftover NullAway errors in TransactionalRunnerTest and…
arnaud-lacurie Sep 6, 2026
a44614a
Fix final NullAway error in TransactionalRunnerTest
arnaud-lacurie Sep 6, 2026
d9c84f2
Suppress non-deterministic NullAway byte[] array-tracking false posit…
arnaud-lacurie Sep 6, 2026
7dcb2a8
Fix remaining checkstyle violations in test sources (unused imports, …
arnaud-lacurie Sep 6, 2026
ecf1466
Fix NullAway ripple: LoggableTimeoutException, TupleRange, FDBRecordS…
arnaud-lacurie Sep 6, 2026
687c0f9
Fix NullAway ripple: IndexingRangeSet, MetaDataVersionStampStoreState…
arnaud-lacurie Sep 6, 2026
7911fdd
Fix NullAway ripple: remaining single/double-error files
arnaud-lacurie Sep 6, 2026
816fae2
Fix duplicate @SuppressWarnings annotation in KeySpaceDirectory.getVa…
arnaud-lacurie Sep 6, 2026
338b7cc
Fix NullAway ripple in fdb-record-layer-core test sources
arnaud-lacurie Sep 6, 2026
4fef6e1
Suppress PMD.UnusedNullCheckInEquals alongside the Objects.equals Nul…
arnaud-lacurie Sep 6, 2026
5ae1aee
Fix SpotBugs NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE in core testFixtures
arnaud-lacurie Sep 6, 2026
425df13
Add compileOnly(libs.jspecify) to fdb-record-layer-jmh so SpotBugs ca…
arnaud-lacurie Sep 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
39 changes: 39 additions & 0 deletions fdb-record-layer-core/fdb-record-layer-core.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import de.undercouch.gradle.tasks.download.Verify
plugins {
id 'java-test-fixtures'
alias(libs.plugins.shadow)
alias(libs.plugins.errorprone)
}
apply from: rootProject.file('gradle/proto.gradle')
apply from: rootProject.file('gradle/publishing.gradle')
Expand All @@ -37,9 +38,13 @@ dependencies {
implementation(libs.slf4j.api)
implementation(libs.guava)
compileOnly(libs.jsr305)
compileOnly(libs.jspecify)
compileOnly(libs.autoService)
annotationProcessor(libs.autoService)

errorprone(libs.errorprone.core)
errorprone(libs.nullaway)

testImplementation project(':fdb-test-utils')
// Guardiann structural-invariant assertions + SIFT dataset loaders/paths live in fdb-extensions' testFixtures
// (GuardiannStructureAsserts, VecsDatasetLoaders, SiftTestHelpers, PrimaryKeyAndVector), reused by the vector-index
Expand All @@ -48,6 +53,7 @@ dependencies {
testImplementation(libs.bundles.test.impl)
testRuntimeOnly(libs.bundles.test.runtime)
testCompileOnly(libs.bundles.test.compileOnly)
testCompileOnly(libs.jspecify)
testImplementation(libs.jcommander)
testImplementation(libs.apache.commonsMath3)
testImplementation(libs.junit.platform)
Expand All @@ -67,6 +73,7 @@ dependencies {
testFixturesImplementation(libs.snakeyaml)
testFixturesImplementation(libs.protobuf.util)
testFixturesCompileOnly(libs.jsr305)
testFixturesCompileOnly(libs.jspecify)
testFixturesAnnotationProcessor(libs.autoService)
}

Expand All @@ -76,6 +83,38 @@ sourceSets {
}
}

// jspecify + NullAway, scoped to this module. See @NullMarked package-info.java files under
// com.apple.foundationdb.record (this module's single root package). Protobuf-generated
// metadata/plan-serialization code that lives in its own dedicated generated-only subpackage is
// carved out via UnannotatedSubPackages -- this also covers three test-sourceSet-only proto
// packages (record.evolution, record.vector, record.slidingwindowvector) that contain no
// hand-written sources in any source set. A larger set of generated proto outer classes are
// instead emitted directly into packages that also contain hand-annotated source
// (com.apple.foundationdb.record, com.apple.foundationdb.record.metadata, and
// com.apple.foundationdb.record.provider.foundationdb.keyspace), so package-level exclusion
// would also blind NullAway to the hand-written classes they share a package with; those are
// carved out individually via ExcludedClasses instead (this list is tied 1:1 to the module's
// main-sourceSet protos: record_metadata.proto, record_cursor.proto, index_build.proto,
// record_metadata_options.proto, record_planner_config.proto, pending_writes_queue.proto,
// time_window_leaderboard.proto, resolver_state.proto, record_sorting.proto,
// string_interning_data.proto, tuple_fields.proto, keyspace.proto; the 14 testFixtures-only
// test_records_*.proto files; and the ~65 test-sourceSet-only test_records_*.proto /
// expression_tests.proto files whose java_package (or, absent an override, package) resolves to
// com.apple.foundationdb.record or com.apple.foundationdb.record.metadata -- revisit if those
// java_outer_classname/java_package values change).
tasks.withType(JavaCompile).configureEach {
options.compilerArgs += ['-Xmaxerrs', '100000']
options.errorprone {
disableAllChecks = true
error("NullAway")
option("NullAway:AnnotatedPackages", "com.apple.foundationdb.record")
option("NullAway:UnannotatedSubPackages", "com.apple.foundationdb.record.planprotos,com.apple.foundationdb.record.expressions,com.apple.foundationdb.record.query.plan.cascades.events.eventprotos,com.apple.foundationdb.record.evolution,com.apple.foundationdb.record.vector,com.apple.foundationdb.record.slidingwindowvector")
option("NullAway:ExcludedClasses", "com.apple.foundationdb.record.RecordMetaDataProto,com.apple.foundationdb.record.RecordCursorProto,com.apple.foundationdb.record.IndexBuildProto,com.apple.foundationdb.record.RecordMetaDataOptionsProto,com.apple.foundationdb.record.RecordPlannerConfigurationProto,com.apple.foundationdb.record.PendingWritesQueueProto,com.apple.foundationdb.record.TimeWindowLeaderboardProto,com.apple.foundationdb.record.ResolverStateProto,com.apple.foundationdb.record.RecordSortingProto,com.apple.foundationdb.record.StringInterningProto,com.apple.foundationdb.record.TupleFieldsProto,com.apple.foundationdb.record.provider.foundationdb.keyspace.KeySpaceProto,com.apple.foundationdb.record.TestRecords1Proto,com.apple.foundationdb.record.TestRecords3Proto,com.apple.foundationdb.record.TestRecords4Proto,com.apple.foundationdb.record.TestRecords4WrapperProto,com.apple.foundationdb.record.TestRecords5Proto,com.apple.foundationdb.record.TestRecordsBytesProto,com.apple.foundationdb.record.TestRecordsEnumProto,com.apple.foundationdb.record.TestRecordsGroupedParentChildProto,com.apple.foundationdb.record.TestRecordsJoinIndexProto,com.apple.foundationdb.record.TestRecordsMultiProto,com.apple.foundationdb.record.TestRecordsTextProto,com.apple.foundationdb.record.TestRecordsTupleFieldsProto,com.apple.foundationdb.record.TestRecordsWithHeaderProto,com.apple.foundationdb.record.TestRecordsWithUnionProto,com.apple.foundationdb.record.metadata.ExpressionTestsProto,com.apple.foundationdb.record.PendingWritesQueueTestProto,com.apple.foundationdb.record.TestDataTypesProto,com.apple.foundationdb.record.TestHierarchiesProto,com.apple.foundationdb.record.TestNoIndexesProto,com.apple.foundationdb.record.TestNoRecordTypesProto,com.apple.foundationdb.record.TestNoUnionEvolvedIllegalProto,com.apple.foundationdb.record.TestNoUnionEvolvedProto,com.apple.foundationdb.record.TestNoUnionEvolvedRenamedRecordTypeProto,com.apple.foundationdb.record.TestNoUnionProto,com.apple.foundationdb.record.TestRecords1EvolvedAgainProto,com.apple.foundationdb.record.TestRecords1EvolvedProto,com.apple.foundationdb.record.TestRecords1EvolvedWithMapProto,com.apple.foundationdb.record.TestRecords2Proto,com.apple.foundationdb.record.TestRecords6Proto,com.apple.foundationdb.record.TestRecords7Proto,com.apple.foundationdb.record.TestRecords8Proto,com.apple.foundationdb.record.TestRecordsBadUnion1Proto,com.apple.foundationdb.record.TestRecordsBadUnion2Proto,com.apple.foundationdb.record.TestRecordsBitmapProto,com.apple.foundationdb.record.TestRecordsChained1Proto,com.apple.foundationdb.record.TestRecordsChained2Proto,com.apple.foundationdb.record.TestRecordsDoubleNestedProto,com.apple.foundationdb.record.TestRecordsDoublyImportedMapHelperProto,com.apple.foundationdb.record.TestRecordsDoublyImportedMapProto,com.apple.foundationdb.record.TestRecordsDuplicateUnionFields,com.apple.foundationdb.record.TestRecordsDuplicateUnionFieldsReordered,com.apple.foundationdb.record.TestRecordsIdenticalTypesProto,com.apple.foundationdb.record.TestRecordsImplicitUsageNoUnionProto,com.apple.foundationdb.record.TestRecordsImplicitUsageProto,com.apple.foundationdb.record.TestRecordsImportedAndNewProto,com.apple.foundationdb.record.TestRecordsImportedMapProto,com.apple.foundationdb.record.TestRecordsImportFlatProto,com.apple.foundationdb.record.TestRecordsImportProto,com.apple.foundationdb.record.TestRecordsIndexCompatProto,com.apple.foundationdb.record.TestRecordsIndexFilteringProto,com.apple.foundationdb.record.TestRecordsLeaderboardProto,com.apple.foundationdb.record.TestRecordsMapsProto,com.apple.foundationdb.record.TestRecordsMarkedUnmarkedProto,com.apple.foundationdb.record.TestRecordsMultidimensionalProto,com.apple.foundationdb.record.TestRecordsNameClashProto,com.apple.foundationdb.record.TestRecordsNestedAsRecord,com.apple.foundationdb.record.TestRecordsNestedMapProto,com.apple.foundationdb.record.TestRecordsNoPrimaryKeyProto,com.apple.foundationdb.record.TestRecordsNulls2Proto,com.apple.foundationdb.record.TestRecordsNulls3ExplicitProto,com.apple.foundationdb.record.TestRecordsNulls3Proto,com.apple.foundationdb.record.TestRecordsOneOfProto,com.apple.foundationdb.record.TestRecordsParentChildRelationshipProto,com.apple.foundationdb.record.TestRecordsRankProto,com.apple.foundationdb.record.TestRecordsSwapProto,com.apple.foundationdb.record.TestRecordsTransformProto,com.apple.foundationdb.record.TestRecordsUnionMissingRecordProto,com.apple.foundationdb.record.TestRecordsUnionWithImportedNestedProto,com.apple.foundationdb.record.TestRecordsUnionWithNestedProto,com.apple.foundationdb.record.TestRecordsUnsigned1Proto,com.apple.foundationdb.record.TestRecordsUnsigned2Proto,com.apple.foundationdb.record.TestRecordsUnsigned3Proto,com.apple.foundationdb.record.TestRecordsUnsigned4Proto,com.apple.foundationdb.record.TestRecordsUnsigned5Proto,com.apple.foundationdb.record.TestRecordsUuidProto,com.apple.foundationdb.record.TestRequiredNestedRecordProto,com.apple.foundationdb.record.TestTwoUnionsProto,com.apple.foundationdb.record.TestUnionDefaultNameProto,com.apple.foundationdb.record.TypeTestProto")
option("NullAway:JSpecifyMode", "true")
option("NullAway:AcknowledgeRestrictiveAnnotations", "true")
}
}

// SIFT-small dataset (10k x 128-dim), used by GuardiannVectorIndexConcurrentMergeTest for a realistic
// concurrent insert-vs-index-merge stress test. Mirrors fdb-extensions' siftsmall wiring: downloaded once
// into the shared, clean-surviving asset cache (project.ext.downloadsDirectory), checksum-verified, and
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,14 @@

package com.apple.foundationdb.record;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.jspecify.annotations.Nullable;

/**
* Exception thrown when an aggregate function is not supported.
*/
@SuppressWarnings("serial")
public class AggregateFunctionNotSupportedException extends RecordCoreException {
public AggregateFunctionNotSupportedException(@Nonnull String msg, @Nullable Object... keyValues) {
public AggregateFunctionNotSupportedException(String msg, @Nullable Object... keyValues) {
super(msg, keyValues);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;

import javax.annotation.Nonnull;
import java.time.Duration;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
Expand All @@ -52,12 +51,10 @@ public class AsyncLoadingCache<K, V> {
*/
public static final long UNLIMITED = Long.MAX_VALUE;

@Nonnull
private final Cache<K, Optional<V>> cache;
private final long refreshTimeMillis;
private final long deadlineTimeMillis;
private final long maxSize;
@Nonnull
private final ScheduledExecutorService scheduledExecutor;

/**
Expand All @@ -68,7 +65,7 @@ public class AsyncLoadingCache<K, V> {
* @param maxSize the maximum number of elements in the cache
* @param scheduledExecutor a scheduled executor used to manage asynchronous deadlines
*/
public AsyncLoadingCache(long refreshTimeMillis, long deadlineTimeMillis, long maxSize, @Nonnull ScheduledExecutorService scheduledExecutor) {
public AsyncLoadingCache(long refreshTimeMillis, long deadlineTimeMillis, long maxSize, ScheduledExecutorService scheduledExecutor) {
this.refreshTimeMillis = refreshTimeMillis;
this.deadlineTimeMillis = deadlineTimeMillis;
this.maxSize = maxSize;
Expand All @@ -95,8 +92,7 @@ public AsyncLoadingCache(long refreshTimeMillis, long deadlineTimeMillis, long m
* @return a future containing either the cached value or the result from the supplier
*/
@SuppressWarnings("squid:S2789") // comparison of null and optional used to differentiate absence of key and presence of null
@Nonnull
public CompletableFuture<V> orElseGet(@Nonnull K key, @Nonnull Supplier<CompletableFuture<V>> supplier) {
public CompletableFuture<V> orElseGet(K key, Supplier<CompletableFuture<V>> supplier) {
try {
Optional<V> cachedValue = cache.getIfPresent(key);
if (cachedValue == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@
import com.google.common.base.Verify;
import com.google.common.collect.ImmutableList;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.jspecify.annotations.Nullable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -58,26 +57,25 @@ public enum Internal {
this.value = value;
}

public static boolean isInternal(@Nonnull String name) {
public static boolean isInternal(String name) {
return name.startsWith(PREFIX);
}

public boolean isOfType(@Nonnull String name) {
public boolean isOfType(String name) {
return name.startsWith(value);
}

public String bindingName(@Nonnull String suffix) {
public String bindingName(String suffix) {
return value + suffix;
}

public String identifier(@Nonnull String bindingName) {
public String identifier(String bindingName) {
Verify.verify(bindingName.startsWith(value));
return bindingName.substring(value.length());
}

@Nonnull
@SuppressWarnings("unused")
public PBindingKind toProto(@Nonnull final PlanSerializationContext serializationContext) {
public PBindingKind toProto(final PlanSerializationContext serializationContext) {
switch (this) {
case IN:
return PBindingKind.IN;
Expand All @@ -92,9 +90,8 @@ public PBindingKind toProto(@Nonnull final PlanSerializationContext serializatio
}
}

@Nonnull
@SuppressWarnings("unused")
public static Internal fromProto(@Nonnull final PlanSerializationContext serializationContext, @Nonnull final PBindingKind bindingKindProto) {
public static Internal fromProto(final PlanSerializationContext serializationContext, final PBindingKind bindingKindProto) {
switch (bindingKindProto) {
case IN:
return IN;
Expand All @@ -110,7 +107,6 @@ public static Internal fromProto(@Nonnull final PlanSerializationContext seriali
}
}

@Nonnull
private final Map<String, Object> values;
@Nullable
private final Bindings parent;
Expand All @@ -127,7 +123,7 @@ public Bindings() {
}

@Nullable
public Object get(@Nonnull String name) {
public Object get(String name) {
if (values.containsKey(name)) {
return values.get(name);
} else if (parent != null) {
Expand All @@ -137,7 +133,7 @@ public Object get(@Nonnull String name) {
}
}

public boolean containsBinding(@Nonnull String name) {
public boolean containsBinding(String name) {
if (values.containsKey(name)) {
return true;
} else if (parent != null) {
Expand All @@ -155,7 +151,6 @@ public Builder childBuilder() {
return new Builder(this);
}

@Nonnull
public List<Map.Entry<String, Object>> asMappingList() {
final ImmutableList.Builder<Map.Entry<String, Object>> resultBuilder = ImmutableList.builder();
values.forEach((key, value) -> resultBuilder.add(Pair.of(key, value)));
Expand All @@ -177,7 +172,6 @@ public String toString() {
* </code></pre>
*/
public static class Builder {
@Nonnull
private final Bindings bindings;
private boolean built;

Expand All @@ -186,11 +180,11 @@ private Builder(@Nullable Bindings parent) {
}

@Nullable
public Object get(@Nonnull String name) {
public Object get(String name) {
return bindings.get(name);
}

public Builder set(@Nonnull String name, @Nullable Object value) {
public Builder set(String name, @Nullable Object value) {
if (built) {
throw new RecordCoreException("Cannot change bindings after building");
}
Expand All @@ -201,7 +195,6 @@ public Builder set(@Nonnull String name, @Nullable Object value) {
return this;
}

@Nonnull
public Bindings build() {
built = true;
return bindings;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,33 +25,29 @@
import com.google.protobuf.ByteString;
import com.google.protobuf.ZeroCopyByteString;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.jspecify.annotations.Nullable;
import java.nio.ByteBuffer;

/**
* A shim to wrap old-style byte array continuations.
*/
@API(API.Status.EXPERIMENTAL)
public class ByteArrayContinuation implements RecordCursorContinuation {
@Nonnull
private final byte[] bytes;
@Nullable
private ByteString byteString;

private ByteArrayContinuation(@Nonnull final byte[] bytes) {
private ByteArrayContinuation(final byte[] bytes) {
this.bytes = bytes;
}

@Nonnull
@Override
@SpotBugsSuppressWarnings("EI")
public byte[] toBytes() {
return bytes;
}

@Override
@Nonnull
public ByteString toByteString() {
if (byteString == null) {
byteString = ZeroCopyByteString.wrap(bytes);
Expand All @@ -71,7 +67,7 @@ public boolean isEnd() {
* @param bytes a nullable byte array representing a serialized continuation
* @return a {@code RecordCursorContinuation} as described above
*/
@Nonnull
@SuppressWarnings("NullAway") // NullAway does not track the null-check above for byte[] type parameters
public static RecordCursorContinuation fromNullable(@Nullable final byte[] bytes) {
if (bytes == null) {
return RecordCursorEndContinuation.END;
Expand All @@ -85,7 +81,6 @@ public static RecordCursorContinuation fromNullable(@Nullable final byte[] bytes
* @param a an integer
* @return a {@code ByteArrayContinuation} wrapping a byte array of the given integer
*/
@Nonnull
public static RecordCursorContinuation fromInt(int a) {
return new ByteArrayContinuation(ByteBuffer.allocate(Integer.BYTES).putInt(a).array());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@

import com.apple.foundationdb.annotation.API;

import javax.annotation.Nonnull;

/**
* Track the number of bytes scanned up to some limit, after which record scans should not be allowed.
*
Expand All @@ -36,7 +34,6 @@ public interface ByteScanLimiter {
* {@link #hasBytesRemaining()} and {@link #registerScannedBytes(long)}.
* @return a new {@code ByteScanLimiter} with this limiter's original limit
*/
@Nonnull
ByteScanLimiter reset();

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

import com.apple.foundationdb.annotation.API;

import javax.annotation.Nonnull;
import java.util.concurrent.atomic.AtomicLong;

/**
Expand Down Expand Up @@ -78,7 +77,6 @@ private Enforcing(long limit) {
}

@Override
@Nonnull
public ByteScanLimiter reset() {
return new Enforcing(originalLimit);
}
Expand Down Expand Up @@ -122,7 +120,6 @@ private static class Tracking implements ByteScanLimiter {
private final AtomicLong bytesScanned = new AtomicLong();

@Override
@Nonnull
public ByteScanLimiter reset() {
return new Tracking();
}
Expand Down Expand Up @@ -163,7 +160,6 @@ public String toString() {
*/
private static class Untracked implements ByteScanLimiter {
@Override
@Nonnull
public ByteScanLimiter reset() {
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@

import com.apple.foundationdb.annotation.API;

import javax.annotation.Nonnull;

/**
* The type of one of the endpoints of a {@link TupleRange}.
* <p>
Expand All @@ -41,7 +39,6 @@ public enum EndpointType {
PREFIX_STRING,
CONTINUATION;

@Nonnull
public String toString(boolean high) {
switch (this) {
case TREE_START:
Expand Down
Loading