diff --git a/core/src/main/java/io/grpc/internal/InstantTimeProvider.java b/core/src/main/java/io/grpc/internal/InstantTimeProvider.java index 38c840d259..1299616375 100644 --- a/core/src/main/java/io/grpc/internal/InstantTimeProvider.java +++ b/core/src/main/java/io/grpc/internal/InstantTimeProvider.java @@ -18,37 +18,19 @@ package io.grpc.internal; import static com.google.common.math.LongMath.saturatedAdd; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; +import java.time.Instant; import java.util.concurrent.TimeUnit; +import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement; /** * {@link InstantTimeProvider} resolves InstantTimeProvider which implements {@link TimeProvider}. */ final class InstantTimeProvider implements TimeProvider { - private Method now; - private Method getNano; - private Method getEpochSecond; - - public InstantTimeProvider(Class instantClass) { - try { - this.now = instantClass.getMethod("now"); - this.getNano = instantClass.getMethod("getNano"); - this.getEpochSecond = instantClass.getMethod("getEpochSecond"); - } catch (NoSuchMethodException ex) { - throw new AssertionError(ex); - } - } - @Override + @IgnoreJRERequirement public long currentTimeNanos() { - try { - Object instant = now.invoke(null); - int nanos = (int) getNano.invoke(instant); - long epochSeconds = (long) getEpochSecond.invoke(instant); - return saturatedAdd(TimeUnit.SECONDS.toNanos(epochSeconds), nanos); - } catch (IllegalAccessException | InvocationTargetException ex) { - throw new RuntimeException(ex); - } + Instant now = Instant.now(); + long epochSeconds = now.getEpochSecond(); + return saturatedAdd(TimeUnit.SECONDS.toNanos(epochSeconds), now.getNano()); } } diff --git a/core/src/main/java/io/grpc/internal/TimeProviderResolverFactory.java b/core/src/main/java/io/grpc/internal/TimeProviderResolverFactory.java index d88d9bb9eb..04272034ce 100644 --- a/core/src/main/java/io/grpc/internal/TimeProviderResolverFactory.java +++ b/core/src/main/java/io/grpc/internal/TimeProviderResolverFactory.java @@ -23,8 +23,8 @@ package io.grpc.internal; final class TimeProviderResolverFactory { static TimeProvider resolveTimeProvider() { try { - Class instantClass = Class.forName("java.time.Instant"); - return new InstantTimeProvider(instantClass); + Class.forName("java.time.Instant"); + return new InstantTimeProvider(); } catch (ClassNotFoundException ex) { return new ConcurrentTimeProvider(); } diff --git a/core/src/test/java/io/grpc/internal/InstantTimeProviderTest.java b/core/src/test/java/io/grpc/internal/InstantTimeProviderTest.java index ac9a02fa93..6702bc421a 100644 --- a/core/src/test/java/io/grpc/internal/InstantTimeProviderTest.java +++ b/core/src/test/java/io/grpc/internal/InstantTimeProviderTest.java @@ -34,8 +34,7 @@ public class InstantTimeProviderTest { @Test public void testInstantCurrentTimeNanos() throws Exception { - InstantTimeProvider instantTimeProvider = new InstantTimeProvider( - Class.forName("java.time.Instant")); + InstantTimeProvider instantTimeProvider = new InstantTimeProvider(); // Get the current time from the InstantTimeProvider long actualTimeNanos = instantTimeProvider.currentTimeNanos();