diff --git a/codestyle/spotbugs-exclude.xml b/codestyle/spotbugs-exclude.xml
index effec8d9d806..f4d03ae87fb2 100644
--- a/codestyle/spotbugs-exclude.xml
+++ b/codestyle/spotbugs-exclude.xml
@@ -60,7 +60,6 @@
-
diff --git a/extensions-contrib/time-min-max/src/main/java/org/apache/druid/query/aggregation/TimestampAggregatorFactory.java b/extensions-contrib/time-min-max/src/main/java/org/apache/druid/query/aggregation/TimestampAggregatorFactory.java
index 40f9095891a1..b161f3449e34 100644
--- a/extensions-contrib/time-min-max/src/main/java/org/apache/druid/query/aggregation/TimestampAggregatorFactory.java
+++ b/extensions-contrib/time-min-max/src/main/java/org/apache/druid/query/aggregation/TimestampAggregatorFactory.java
@@ -249,6 +249,7 @@ public int hashCode()
return result;
}
+ @Nullable
static Long convertLong(TimestampSpec timestampSpec, Object input)
{
if (input instanceof Number) {
diff --git a/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryEngine.java b/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryEngine.java
index 96a0b76e40ce..3a34b76c874a 100644
--- a/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryEngine.java
+++ b/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryEngine.java
@@ -269,6 +269,7 @@ public PositionMaintainer(
this.max = max - increment; // Make sure there is enough room for one more increment
}
+ @Nullable
public Integer getNext()
{
if (nextVal > max) {
diff --git a/processing/src/main/java/org/apache/druid/segment/AbstractSegment.java b/processing/src/main/java/org/apache/druid/segment/AbstractSegment.java
index 6bf1f670440f..1518c44dcf07 100644
--- a/processing/src/main/java/org/apache/druid/segment/AbstractSegment.java
+++ b/processing/src/main/java/org/apache/druid/segment/AbstractSegment.java
@@ -19,9 +19,12 @@
package org.apache.druid.segment;
+import javax.annotation.Nullable;
+
public abstract class AbstractSegment implements Segment
{
@Override
+ @Nullable
public T as(Class clazz)
{
if (clazz.equals(QueryableIndex.class)) {
diff --git a/processing/src/main/java/org/apache/druid/segment/ColumnSelectorBitmapIndexSelector.java b/processing/src/main/java/org/apache/druid/segment/ColumnSelectorBitmapIndexSelector.java
index b9263d197b3f..ed24737bd695 100644
--- a/processing/src/main/java/org/apache/druid/segment/ColumnSelectorBitmapIndexSelector.java
+++ b/processing/src/main/java/org/apache/druid/segment/ColumnSelectorBitmapIndexSelector.java
@@ -182,6 +182,7 @@ public BitmapFactory getBitmapFactory()
}
@Override
+ @Nullable
public BitmapIndex getBitmapIndex(String dimension)
{
if (isVirtualColumn(dimension)) {
@@ -204,6 +205,7 @@ public int getCardinality()
}
@Override
+ @Nullable
public String getValue(int index)
{
return null;
diff --git a/processing/src/main/java/org/apache/druid/segment/DimensionHandler.java b/processing/src/main/java/org/apache/druid/segment/DimensionHandler.java
index fe4466fe4f65..e1ea3342fb49 100644
--- a/processing/src/main/java/org/apache/druid/segment/DimensionHandler.java
+++ b/processing/src/main/java/org/apache/druid/segment/DimensionHandler.java
@@ -25,6 +25,8 @@
import org.apache.druid.segment.selector.settable.SettableColumnValueSelector;
import org.apache.druid.segment.writeout.SegmentWriteOutMedium;
+import javax.annotation.Nullable;
+
import java.util.Comparator;
/**
@@ -70,6 +72,7 @@ public interface DimensionHandler
* Get {@link MultiValueHandling} for the column associated with this handler.
* Only string columns can have {@link MultiValueHandling} currently.
*/
+ @Nullable
default MultiValueHandling getMultivalueHandling()
{
return null;
diff --git a/processing/src/main/java/org/apache/druid/segment/IndexMerger.java b/processing/src/main/java/org/apache/druid/segment/IndexMerger.java
index ac5761849ff2..b26e9caa8495 100644
--- a/processing/src/main/java/org/apache/druid/segment/IndexMerger.java
+++ b/processing/src/main/java/org/apache/druid/segment/IndexMerger.java
@@ -88,6 +88,7 @@ static List getMergedDimensions(List indexes)
}
}
+ @Nullable
static List getLongestSharedDimOrder(List indexes)
{
int maxSize = 0;
diff --git a/processing/src/main/java/org/apache/druid/segment/MMappedIndex.java b/processing/src/main/java/org/apache/druid/segment/MMappedIndex.java
index 7691cc70b0c3..1496842dd7c3 100644
--- a/processing/src/main/java/org/apache/druid/segment/MMappedIndex.java
+++ b/processing/src/main/java/org/apache/druid/segment/MMappedIndex.java
@@ -27,6 +27,8 @@
import org.apache.druid.segment.data.VSizeColumnarMultiInts;
import org.joda.time.Interval;
+import javax.annotation.Nullable;
+
import java.util.Map;
/**
@@ -85,15 +87,10 @@ public Interval getDataInterval()
return dataInterval;
}
+ @Nullable
public MetricHolder getMetricHolder(String metric)
{
- final MetricHolder retVal = metrics.get(metric);
-
- if (retVal == null) {
- return null;
- }
-
- return retVal;
+ return metrics.get(metric);
}
public GenericIndexed getDimValueLookup(String dimension)
diff --git a/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java b/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java
index e32a53cdad0a..673ab20b06d4 100644
--- a/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java
+++ b/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java
@@ -26,6 +26,8 @@
import org.apache.druid.timeline.partition.ShardSpec;
import org.joda.time.Interval;
+import javax.annotation.Nullable;
+
import java.io.Closeable;
import java.util.concurrent.Phaser;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -111,6 +113,7 @@ private ReferenceCountingSegment(
this.atomicUpdateGroupSize = atomicUpdateGroupSize;
}
+ @Nullable
public Segment getBaseSegment()
{
return !isClosed() ? baseSegment : null;
@@ -127,24 +130,28 @@ public boolean isClosed()
}
@Override
+ @Nullable
public SegmentId getId()
{
return !isClosed() ? baseSegment.getId() : null;
}
@Override
+ @Nullable
public Interval getDataInterval()
{
return !isClosed() ? baseSegment.getDataInterval() : null;
}
@Override
+ @Nullable
public QueryableIndex asQueryableIndex()
{
return !isClosed() ? baseSegment.asQueryableIndex() : null;
}
@Override
+ @Nullable
public StorageAdapter asStorageAdapter()
{
return !isClosed() ? baseSegment.asStorageAdapter() : null;
diff --git a/processing/src/main/java/org/apache/druid/segment/Segment.java b/processing/src/main/java/org/apache/druid/segment/Segment.java
index 8da1c3a422df..8fb9b4e620dc 100644
--- a/processing/src/main/java/org/apache/druid/segment/Segment.java
+++ b/processing/src/main/java/org/apache/druid/segment/Segment.java
@@ -57,5 +57,6 @@ public interface Segment extends Closeable
* @param desired interface
* @return instance of clazz, or null if the interface is not supported by this segment
*/
+ @Nullable
T as(Class clazz);
}
diff --git a/processing/src/main/java/org/apache/druid/segment/StringDimensionIndexer.java b/processing/src/main/java/org/apache/druid/segment/StringDimensionIndexer.java
index c4c01861948b..5bf20b9a8879 100644
--- a/processing/src/main/java/org/apache/druid/segment/StringDimensionIndexer.java
+++ b/processing/src/main/java/org/apache/druid/segment/StringDimensionIndexer.java
@@ -101,6 +101,7 @@ public int getId(@Nullable String value)
}
}
+ @Nullable
public String getValue(int id)
{
lock.readLock().lock();
diff --git a/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java b/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java
index 4e7876b9a83b..9802aadd661b 100644
--- a/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java
+++ b/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java
@@ -173,6 +173,7 @@ public DimensionSelector makeDimensionSelector(DimensionSpec dimensionSpec, Colu
}
}
+ @Nullable
public BitmapIndex getBitmapIndex(String columnName, ColumnSelector columnSelector)
{
final VirtualColumn virtualColumn = getVirtualColumn(columnName);
@@ -273,7 +274,7 @@ public byte[] getCacheKey()
return new CacheKeyBuilder((byte) 0).appendCacheablesIgnoringOrder(virtualColumns).build();
}
- private void detectCycles(VirtualColumn virtualColumn, Set columnNames)
+ private void detectCycles(VirtualColumn virtualColumn, @Nullable Set columnNames)
{
// Copy columnNames to avoid modifying it
final Set nextSet = columnNames == null
diff --git a/processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndex.java b/processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndex.java
index dbb6a6e759ee..7d7fcac60eba 100644
--- a/processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndex.java
+++ b/processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndex.java
@@ -726,6 +726,7 @@ IncrementalIndexRowResult toIncrementalIndexRow(InputRow row)
return new IncrementalIndexRowResult(incrementalIndexRow, parseExceptionMessages);
}
+ @Nullable
public static ParseException getCombinedParseException(
InputRow row,
@Nullable List dimParseExceptionMessages,
diff --git a/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java b/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java
index 401c498d5d49..c6b40af11e54 100644
--- a/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java
+++ b/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java
@@ -33,6 +33,8 @@
import org.apache.druid.java.util.common.ISE;
import org.joda.time.DateTime;
+import javax.annotation.Nullable;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -208,6 +210,7 @@ private boolean isJoinedSpatialDimValValid(String dimVal)
return true;
}
+ @Nullable
private static Float tryParseFloat(String val)
{
try {
@@ -225,6 +228,7 @@ private static Float tryParseFloat(String val)
*
* @return decoded coordinate, or null if it could not be decoded
*/
+ @Nullable
public static float[] decode(final String encodedCoordinate)
{
if (encodedCoordinate == null) {
diff --git a/processing/src/main/java/org/apache/druid/segment/serde/ComplexMetricSerde.java b/processing/src/main/java/org/apache/druid/segment/serde/ComplexMetricSerde.java
index 300e3ad99f1f..ee4ddfd6de18 100644
--- a/processing/src/main/java/org/apache/druid/segment/serde/ComplexMetricSerde.java
+++ b/processing/src/main/java/org/apache/druid/segment/serde/ComplexMetricSerde.java
@@ -70,6 +70,7 @@ public abstract class ComplexMetricSerde
*
* @return A function that can compute the size of the complex object or null if you cannot/do not want to compute it
*/
+ @Nullable
public Function