Skip to content

Commit 00c25e9

Browse files
cpovirkGoogle Java Core Libraries
authored andcommitted
Move Java-7-VM warning from MoreObjects to Preconditions.
RELNOTES=Increased the aggressiveness of [Guava 30.1](https://github.com/google/guava/releases/tag/v30.1)'s warning log message for running `guava-android` under a Java 7 VM. (Android VMs are unaffected.) If the warning _itself_ causes you trouble, you can eliminate it by silencing the logger for `com.google.common.base.Preconditions` (which is used _only_ for this warning). This warning prepares for [removing support for Java 7 in 2021](#5269). Please report any problems. We have tried to make the warning as safe as possible, but anytime a common library logs, especially as aggressively as we do in this new release, there is the potential for [`NullPointerException`](https://stackoverflow.com/a/41017717/28465) or even [deadlock](https://stackoverflow.com/a/48009613/28465). (To be clear, Guava will not log under Java 8 or Android, but it will under Java 7.) PiperOrigin-RevId: 361700569
1 parent 7f30024 commit 00c25e9

File tree

4 files changed

+38
-72
lines changed

4 files changed

+38
-72
lines changed

android/guava/src/com/google/common/base/MoreObjects.java

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,10 @@
1515
package com.google.common.base;
1616

1717
import static com.google.common.base.Preconditions.checkNotNull;
18-
import static java.util.logging.Level.WARNING;
1918

2019
import com.google.common.annotations.GwtCompatible;
2120
import com.google.errorprone.annotations.CanIgnoreReturnValue;
22-
import com.google.errorprone.annotations.concurrent.GuardedBy;
2321
import java.util.Arrays;
24-
import java.util.logging.Logger;
2522
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
2623

2724
/**
@@ -144,46 +141,13 @@ public static ToStringHelper toStringHelper(String className) {
144141
* @since 18.0 (since 2.0 as {@code Objects.ToStringHelper}).
145142
*/
146143
public static final class ToStringHelper {
147-
@GuardedBy("ToStringHelper.class")
148-
private static boolean performedJava8CompatibilityCheck;
149-
150-
private static void java8CompatibilityCheck() {
151-
@SuppressWarnings("GuardedBy")
152-
boolean racyReadForDoubleCheckedLock = performedJava8CompatibilityCheck;
153-
if (racyReadForDoubleCheckedLock) {
154-
return;
155-
}
156-
synchronized (ToStringHelper.class) {
157-
if (performedJava8CompatibilityCheck) {
158-
return;
159-
}
160-
performedJava8CompatibilityCheck = true;
161-
}
162-
163-
try {
164-
Java8Usage.performCheck();
165-
} catch (Throwable underlying) {
166-
Exception toLog =
167-
new Exception(
168-
"Guava will drop support for Java 7 in 2021. Please let us know if this will cause"
169-
+ " you problems: https://github.com/google/guava/issues/5269",
170-
underlying);
171-
Logger.getLogger(ToStringHelper.class.getName())
172-
.log(
173-
WARNING,
174-
"Java 7 compatibility warning: See https://github.com/google/guava/issues/5269",
175-
toLog);
176-
}
177-
}
178-
179144
private final String className;
180145
private final ValueHolder holderHead = new ValueHolder();
181146
private ValueHolder holderTail = holderHead;
182147
private boolean omitNullValues = false;
183148

184149
/** Use {@link MoreObjects#toStringHelper(Object)} to create an instance. */
185150
private ToStringHelper(String className) {
186-
java8CompatibilityCheck();
187151
this.className = checkNotNull(className);
188152
}
189153

android/guava/src/com/google/common/base/Preconditions.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
package com.google.common.base;
1616

1717
import static com.google.common.base.Strings.lenientFormat;
18+
import static java.util.logging.Level.WARNING;
1819

1920
import com.google.common.annotations.GwtCompatible;
2021
import com.google.errorprone.annotations.CanIgnoreReturnValue;
22+
import java.util.logging.Logger;
2123
import org.checkerframework.checker.nullness.compatqual.NonNullDecl;
2224
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
2325

@@ -1488,4 +1490,21 @@ private static String badPositionIndexes(int start, int end, int size) {
14881490
// end < start
14891491
return lenientFormat("end index (%s) must not be less than start index (%s)", end, start);
14901492
}
1493+
1494+
static {
1495+
try {
1496+
Java8Usage.performCheck();
1497+
} catch (Throwable underlying) {
1498+
Exception toLog =
1499+
new Exception(
1500+
"Guava will drop support for Java 7 in 2021. Please let us know if this will cause"
1501+
+ " you problems: https://github.com/google/guava/issues/5269",
1502+
underlying);
1503+
Logger.getLogger(Preconditions.class.getName())
1504+
.log(
1505+
WARNING,
1506+
"Java 7 compatibility warning: See https://github.com/google/guava/issues/5269",
1507+
toLog);
1508+
}
1509+
}
14911510
}

guava/src/com/google/common/base/MoreObjects.java

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,10 @@
1515
package com.google.common.base;
1616

1717
import static com.google.common.base.Preconditions.checkNotNull;
18-
import static java.util.logging.Level.WARNING;
1918

2019
import com.google.common.annotations.GwtCompatible;
2120
import com.google.errorprone.annotations.CanIgnoreReturnValue;
22-
import com.google.errorprone.annotations.concurrent.GuardedBy;
2321
import java.util.Arrays;
24-
import java.util.logging.Logger;
2522
import org.checkerframework.checker.nullness.qual.Nullable;
2623

2724
/**
@@ -144,46 +141,13 @@ public static ToStringHelper toStringHelper(String className) {
144141
* @since 18.0 (since 2.0 as {@code Objects.ToStringHelper}).
145142
*/
146143
public static final class ToStringHelper {
147-
@GuardedBy("ToStringHelper.class")
148-
private static boolean performedJava8CompatibilityCheck;
149-
150-
private static void java8CompatibilityCheck() {
151-
@SuppressWarnings("GuardedBy")
152-
boolean racyReadForDoubleCheckedLock = performedJava8CompatibilityCheck;
153-
if (racyReadForDoubleCheckedLock) {
154-
return;
155-
}
156-
synchronized (ToStringHelper.class) {
157-
if (performedJava8CompatibilityCheck) {
158-
return;
159-
}
160-
performedJava8CompatibilityCheck = true;
161-
}
162-
163-
try {
164-
Java8Usage.performCheck();
165-
} catch (Throwable underlying) {
166-
Exception toLog =
167-
new Exception(
168-
"Guava will drop support for Java 7 in 2021. Please let us know if this will cause"
169-
+ " you problems: https://github.com/google/guava/issues/5269",
170-
underlying);
171-
Logger.getLogger(ToStringHelper.class.getName())
172-
.log(
173-
WARNING,
174-
"Java 7 compatibility warning: See https://github.com/google/guava/issues/5269",
175-
toLog);
176-
}
177-
}
178-
179144
private final String className;
180145
private final ValueHolder holderHead = new ValueHolder();
181146
private ValueHolder holderTail = holderHead;
182147
private boolean omitNullValues = false;
183148

184149
/** Use {@link MoreObjects#toStringHelper(Object)} to create an instance. */
185150
private ToStringHelper(String className) {
186-
java8CompatibilityCheck();
187151
this.className = checkNotNull(className);
188152
}
189153

guava/src/com/google/common/base/Preconditions.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
package com.google.common.base;
1616

1717
import static com.google.common.base.Strings.lenientFormat;
18+
import static java.util.logging.Level.WARNING;
1819

1920
import com.google.common.annotations.GwtCompatible;
2021
import com.google.errorprone.annotations.CanIgnoreReturnValue;
22+
import java.util.logging.Logger;
2123
import org.checkerframework.checker.nullness.qual.NonNull;
2224
import org.checkerframework.checker.nullness.qual.Nullable;
2325

@@ -1431,4 +1433,21 @@ private static String badPositionIndexes(int start, int end, int size) {
14311433
// end < start
14321434
return lenientFormat("end index (%s) must not be less than start index (%s)", end, start);
14331435
}
1436+
1437+
static {
1438+
try {
1439+
Java8Usage.performCheck();
1440+
} catch (Throwable underlying) {
1441+
Exception toLog =
1442+
new Exception(
1443+
"Guava will drop support for Java 7 in 2021. Please let us know if this will cause"
1444+
+ " you problems: https://github.com/google/guava/issues/5269",
1445+
underlying);
1446+
Logger.getLogger(Preconditions.class.getName())
1447+
.log(
1448+
WARNING,
1449+
"Java 7 compatibility warning: See https://github.com/google/guava/issues/5269",
1450+
toLog);
1451+
}
1452+
}
14341453
}

0 commit comments

Comments
 (0)