diff --git a/mockwebserver/src/test/java/okhttp3/mockwebserver/internal/http2/Http2Server.java b/mockwebserver/src/test/java/okhttp3/mockwebserver/internal/http2/Http2Server.java index f412dfea5..f3fabec88 100644 --- a/mockwebserver/src/test/java/okhttp3/mockwebserver/internal/http2/Http2Server.java +++ b/mockwebserver/src/test/java/okhttp3/mockwebserver/internal/http2/Http2Server.java @@ -38,7 +38,7 @@ import okio.Okio; import okio.Source; import static java.util.Arrays.asList; -import static okhttp3.internal.UtilKt.closeQuietly; +import static okhttp3.internal.Util.closeQuietly; import static okhttp3.internal.platform.Platform.INFO; import static okhttp3.tls.internal.TlsUtil.localhost; diff --git a/okhttp-tls/src/test/java/okhttp3/tls/HandshakeCertificatesTest.java b/okhttp-tls/src/test/java/okhttp3/tls/HandshakeCertificatesTest.java index f1b4d4bb8..81b5db61d 100644 --- a/okhttp-tls/src/test/java/okhttp3/tls/HandshakeCertificatesTest.java +++ b/okhttp-tls/src/test/java/okhttp3/tls/HandshakeCertificatesTest.java @@ -37,7 +37,7 @@ import org.junit.Before; import org.junit.Test; import static java.util.Arrays.asList; -import static okhttp3.internal.UtilKt.closeQuietly; +import static okhttp3.internal.Util.closeQuietly; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assume.assumeFalse; diff --git a/okhttp/src/main/java/okhttp3/internal/InternalKt.kt b/okhttp/src/main/java/okhttp3/internal/InternalKt.kt index b7b0cbcee..8e37548bf 100644 --- a/okhttp/src/main/java/okhttp3/internal/InternalKt.kt +++ b/okhttp/src/main/java/okhttp3/internal/InternalKt.kt @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@file:Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") package okhttp3.internal @@ -41,32 +40,3 @@ fun cacheGet(cache: Cache, request: Request) = cache.get(request) fun applyConnectionSpec(connectionSpec: ConnectionSpec, sslSocket: SSLSocket, isFallback: Boolean) = connectionSpec.apply(sslSocket, isFallback) - -/** - * Lock and wait a duration in nanoseconds. Unlike [java.lang.Object.wait] this interprets 0 as - * "don't wait" instead of "wait forever". - */ -@Throws(InterruptedException::class) -fun Any.waitNanos(nanos: Long) { - val ms = nanos / 1_000_000L - val ns = nanos - (ms * 1_000_000L) - synchronized(this) { - this.waitMillis(ms, ns.toInt()) - } -} - -fun Any.wait() = (this as Object).wait() - -/** - * Lock and wait a duration in milliseconds and nanos. - * Unlike [java.lang.Object.wait] this interprets 0 as "don't wait" instead of "wait forever". - */ -fun Any.waitMillis(timeout: Long, nanos: Int = 0) { - if (timeout > 0L || nanos > 0) { - (this as Object).wait(timeout, nanos) - } -} - -fun Any.notify() = (this as Object).notify() - -fun Any.notifyAll() = (this as Object).notifyAll() diff --git a/okhttp/src/main/java/okhttp3/internal/Util.kt b/okhttp/src/main/java/okhttp3/internal/Util.kt index e9151d557..5911f242c 100644 --- a/okhttp/src/main/java/okhttp3/internal/Util.kt +++ b/okhttp/src/main/java/okhttp3/internal/Util.kt @@ -21,20 +21,34 @@ import okhttp3.EventListener import okhttp3.Headers import okhttp3.HttpUrl import okhttp3.RequestBody +import okhttp3.Response import okhttp3.ResponseBody import okhttp3.internal.http2.Header +import okio.Buffer +import okio.BufferedSink import okio.BufferedSource import okio.ByteString.Companion.decodeHex import okio.Options +import okio.Source +import java.io.Closeable import java.io.IOException +import java.io.InterruptedIOException +import java.net.InetSocketAddress +import java.net.ServerSocket +import java.net.Socket import java.nio.charset.Charset import java.nio.charset.StandardCharsets.UTF_16BE import java.nio.charset.StandardCharsets.UTF_16LE import java.nio.charset.StandardCharsets.UTF_8 import java.util.ArrayList +import java.util.Arrays +import java.util.Collections import java.util.Comparator +import java.util.LinkedHashMap import java.util.Locale import java.util.TimeZone +import java.util.concurrent.Executor +import java.util.concurrent.RejectedExecutionException import java.util.concurrent.ThreadFactory import java.util.concurrent.TimeUnit import kotlin.text.Charsets.UTF_32BE @@ -284,3 +298,245 @@ fun HttpUrl.canReuseConnectionFor(other: HttpUrl): Boolean = host == other.host scheme == other.scheme fun EventListener.asFactory() = EventListener.Factory { this } + +infix fun Byte.and(mask: Int): Int = toInt() and mask +infix fun Short.and(mask: Int): Int = toInt() and mask +infix fun Int.and(mask: Long): Long = toLong() and mask + +@Throws(IOException::class) +fun BufferedSink.writeMedium(medium: Int) { + writeByte(medium.ushr(16) and 0xff) + writeByte(medium.ushr(8) and 0xff) + writeByte(medium and 0xff) +} + +@Throws(IOException::class) +fun BufferedSource.readMedium(): Int { + return (readByte() and 0xff shl 16 + or (readByte() and 0xff shl 8) + or (readByte() and 0xff)) +} + +/** + * Reads until this is exhausted or the deadline has been reached. This is careful to not extend the + * deadline if one exists already. + */ +@Throws(IOException::class) +fun Source.skipAll(duration: Int, timeUnit: TimeUnit): Boolean { + val now = System.nanoTime() + val originalDuration = if (timeout().hasDeadline()) { + timeout().deadlineNanoTime() - now + } else { + Long.MAX_VALUE + } + timeout().deadlineNanoTime(now + minOf(originalDuration, timeUnit.toNanos(duration.toLong()))) + return try { + val skipBuffer = Buffer() + while (read(skipBuffer, 8192) != -1L) { + skipBuffer.clear() + } + true // Success! The source has been exhausted. + } catch (_: InterruptedIOException) { + false // We ran out of time before exhausting the source. + } finally { + if (originalDuration == Long.MAX_VALUE) { + timeout().clearDeadline() + } else { + timeout().deadlineNanoTime(now + originalDuration) + } + } +} + +/** + * Attempts to exhaust this, returning true if successful. This is useful when reading a complete + * source is helpful, such as when doing so completes a cache body or frees a socket connection for + * reuse. + */ +fun Source.discard(timeout: Int, timeUnit: TimeUnit): Boolean = try { + this.skipAll(timeout, timeUnit) +} catch (_: IOException) { + false +} + +fun Socket.connectionName(): String { + val address = remoteSocketAddress + return if (address is InetSocketAddress) address.hostName else address.toString() +} + +/** Run [block] until it either throws an [IOException] or completes. */ +inline fun ignoreIoExceptions(block: () -> Unit) { + try { + block() + } catch (_: IOException) { + } +} + +inline fun threadName(name: String, block: () -> Unit) { + val currentThread = Thread.currentThread() + val oldName = currentThread.name + currentThread.name = name + try { + block() + } finally { + currentThread.name = oldName + } +} + +/** Execute [block], setting the executing thread's name to [name] for the duration. */ +inline fun Executor.execute(name: String, crossinline block: () -> Unit) { + execute { + threadName(name) { + block() + } + } +} + +/** Executes [block] unless this executor has been shutdown, in which case this does nothing. */ +inline fun Executor.tryExecute(name: String, crossinline block: () -> Unit) { + try { + execute(name, block) + } catch (_: RejectedExecutionException) { + } +} + +fun Buffer.skipAll(b: Byte): Int { + var count = 0 + while (!exhausted() && this[0] == b) { + count++ + readByte() + } + return count +} + +/** + * Returns the index of the next non-whitespace character in this. Result is undefined if input + * contains newline characters. + */ +fun String.indexOfNonWhitespace(startIndex: Int = 0): Int { + for (i in startIndex until length) { + val c = this[i] + if (c != ' ' && c != '\t') { + return i + } + } + return length +} + +/** Returns the Content-Length as reported by the response headers. */ +fun Response.headersContentLength(): Long { + return headers()["Content-Length"]?.toLongOrDefault(-1L) ?: -1L +} + +fun String.toLongOrDefault(defaultValue: Long): Long { + return try { + toLong() + } catch (_: NumberFormatException) { + defaultValue + } +} + +/** + * Returns this as a non-negative integer, or 0 if it is negative, or [Int.MAX_VALUE] if it is too + * large, or [defaultValue] if it cannot be parsed. + */ +fun String?.toNonNegativeInt(defaultValue: Int): Int { + try { + val value = this?.toLong() ?: return defaultValue + return when { + value > Int.MAX_VALUE -> Int.MAX_VALUE + value < 0 -> 0 + else -> value.toInt() + } + } catch (_: NumberFormatException) { + return defaultValue + } +} + +/** Returns an immutable copy of this. */ +fun List.toImmutableList(): List { + return Collections.unmodifiableList(toMutableList()) +} + +/** Returns an immutable list containing [elements]. */ +@SafeVarargs +fun immutableListOf(vararg elements: T): List { + return Collections.unmodifiableList(Arrays.asList(*elements.clone())) +} + +/** Returns an immutable copy of this. */ +fun Map.toImmutableMap(): Map { + return if (isEmpty()) { + emptyMap() + } else { + Collections.unmodifiableMap(LinkedHashMap(this)) + } +} + +/** Closes this, ignoring any checked exceptions. Does nothing if this is null. */ +fun Closeable.closeQuietly() { + try { + close() + } catch (rethrown: RuntimeException) { + throw rethrown + } catch (_: Exception) { + } +} + +/** Closes this, ignoring any checked exceptions. Does nothing if this is null. */ +fun Socket.closeQuietly() { + try { + close() + } catch (e: AssertionError) { + throw e + } catch (rethrown: RuntimeException) { + throw rethrown + } catch (_: Exception) { + } +} + +/** Closes this, ignoring any checked exceptions. Does nothing if this is null. */ +fun ServerSocket.closeQuietly() { + try { + close() + } catch (rethrown: RuntimeException) { + throw rethrown + } catch (_: Exception) { + } +} + +fun Long.toHexString(): String = java.lang.Long.toHexString(this) + +fun Int.toHexString(): String = Integer.toHexString(this) + +/** + * Lock and wait a duration in nanoseconds. Unlike [java.lang.Object.wait] this interprets 0 as + * "don't wait" instead of "wait forever". + */ +@Throws(InterruptedException::class) +fun Any.waitNanos(nanos: Long) { + val ms = nanos / 1_000_000L + val ns = nanos - (ms * 1_000_000L) + synchronized(this) { + waitMillis(ms, ns.toInt()) + } +} + +@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") +fun Any.wait() = (this as Object).wait() + +/** + * Lock and wait a duration in milliseconds and nanos. + * Unlike [java.lang.Object.wait] this interprets 0 as "don't wait" instead of "wait forever". + */ +@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") +fun Any.waitMillis(timeout: Long, nanos: Int = 0) { + if (timeout > 0L || nanos > 0) { + (this as Object).wait(timeout, nanos) + } +} + +@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") +fun Any.notify() = (this as Object).notify() + +@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") +fun Any.notifyAll() = (this as Object).notifyAll() diff --git a/okhttp/src/main/java/okhttp3/internal/UtilKt.kt b/okhttp/src/main/java/okhttp3/internal/UtilKt.kt deleted file mode 100644 index b9e81ad25..000000000 --- a/okhttp/src/main/java/okhttp3/internal/UtilKt.kt +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (C) 2019 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@file:JvmName("UtilKt") -package okhttp3.internal - -import okhttp3.Response -import okio.Buffer -import okio.BufferedSink -import okio.BufferedSource -import okio.Source -import java.io.Closeable -import java.io.IOException -import java.io.InterruptedIOException -import java.net.InetSocketAddress -import java.net.ServerSocket -import java.net.Socket -import java.util.Arrays -import java.util.Collections -import java.util.LinkedHashMap -import java.util.concurrent.Executor -import java.util.concurrent.RejectedExecutionException -import java.util.concurrent.TimeUnit - -infix fun Byte.and(mask: Int): Int = toInt() and mask -infix fun Short.and(mask: Int): Int = toInt() and mask -infix fun Int.and(mask: Long): Long = toLong() and mask - -@Throws(IOException::class) -fun BufferedSink.writeMedium(medium: Int) { - writeByte(medium.ushr(16) and 0xff) - writeByte(medium.ushr(8) and 0xff) - writeByte(medium and 0xff) -} - -@Throws(IOException::class) -fun BufferedSource.readMedium(): Int { - return (readByte() and 0xff shl 16 - or (readByte() and 0xff shl 8) - or (readByte() and 0xff)) -} - -/** - * Reads until this is exhausted or the deadline has been reached. This is careful to not extend the - * deadline if one exists already. - */ -@Throws(IOException::class) -fun Source.skipAll(duration: Int, timeUnit: TimeUnit): Boolean { - val now = System.nanoTime() - val originalDuration = if (timeout().hasDeadline()) { - timeout().deadlineNanoTime() - now - } else { - Long.MAX_VALUE - } - timeout().deadlineNanoTime(now + minOf(originalDuration, timeUnit.toNanos(duration.toLong()))) - return try { - val skipBuffer = Buffer() - while (read(skipBuffer, 8192) != -1L) { - skipBuffer.clear() - } - true // Success! The source has been exhausted. - } catch (_: InterruptedIOException) { - false // We ran out of time before exhausting the source. - } finally { - if (originalDuration == Long.MAX_VALUE) { - timeout().clearDeadline() - } else { - timeout().deadlineNanoTime(now + originalDuration) - } - } -} - -/** - * Attempts to exhaust this, returning true if successful. This is useful when reading a complete - * source is helpful, such as when doing so completes a cache body or frees a socket connection for - * reuse. - */ -fun Source.discard(timeout: Int, timeUnit: TimeUnit): Boolean = try { - this.skipAll(timeout, timeUnit) -} catch (_: IOException) { - false -} - -fun Socket.connectionName(): String { - val address = remoteSocketAddress - return if (address is InetSocketAddress) address.hostName else address.toString() -} - -/** Run [block] until it either throws an [IOException] or completes. */ -inline fun ignoreIoExceptions(block: () -> Unit) { - try { - block() - } catch (_: IOException) { - } -} - -inline fun threadName(name: String, block: () -> Unit) { - val currentThread = Thread.currentThread() - val oldName = currentThread.name - currentThread.name = name - try { - block() - } finally { - currentThread.name = oldName - } -} - -/** Execute [block], setting the executing thread's name to [name] for the duration. */ -inline fun Executor.execute(name: String, crossinline block: () -> Unit) { - execute { - threadName(name) { - block() - } - } -} - -/** Executes [block] unless this executor has been shutdown, in which case this does nothing. */ -inline fun Executor.tryExecute(name: String, crossinline block: () -> Unit) { - try { - execute(name, block) - } catch (_: RejectedExecutionException) { - } -} - -fun Buffer.skipAll(b: Byte): Int { - var count = 0 - while (!exhausted() && this[0] == b) { - count++ - readByte() - } - return count -} - -/** - * Returns the index of the next non-whitespace character in this. Result is undefined if input - * contains newline characters. - */ -fun String.indexOfNonWhitespace(startIndex: Int = 0): Int { - for (i in startIndex until length) { - val c = this[i] - if (c != ' ' && c != '\t') { - return i - } - } - return length -} - -/** Returns the Content-Length as reported by the response headers. */ -fun Response.headersContentLength(): Long { - return headers()["Content-Length"]?.toLongOrDefault(-1L) ?: -1L -} - -fun String.toLongOrDefault(defaultValue: Long): Long { - return try { - toLong() - } catch (_: NumberFormatException) { - defaultValue - } -} - -/** - * Returns this as a non-negative integer, or 0 if it is negative, or [Int.MAX_VALUE] if it is too - * large, or [defaultValue] if it cannot be parsed. - */ -fun String?.toNonNegativeInt(defaultValue: Int): Int { - try { - val value = this?.toLong() ?: return defaultValue - return when { - value > Int.MAX_VALUE -> Int.MAX_VALUE - value < 0 -> 0 - else -> value.toInt() - } - } catch (_: NumberFormatException) { - return defaultValue - } -} - -/** Returns an immutable copy of this. */ -fun List.toImmutableList(): List { - return Collections.unmodifiableList(toMutableList()) -} - -/** Returns an immutable list containing [elements]. */ -@SafeVarargs -fun immutableListOf(vararg elements: T): List { - return Collections.unmodifiableList(Arrays.asList(*elements.clone())) -} - -/** Returns an immutable copy of this. */ -fun Map.toImmutableMap(): Map { - return if (isEmpty()) { - emptyMap() - } else { - Collections.unmodifiableMap(LinkedHashMap(this)) - } -} - -/** Closes this, ignoring any checked exceptions. Does nothing if this is null. */ -fun Closeable.closeQuietly() { - try { - close() - } catch (rethrown: RuntimeException) { - throw rethrown - } catch (_: Exception) { - } -} - -/** Closes this, ignoring any checked exceptions. Does nothing if this is null. */ -fun Socket.closeQuietly() { - try { - close() - } catch (e: AssertionError) { - throw e - } catch (rethrown: RuntimeException) { - throw rethrown - } catch (_: Exception) { - } -} - -/** Closes this, ignoring any checked exceptions. Does nothing if this is null. */ -fun ServerSocket.closeQuietly() { - try { - close() - } catch (rethrown: RuntimeException) { - throw rethrown - } catch (_: Exception) { - } -} - -fun Long.toHexString() = java.lang.Long.toHexString(this) - -fun Int.toHexString() = Integer.toHexString(this) diff --git a/okhttp/src/test/java/okhttp3/AddressTest.java b/okhttp/src/test/java/okhttp3/AddressTest.java index 865e0149e..6453d93fa 100644 --- a/okhttp/src/test/java/okhttp3/AddressTest.java +++ b/okhttp/src/test/java/okhttp3/AddressTest.java @@ -21,7 +21,7 @@ import javax.net.SocketFactory; import okhttp3.internal.http.RecordingProxySelector; import org.junit.Test; -import static okhttp3.internal.UtilKt.immutableListOf; +import static okhttp3.internal.Util.immutableListOf; import static org.assertj.core.api.Assertions.assertThat; public final class AddressTest { diff --git a/okhttp/src/test/java/okhttp3/ConnectionReuseTest.java b/okhttp/src/test/java/okhttp3/ConnectionReuseTest.java index 0b374997c..caf3d1b85 100644 --- a/okhttp/src/test/java/okhttp3/ConnectionReuseTest.java +++ b/okhttp/src/test/java/okhttp3/ConnectionReuseTest.java @@ -29,7 +29,7 @@ import org.junit.rules.TestRule; import org.junit.rules.Timeout; import static java.util.Arrays.asList; -import static okhttp3.internal.UtilKt.closeQuietly; +import static okhttp3.internal.Util.closeQuietly; import static okhttp3.tls.internal.TlsUtil.localhost; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; diff --git a/okhttp/src/test/java/okhttp3/SocksProxy.java b/okhttp/src/test/java/okhttp3/SocksProxy.java index 5c23519fd..dd3e932f1 100644 --- a/okhttp/src/test/java/okhttp3/SocksProxy.java +++ b/okhttp/src/test/java/okhttp3/SocksProxy.java @@ -38,7 +38,7 @@ import okio.BufferedSink; import okio.BufferedSource; import okio.Okio; -import static okhttp3.internal.UtilKt.closeQuietly; +import static okhttp3.internal.Util.closeQuietly; /** * A limited implementation of SOCKS Protocol Version 5, intended to be similar to MockWebServer. diff --git a/okhttp/src/test/java/okhttp3/URLConnectionTest.java b/okhttp/src/test/java/okhttp3/URLConnectionTest.java index 4f11ee42f..745de7cc2 100644 --- a/okhttp/src/test/java/okhttp3/URLConnectionTest.java +++ b/okhttp/src/test/java/okhttp3/URLConnectionTest.java @@ -89,7 +89,7 @@ import static java.util.Locale.US; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.NANOSECONDS; import static okhttp3.internal.InternalKtKt.addHeaderLenient; -import static okhttp3.internal.UtilKt.immutableListOf; +import static okhttp3.internal.Util.immutableListOf; import static okhttp3.internal.http.StatusLine.HTTP_PERM_REDIRECT; import static okhttp3.internal.http.StatusLine.HTTP_TEMP_REDIRECT; import static okhttp3.mockwebserver.SocketPolicy.DISCONNECT_AFTER_REQUEST; diff --git a/okhttp/src/test/java/okhttp3/WebPlatformUrlTest.java b/okhttp/src/test/java/okhttp3/WebPlatformUrlTest.java index 2a376395a..6e975910d 100644 --- a/okhttp/src/test/java/okhttp3/WebPlatformUrlTest.java +++ b/okhttp/src/test/java/okhttp3/WebPlatformUrlTest.java @@ -25,7 +25,7 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; -import static okhttp3.internal.UtilKt.immutableListOf; +import static okhttp3.internal.Util.immutableListOf; import static org.assertj.core.api.Assertions.assertThat; /** Runs the web platform URL tests against Java URL models. */ diff --git a/okhttp/src/test/java/okhttp3/internal/connection/RouteSelectorTest.java b/okhttp/src/test/java/okhttp3/internal/connection/RouteSelectorTest.java index 0197008e3..6d8bea3fb 100644 --- a/okhttp/src/test/java/okhttp3/internal/connection/RouteSelectorTest.java +++ b/okhttp/src/test/java/okhttp3/internal/connection/RouteSelectorTest.java @@ -46,7 +46,7 @@ import org.junit.Before; import org.junit.Test; import static java.net.Proxy.NO_PROXY; -import static okhttp3.internal.UtilKt.immutableListOf; +import static okhttp3.internal.Util.immutableListOf; import static okhttp3.tls.internal.TlsUtil.localhost; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; diff --git a/okhttp/src/test/java/okhttp3/internal/http/ExternalHttp2Example.java b/okhttp/src/test/java/okhttp3/internal/http/ExternalHttp2Example.java index 33cd297f4..6a55aba93 100644 --- a/okhttp/src/test/java/okhttp3/internal/http/ExternalHttp2Example.java +++ b/okhttp/src/test/java/okhttp3/internal/http/ExternalHttp2Example.java @@ -22,7 +22,7 @@ import okhttp3.Protocol; import okhttp3.Request; import okhttp3.Response; -import static okhttp3.internal.UtilKt.immutableListOf; +import static okhttp3.internal.Util.immutableListOf; public final class ExternalHttp2Example { public static void main(String[] args) throws Exception { diff --git a/okhttp/src/test/java/okhttp3/internal/http2/HttpOverHttp2Test.java b/okhttp/src/test/java/okhttp3/internal/http2/HttpOverHttp2Test.java index a2e2b9a7c..49bdd8cdd 100644 --- a/okhttp/src/test/java/okhttp3/internal/http2/HttpOverHttp2Test.java +++ b/okhttp/src/test/java/okhttp3/internal/http2/HttpOverHttp2Test.java @@ -85,7 +85,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Arrays.asList; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; -import static okhttp3.internal.UtilKt.discard; +import static okhttp3.internal.Util.discard; import static okhttp3.tls.internal.TlsUtil.localhost; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.data.Offset.offset; diff --git a/okhttp/src/test/java/okhttp3/internal/http2/MockHttp2Peer.java b/okhttp/src/test/java/okhttp3/internal/http2/MockHttp2Peer.java index 1a09c95f9..ec26954ac 100644 --- a/okhttp/src/test/java/okhttp3/internal/http2/MockHttp2Peer.java +++ b/okhttp/src/test/java/okhttp3/internal/http2/MockHttp2Peer.java @@ -37,7 +37,7 @@ import okio.BufferedSource; import okio.ByteString; import okio.Okio; -import static okhttp3.internal.UtilKt.closeQuietly; +import static okhttp3.internal.Util.closeQuietly; /** Replays prerecorded outgoing frames and records incoming frames. */ public final class MockHttp2Peer implements Closeable {