Skip to content

Commit 76d72b4

Browse files
committed
Add nullability annotations to linq4j
1 parent 35c3b48 commit 76d72b4

File tree

79 files changed

+854
-494
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+854
-494
lines changed

linq4j/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ dependencies {
1919

2020
implementation("com.google.guava:guava")
2121
implementation("org.apache.calcite.avatica:avatica-core")
22+
implementation("org.checkerframework:checker-qual")
2223
}

linq4j/src/main/java/org/apache/calcite/linq4j/BaseQueryable.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import org.apache.calcite.linq4j.tree.Expression;
2020

21+
import org.checkerframework.checker.nullness.qual.Nullable;
22+
2123
import java.lang.reflect.Type;
2224
import java.util.Iterator;
2325

@@ -34,10 +36,10 @@ public abstract class BaseQueryable<TSource>
3436
extends AbstractQueryable<TSource> {
3537
protected final QueryProvider provider;
3638
protected final Type elementType;
37-
protected final Expression expression;
39+
protected final @Nullable Expression expression;
3840

3941
public BaseQueryable(QueryProvider provider, Type elementType,
40-
Expression expression) {
42+
@Nullable Expression expression) {
4143
this.provider = provider;
4244
this.elementType = elementType;
4345
this.expression = expression;
@@ -51,7 +53,7 @@ public Type getElementType() {
5153
return elementType;
5254
}
5355

54-
public Expression getExpression() {
56+
public @Nullable Expression getExpression() {
5557
return expression;
5658
}
5759

linq4j/src/main/java/org/apache/calcite/linq4j/DefaultEnumerable.java

+16-13
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
import org.apache.calcite.linq4j.function.Predicate1;
3434
import org.apache.calcite.linq4j.function.Predicate2;
3535

36+
import org.checkerframework.checker.nullness.qual.Nullable;
37+
import org.checkerframework.checker.nullness.qual.PolyNull;
38+
3639
import java.math.BigDecimal;
3740
import java.util.Collection;
3841
import java.util.Comparator;
@@ -69,7 +72,7 @@ protected OrderedEnumerable<T> getThisOrdered() {
6972
return this;
7073
}
7174

72-
public <R> R foreach(Function1<T, R> func) {
75+
public <R> @Nullable R foreach(Function1<T, R> func) {
7376
R result = null;
7477
try (Enumerator<T> enumerator = enumerator()) {
7578
while (enumerator.moveNext()) {
@@ -89,12 +92,12 @@ protected OrderedQueryable<T> asOrderedQueryable() {
8992
return EnumerableDefaults.asOrderedQueryable(this);
9093
}
9194

92-
public T aggregate(Function2<T, T, T> func) {
95+
public @Nullable T aggregate(Function2<@Nullable T, T, T> func) {
9396
return EnumerableDefaults.aggregate(getThis(), func);
9497
}
9598

96-
public <TAccumulate> TAccumulate aggregate(TAccumulate seed,
97-
Function2<TAccumulate, T, TAccumulate> func) {
99+
public <TAccumulate> @PolyNull TAccumulate aggregate(@PolyNull TAccumulate seed,
100+
Function2<@PolyNull TAccumulate, T, @PolyNull TAccumulate> func) {
98101
return EnumerableDefaults.aggregate(getThis(), seed, func);
99102
}
100103

@@ -191,11 +194,11 @@ public <TKey> OrderedEnumerable<T> createOrderedEnumerable(
191194
keySelector, comparator, descending);
192195
}
193196

194-
public Enumerable<T> defaultIfEmpty() {
197+
public Enumerable<@Nullable T> defaultIfEmpty() {
195198
return EnumerableDefaults.defaultIfEmpty(getThis());
196199
}
197200

198-
public Enumerable<T> defaultIfEmpty(T value) {
201+
public Enumerable<@PolyNull T> defaultIfEmpty(@PolyNull T value) {
199202
return EnumerableDefaults.defaultIfEmpty(getThis(), value);
200203
}
201204

@@ -211,7 +214,7 @@ public T elementAt(int index) {
211214
return EnumerableDefaults.elementAt(getThis(), index);
212215
}
213216

214-
public T elementAtOrDefault(int index) {
217+
public @Nullable T elementAtOrDefault(int index) {
215218
return EnumerableDefaults.elementAtOrDefault(getThis(), index);
216219
}
217220

@@ -241,11 +244,11 @@ public T first(Predicate1<T> predicate) {
241244
return EnumerableDefaults.first(getThis(), predicate);
242245
}
243246

244-
public T firstOrDefault() {
247+
public @Nullable T firstOrDefault() {
245248
return EnumerableDefaults.firstOrDefault(getThis());
246249
}
247250

248-
public T firstOrDefault(Predicate1<T> predicate) {
251+
public @Nullable T firstOrDefault(Predicate1<T> predicate) {
249252
return EnumerableDefaults.firstOrDefault(getThis(), predicate);
250253
}
251254

@@ -428,11 +431,11 @@ public T last(Predicate1<T> predicate) {
428431
return EnumerableDefaults.last(getThis(), predicate);
429432
}
430433

431-
public T lastOrDefault() {
434+
public @Nullable T lastOrDefault() {
432435
return EnumerableDefaults.lastOrDefault(getThis());
433436
}
434437

435-
public T lastOrDefault(Predicate1<T> predicate) {
438+
public @Nullable T lastOrDefault(Predicate1<T> predicate) {
436439
return EnumerableDefaults.lastOrDefault(getThis(), predicate);
437440
}
438441

@@ -621,11 +624,11 @@ public T single(Predicate1<T> predicate) {
621624
return EnumerableDefaults.single(getThis(), predicate);
622625
}
623626

624-
public T singleOrDefault() {
627+
public @Nullable T singleOrDefault() {
625628
return EnumerableDefaults.singleOrDefault(getThis());
626629
}
627630

628-
public T singleOrDefault(Predicate1<T> predicate) {
631+
public @Nullable T singleOrDefault(Predicate1<T> predicate) {
629632
return EnumerableDefaults.singleOrDefault(getThis(), predicate);
630633
}
631634

linq4j/src/main/java/org/apache/calcite/linq4j/DefaultQueryable.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import org.apache.calcite.linq4j.function.Predicate2;
3434
import org.apache.calcite.linq4j.tree.FunctionExpression;
3535

36+
import org.checkerframework.checker.nullness.qual.Nullable;
37+
3638
import java.math.BigDecimal;
3739
import java.util.Comparator;
3840

@@ -148,7 +150,7 @@ public Enumerator<T> enumerator() {
148150
return factory.ofType(getThis(), clazz);
149151
}
150152

151-
@Override public Queryable<T> defaultIfEmpty() {
153+
@Override public Queryable<@Nullable T> defaultIfEmpty() {
152154
return factory.defaultIfEmpty(getThis());
153155
}
154156

@@ -162,7 +164,7 @@ public Enumerator<T> enumerator() {
162164

163165
// End disambiguate
164166

165-
public T aggregate(FunctionExpression<Function2<T, T, T>> selector) {
167+
public @Nullable T aggregate(FunctionExpression<Function2<@Nullable T, T, T>> selector) {
166168
return factory.aggregate(getThis(), selector);
167169
}
168170

@@ -243,7 +245,7 @@ public T first(FunctionExpression<Predicate1<T>> predicate) {
243245
return factory.first(getThis(), predicate);
244246
}
245247

246-
public T firstOrDefault(FunctionExpression<Predicate1<T>> predicate) {
248+
public @Nullable T firstOrDefault(FunctionExpression<Predicate1<T>> predicate) {
247249
return factory.firstOrDefault(getThis(), predicate);
248250
}
249251

@@ -421,7 +423,7 @@ public T single(FunctionExpression<Predicate1<T>> predicate) {
421423
return factory.single(getThis(), predicate);
422424
}
423425

424-
public T singleOrDefault(FunctionExpression<Predicate1<T>> predicate) {
426+
public @Nullable T singleOrDefault(FunctionExpression<Predicate1<T>> predicate) {
425427
return factory.singleOrDefault(getThis(), predicate);
426428
}
427429

linq4j/src/main/java/org/apache/calcite/linq4j/Enumerable.java

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
*/
1717
package org.apache.calcite.linq4j;
1818

19+
import org.checkerframework.framework.qual.Covariant;
20+
1921
/**
2022
* Exposes the enumerator, which supports a simple iteration over a collection.
2123
*
@@ -26,6 +28,7 @@
2628
*
2729
* @param <T> Element type
2830
*/
31+
@Covariant(0)
2932
public interface Enumerable<T>
3033
extends RawEnumerable<T>, Iterable<T>, ExtendedEnumerable<T> {
3134
/**

0 commit comments

Comments
 (0)