Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions guava/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@
<!-- Default is supress all index checker warnings. -->
<arg>-AsuppressWarnings=${checkerframework.suppress}</arg>
<arg>-XDignore.symbol.file</arg> <!-- suppress any warnings for using 'Unsafe' -->
<arg>-AuseDefaultsForUncheckedCode=source,bytecode</arg>
<arg>-AuseConservativeDefaultsForUncheckedCode=-source,-bytecode</arg>
<arg>-AshowSuppressWarningsStrings</arg>
<arg>-AwarnUnneededSuppressions</arg>
</compilerArgs>
Expand Down Expand Up @@ -385,14 +385,14 @@
<artifactId>checker-qual</artifactId>
<version>0.0.0</version>
<scope>system</scope>
<systemPath>${CHECKERFRAMEWORK}/checker/dist/checker-qual.jar</systemPath>
<systemPath>/Users/aosenxiong/waterloo/eisop/checker-framework/checker/dist/checker-qual.jar</systemPath>
</dependency>
<dependency>
<groupId>io.github.eisop</groupId>
<artifactId>checker</artifactId>
<version>0.0.0</version>
<scope>system</scope>
<systemPath>${CHECKERFRAMEWORK}/checker/dist/checker.jar</systemPath>
<systemPath>/Users/aosenxiong/waterloo/eisop/checker-framework/checker/dist/checker.jar</systemPath>
</dependency>
</dependencies>
</profile>
Expand Down
1 change: 1 addition & 0 deletions guava/src/com/google/common/base/Ascii.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
*/
@GwtCompatible
@ElementTypesAreNonnullByDefault
@SuppressWarnings("pico")
public final class Ascii {

private Ascii() {}
Expand Down
34 changes: 18 additions & 16 deletions guava/src/com/google/common/base/CharMatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.google.common.annotations.VisibleForTesting;
import java.util.Arrays;
import java.util.BitSet;
import org.checkerframework.checker.pico.qual.Readonly;
import org.checkerframework.checker.index.qual.GTENegativeOne;
import org.checkerframework.checker.index.qual.IndexOrHigh;
import org.checkerframework.checker.index.qual.IndexOrLow;
Expand Down Expand Up @@ -69,6 +70,7 @@
*/
@GwtCompatible(emulated = true)
@ElementTypesAreNonnullByDefault
@SuppressWarnings("pico")
public abstract class CharMatcher implements Predicate<Character> {
/*
* N777777777NO
Expand Down Expand Up @@ -320,7 +322,7 @@ public static CharMatcher isNot(final char match) {
* The CharSequence is not mutated, therefore after checking its length,
* accesses to lower indices are safe.
*/
public static CharMatcher anyOf(final CharSequence sequence) {
public static CharMatcher anyOf(final @Readonly CharSequence sequence) {
switch (sequence.length()) {
case 0:
return none();
Expand All @@ -339,7 +341,7 @@ public static CharMatcher anyOf(final CharSequence sequence) {
* Returns a {@code char} matcher that matches any BMP character not present in the given
* character sequence. Returns a bogus matcher if the sequence contains supplementary characters.
*/
public static CharMatcher noneOf(CharSequence sequence) {
public static CharMatcher noneOf(@Readonly CharSequence sequence) {
return anyOf(sequence).negate();
}

Expand Down Expand Up @@ -503,7 +505,7 @@ void setBits(BitSet table) {
* @return {@code true} if this matcher matches at least one character in the sequence
* @since 8.0
*/
public boolean matchesAnyOf(CharSequence sequence) {
public boolean matchesAnyOf(@Readonly CharSequence sequence) {
return !matchesNoneOf(sequence);
}

Expand All @@ -517,7 +519,7 @@ public boolean matchesAnyOf(CharSequence sequence) {
* @return {@code true} if this matcher matches every character in the sequence, including when
* the sequence is empty
*/
public boolean matchesAllOf(CharSequence sequence) {
public boolean matchesAllOf(@Readonly CharSequence sequence) {
for (int i = sequence.length() - 1; i >= 0; i--) {
if (!matches(sequence.charAt(i))) {
return false;
Expand All @@ -537,7 +539,7 @@ public boolean matchesAllOf(CharSequence sequence) {
* @return {@code true} if this matcher matches no characters in the sequence, including when the
* sequence is empty
*/
public boolean matchesNoneOf(CharSequence sequence) {
public boolean matchesNoneOf(@Readonly CharSequence sequence) {
return indexIn(sequence) == -1;
}

Expand All @@ -551,7 +553,7 @@ public boolean matchesNoneOf(CharSequence sequence) {
* @param sequence the character sequence to examine from the beginning
* @return an index, or {@code -1} if no character matches
*/
public @IndexOrLow("#1") int indexIn(CharSequence sequence) {
public @IndexOrLow("#1") int indexIn(@Readonly CharSequence sequence) {
return indexIn(sequence, 0);
}

Expand All @@ -570,7 +572,7 @@ public boolean matchesNoneOf(CharSequence sequence) {
* @throws IndexOutOfBoundsException if start is negative or greater than {@code
* sequence.length()}
*/
public @IndexOrLow("#1") int indexIn(CharSequence sequence, @IndexOrHigh("#1") int start) {
public @IndexOrLow("#1") int indexIn(@Readonly CharSequence sequence, @IndexOrHigh("#1") int start) {
int length = sequence.length();
checkPositionIndex(start, length);
for (int i = start; i < length; i++) {
Expand All @@ -591,7 +593,7 @@ public boolean matchesNoneOf(CharSequence sequence) {
* @param sequence the character sequence to examine from the end
* @return an index, or {@code -1} if no character matches
*/
public @IndexOrLow("#1") int lastIndexIn(CharSequence sequence) {
public @IndexOrLow("#1") int lastIndexIn(@Readonly CharSequence sequence) {
for (int i = sequence.length() - 1; i >= 0; i--) {
if (matches(sequence.charAt(i))) {
return i;
Expand All @@ -608,7 +610,7 @@ public boolean matchesNoneOf(CharSequence sequence) {
/*
* count is incremented at most sequence.length() times
*/
public @IndexOrHigh("#1") int countIn(CharSequence sequence) {
public @IndexOrHigh("#1") int countIn(@Readonly CharSequence sequence) {
@IndexOrHigh("#1") int count = 0;
for (int i = 0; i < sequence.length(); i++) {
if (matches(sequence.charAt(i))) {
Expand All @@ -628,7 +630,7 @@ public boolean matchesNoneOf(CharSequence sequence) {
*
* ... returns {@code "bzr"}.
*/
public String removeFrom(CharSequence sequence) {
public String removeFrom(@Readonly CharSequence sequence) {
String string = sequence.toString();
@GTENegativeOne @LTEqLengthOf("string") int pos = indexIn(string);
if (pos == -1) {
Expand Down Expand Up @@ -667,7 +669,7 @@ public String removeFrom(CharSequence sequence) {
*
* ... returns {@code "aaa"}.
*/
public String retainFrom(CharSequence sequence) {
public String retainFrom(@Readonly CharSequence sequence) {
return negate().removeFrom(sequence);
}

Expand All @@ -690,7 +692,7 @@ public String retainFrom(CharSequence sequence) {
* character in {@code sequence}
* @return the new string
*/
public String replaceFrom(CharSequence sequence, char replacement) {
public String replaceFrom(@Readonly CharSequence sequence, char replacement) {
String string = sequence.toString();
int pos = indexIn(string);
if (pos == -1) {
Expand Down Expand Up @@ -729,7 +731,7 @@ public String replaceFrom(CharSequence sequence, char replacement) {
* replacementLen should be @IndexOrHigh("replacement")
* indexIn should return @IndexOrLow("#1")
*/
public String replaceFrom(CharSequence sequence, CharSequence replacement) {
public String replaceFrom(@Readonly CharSequence sequence, @Readonly CharSequence replacement) {
int replacementLen = replacement.length();
if (replacementLen == 0) {
return removeFrom(sequence);
Expand Down Expand Up @@ -777,7 +779,7 @@ public String replaceFrom(CharSequence sequence, CharSequence replacement) {
*
* ... is equivalent to {@link String#trim()}.
*/
public String trimFrom(CharSequence sequence) {
public String trimFrom(@Readonly CharSequence sequence) {
int len = sequence.length();
@IndexOrHigh("sequence") int first;
int last;
Expand Down Expand Up @@ -806,7 +808,7 @@ public String trimFrom(CharSequence sequence) {
*
* ... returns {@code "catbab"}.
*/
public String trimLeadingFrom(CharSequence sequence) {
public String trimLeadingFrom(@Readonly CharSequence sequence) {
int len = sequence.length();
for (int first = 0; first < len; first++) {
if (!matches(sequence.charAt(first))) {
Expand All @@ -826,7 +828,7 @@ public String trimLeadingFrom(CharSequence sequence) {
*
* ... returns {@code "abacat"}.
*/
public String trimTrailingFrom(CharSequence sequence) {
public String trimTrailingFrom(@Readonly CharSequence sequence) {
int len = sequence.length();
for (int last = len - 1; last >= 0; last--) {
if (!matches(sequence.charAt(last))) {
Expand Down
4 changes: 3 additions & 1 deletion guava/src/com/google/common/base/Equivalence.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.function.BiPredicate;
import javax.annotation.CheckForNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.checker.pico.qual.Readonly;
import org.checkerframework.checker.signedness.qual.UnknownSignedness;

/**
Expand All @@ -41,6 +42,7 @@
* The type parameter is <T> rather than <T extends @Nullable> so that we can use T in the
* doEquivalent and doHash methods to indicate that the parameter cannot be null.
*/
@SuppressWarnings("pico")
public abstract class Equivalence<T> implements BiPredicate<@Nullable T, @Nullable T> {
/** Constructor for use by subclasses. */
protected Equivalence() {}
Expand Down Expand Up @@ -363,7 +365,7 @@ public String toString() {
* @since 8.0 (in Equivalences with null-friendly behavior)
* @since 4.0 (in Equivalences)
*/
public static Equivalence<Object> equals() {
public static Equivalence<@Readonly Object> equals() {
return Equals.INSTANCE;
}

Expand Down
7 changes: 5 additions & 2 deletions guava/src/com/google/common/base/Function.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import javax.annotation.CheckForNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.checker.pico.qual.Readonly;
import org.checkerframework.checker.pico.qual.ReceiverDependentMutable;
import org.checkerframework.dataflow.qual.Pure;
import org.checkerframework.framework.qual.AnnotatedFor;

Expand Down Expand Up @@ -46,7 +48,8 @@
@AnnotatedFor({"nullness"})
@FunctionalInterface
@ElementTypesAreNonnullByDefault
public interface Function<F extends @Nullable Object, T extends @Nullable Object>
@ReceiverDependentMutable
public interface Function<F extends @Nullable @Readonly Object, T extends @Nullable @Readonly Object>
extends java.util.function.Function<F, T> {
@Override
@CanIgnoreReturnValue // TODO(kevinb): remove this
Expand All @@ -66,5 +69,5 @@ public interface Function<F extends @Nullable Object, T extends @Nullable Object
*/
@Pure
@Override
boolean equals(@CheckForNull Object object);
boolean equals(@CheckForNull @Readonly Object object);
}
1 change: 1 addition & 0 deletions guava/src/com/google/common/base/Functions.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
@AnnotatedFor({"nullness"})
@GwtCompatible
@ElementTypesAreNonnullByDefault
@SuppressWarnings("pico")
public final class Functions {
private Functions() {}

Expand Down
1 change: 1 addition & 0 deletions guava/src/com/google/common/base/Joiner.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
@AnnotatedFor({"nullness"})
@GwtCompatible
@ElementTypesAreNonnullByDefault
@SuppressWarnings("pico")
public class Joiner {
/** Returns a joiner which automatically places {@code separator} between consecutive elements. */
public static Joiner on(String separator) {
Expand Down
15 changes: 8 additions & 7 deletions guava/src/com/google/common/base/MoreObjects.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import javax.annotation.CheckForNull;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.checker.pico.qual.Readonly;

/**
* Helper functions that operate on any {@code Object}, and are not already provided in {@link
Expand Down Expand Up @@ -130,7 +131,7 @@ public static <T> T firstNonNull(@CheckForNull T first, T second) {
* class name
* @since 18.0 (since 2.0 as {@code Objects.toStringHelper()}).
*/
public static ToStringHelper toStringHelper(Object self) {
public static ToStringHelper toStringHelper(@Readonly Object self) {
return new ToStringHelper(self.getClass().getSimpleName());
}

Expand Down Expand Up @@ -350,7 +351,7 @@ public ToStringHelper addValue(long value) {
return addUnconditionalHolder(String.valueOf(value));
}

private static boolean isEmpty(Object value) {
private static boolean isEmpty(@Readonly Object value) {
// Put types estimated to be most frequent first.
if (value instanceof CharSequence) {
return ((CharSequence) value).length() == 0;
Expand Down Expand Up @@ -421,13 +422,13 @@ private ValueHolder addHolder() {
return valueHolder;
}

private ToStringHelper addHolder(@CheckForNull Object value) {
private ToStringHelper addHolder(@CheckForNull @Readonly Object value) {
ValueHolder valueHolder = addHolder();
valueHolder.value = value;
return this;
}

private ToStringHelper addHolder(String name, @CheckForNull Object value) {
private ToStringHelper addHolder(String name, @CheckForNull @Readonly Object value) {
ValueHolder valueHolder = addHolder();
valueHolder.value = value;
valueHolder.name = checkNotNull(name);
Expand All @@ -440,13 +441,13 @@ private UnconditionalValueHolder addUnconditionalHolder() {
return valueHolder;
}

private ToStringHelper addUnconditionalHolder(Object value) {
private ToStringHelper addUnconditionalHolder(@Readonly Object value) {
UnconditionalValueHolder valueHolder = addUnconditionalHolder();
valueHolder.value = value;
return this;
}

private ToStringHelper addUnconditionalHolder(String name, Object value) {
private ToStringHelper addUnconditionalHolder(String name, @Readonly Object value) {
UnconditionalValueHolder valueHolder = addUnconditionalHolder();
valueHolder.value = value;
valueHolder.name = checkNotNull(name);
Expand All @@ -456,7 +457,7 @@ private ToStringHelper addUnconditionalHolder(String name, Object value) {
// Holder object for values that might be null and/or empty.
private static class ValueHolder {
@CheckForNull String name;
@CheckForNull Object value;
@CheckForNull @Readonly Object value;
@CheckForNull ValueHolder next;
}

Expand Down
5 changes: 3 additions & 2 deletions guava/src/com/google/common/base/Objects.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.util.Arrays;
import javax.annotation.CheckForNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.checker.pico.qual.Readonly;
import org.checkerframework.checker.signedness.qual.PolySigned;
import org.checkerframework.dataflow.qual.Pure;
import org.checkerframework.framework.qual.AnnotatedFor;
Expand Down Expand Up @@ -54,7 +55,7 @@ private Objects() {}
* <p><b>Note for Java 7 and later:</b> This method should be treated as deprecated; use {@link
* java.util.Objects#equals} instead.
*/
public static boolean equal(@CheckForNull @PolySigned Object a, @CheckForNull @PolySigned Object b) {
public static boolean equal(@CheckForNull @PolySigned @Readonly Object a, @CheckForNull @PolySigned @Readonly Object b) {
return a == b || (a != null && a.equals(b));
}

Expand All @@ -80,7 +81,7 @@ public static boolean equal(@CheckForNull @PolySigned Object a, @CheckForNull @P
* java.util.Objects#hash} instead.
*/
@Pure
public static int hashCode(@CheckForNull @Nullable Object... objects) {
public static int hashCode(@CheckForNull @Nullable @Readonly Object @Readonly ... objects) {
return Arrays.hashCode(objects);
}
}
1 change: 1 addition & 0 deletions guava/src/com/google/common/base/Optional.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
@DoNotMock("Use Optional.of(value) or Optional.absent()")
@GwtCompatible(serializable = true)
@ElementTypesAreNonnullByDefault
@SuppressWarnings("pico")
public abstract class Optional<T> implements Serializable {
/**
* Returns an {@code Optional} instance with no contained reference.
Expand Down
Loading