From c6de176fe4432957f39c0adbcb88cff5c0bd6ed2 Mon Sep 17 00:00:00 2001 From: Eric Gribkoff Date: Mon, 27 Aug 2018 15:03:18 -0700 Subject: [PATCH] core: switch to Java 7 source and bytecode The JDK will produce code that invokes Object.requireNonNull when instantiating an inner class using a instance variable. See https://bugs.openjdk.java.net/browse/JDK-8202137 --- core/build.gradle | 6 ------ .../java/io/grpc/internal/Rescheduler.java | 21 ++++++++----------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/core/build.gradle b/core/build.gradle index e5670e4cdd0..700592f86f3 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,11 +1,5 @@ description = 'gRPC: Core' -// Workaround: -// [Undefined reference (android-api-level-14-4.0_r4)] io.grpc.internal.(Rescheduler.java:87) -// >> Object java.util.Objects.requireNonNull(Object) -sourceCompatibility = 1.6 -targetCompatibility = 1.6 - dependencies { compile project(':grpc-context'), libraries.gson, diff --git a/core/src/main/java/io/grpc/internal/Rescheduler.java b/core/src/main/java/io/grpc/internal/Rescheduler.java index e4d198059fe..75a106e895f 100644 --- a/core/src/main/java/io/grpc/internal/Rescheduler.java +++ b/core/src/main/java/io/grpc/internal/Rescheduler.java @@ -60,7 +60,7 @@ void reschedule(long delay, TimeUnit timeUnit) { if (wakeUp != null) { wakeUp.cancel(false); } - wakeUp = scheduler.schedule(new FutureRunnable(this), delayNanos, TimeUnit.NANOSECONDS); + wakeUp = scheduler.schedule(new FutureRunnable(), delayNanos, TimeUnit.NANOSECONDS); } runAtNanos = newRunAtNanos; } @@ -74,17 +74,14 @@ void cancel(boolean permanent) { } } - private static final class FutureRunnable implements Runnable { - - private final Rescheduler rescheduler; - - FutureRunnable(Rescheduler rescheduler) { - this.rescheduler = rescheduler; - } - + private final class FutureRunnable implements Runnable { @Override public void run() { - rescheduler.serializingExecutor.execute(rescheduler.new ChannelFutureRunnable()); + Rescheduler.this.serializingExecutor.execute(new ChannelFutureRunnable()); + } + + private boolean isEnabled() { + return Rescheduler.this.enabled; } } @@ -99,7 +96,7 @@ public void run() { long now = nanoTime(); if (runAtNanos - now > 0) { wakeUp = scheduler.schedule( - new FutureRunnable(Rescheduler.this), runAtNanos - now, TimeUnit.NANOSECONDS); + new FutureRunnable(), runAtNanos - now, TimeUnit.NANOSECONDS); } else { enabled = false; wakeUp = null; @@ -110,7 +107,7 @@ public void run() { @VisibleForTesting static boolean isEnabled(Runnable r) { - return ((FutureRunnable) r).rescheduler.enabled; + return ((FutureRunnable) r).isEnabled(); } private long nanoTime() {