From debb6c55f95e874790e0879a45ab7b0a1c407a05 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Dec 2024 10:44:39 +0000 Subject: [PATCH 1/6] Update dependency com.squareup:kotlinpoet to v2 (#8617) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3ae852dc6bf6..3de44f7e4ab8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -96,7 +96,7 @@ squareup-moshi = { module = "com.squareup.moshi:moshi", version.ref = "com-squar squareup-moshi-compiler = { module = "com.squareup.moshi:moshi-kotlin-codegen", version.ref = "com-squareup-moshi" } squareup-moshi-kotlin = { module = "com.squareup.moshi:moshi-kotlin", version.ref = "com-squareup-moshi" } squareup-okhttp-icu = "com.squareup.okhttpicu:okhttp-icu:0.2.0" -squareup-kotlinPoet = "com.squareup:kotlinpoet:1.18.1" +squareup-kotlinPoet = "com.squareup:kotlinpoet:2.0.0" squareup-okio = { module = "com.squareup.okio:okio", version.ref = "com-squareup-okio" } squareup-okio-fakefilesystem = { module = "com.squareup.okio:okio-fakefilesystem", version.ref = "com-squareup-okio" } squareup-okio-nodefilesystem = { module = "com.squareup.okio:okio-nodefilesystem", version.ref = "com-squareup-okio" } From 060b4a23bd0bef93303fb88a5bfb85969aadb4c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Dec 2024 10:47:02 +0000 Subject: [PATCH 2/6] Update dependency gradle to v8.12 (#8628) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.jar | Bin 43462 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 6 ++++-- gradlew.bat | 22 ++++++++++++---------- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd4917707c1f8861d8cb53dd15194d4248596..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 34592 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 delta 34555 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c1d5e0185987..e0fd02028bca 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a426907..f3b75f3b0d4f 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f135d..9d21a21834d5 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail From 6947be1baa3bd5e63e5fca41639fbde7cd0dd580 Mon Sep 17 00:00:00 2001 From: Yuri Schimke Date: Thu, 26 Dec 2024 19:24:49 +0200 Subject: [PATCH 3/6] Follow task avoidance guidance. (#8632) * Follow task avoidance guidance. https://docs.gradle.org/current/userguide/task_configuration_avoidance.html#sec:old_vs_new_configuration_api_overview --- build.gradle.kts | 12 ++++++++++-- gradle/libs.versions.toml | 2 ++ okcurl/build.gradle.kts | 3 ++- okhttp/build.gradle.kts | 25 ++++++++++++++----------- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 735e1c57e6cc..13122ea3fdf9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -57,7 +57,7 @@ allprojects { google() } - tasks.create("downloadDependencies") { + tasks.register("downloadDependencies") { description = "Download all dependencies to the Gradle cache" doLast { for (configuration in configurations) { @@ -96,6 +96,15 @@ subprojects { apply(plugin = "biz.aQute.bnd.builder") apply(plugin = "io.github.usefulness.maven-sympathy") + // Skip samples parent + if (project.buildFile.exists()) { + apply(plugin = "com.android.lint") + + dependencies { + "lintChecks"(rootProject.libs.androidx.lint.gradle) + } + } + tasks.withType { options.encoding = Charsets.UTF_8.toString() } @@ -266,7 +275,6 @@ subprojects { } plugins.withId("com.vanniktech.maven.publish.base") { - val publishingExtension = extensions.getByType(PublishingExtension::class.java) configure { publishToMavenCentral(SonatypeHost.S01, automaticRelease = true) signAllPublications() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3de44f7e4ab8..9ce30ad49d65 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,6 +8,7 @@ de-mannodermaus-junit5 = "1.6.0" graalvm = "24.1.1" kotlinx-serialization = "1.7.3" ksp = "2.1.0-1.0.29" +lintGradle = "1.0.0-alpha03" mockserverClient = "5.15.0" org-bouncycastle = "1.76" org-conscrypt = "2.5.2" @@ -23,6 +24,7 @@ androidx-activity = "androidx.activity:activity-ktx:1.9.3" androidx-annotation = "androidx.annotation:annotation:1.9.1" androidx-espresso-core = "androidx.test.espresso:espresso-core:3.6.1" androidx-junit = "androidx.test.ext:junit:1.2.1" +androidx-lint-gradle = { module = "androidx.lint:lint-gradle", version.ref = "lintGradle" } androidx-test-runner = "androidx.test:runner:1.6.2" animalsniffer-annotations = "org.codehaus.mojo:animal-sniffer-annotations:1.24" aqute-resolve = { module = "biz.aQute.bnd:biz.aQute.resolve", version.ref = "biz-aQute-bnd" } diff --git a/okcurl/build.gradle.kts b/okcurl/build.gradle.kts index 0968878d599b..a9060b2abb90 100644 --- a/okcurl/build.gradle.kts +++ b/okcurl/build.gradle.kts @@ -1,6 +1,7 @@ import com.vanniktech.maven.publish.JavadocJar import com.vanniktech.maven.publish.KotlinJvm import org.graalvm.buildtools.gradle.dsl.GraalVMExtension +import ru.vyarus.gradle.plugin.animalsniffer.AnimalSnifferExtension plugins { kotlin("jvm") @@ -39,7 +40,7 @@ dependencies { testImplementation(kotlin("test")) } -animalsniffer { +configure { isIgnoreFailures = true } diff --git a/okhttp/build.gradle.kts b/okhttp/build.gradle.kts index 60a7aa6cf63c..e1214a6fc1fe 100644 --- a/okhttp/build.gradle.kts +++ b/okhttp/build.gradle.kts @@ -1,9 +1,6 @@ import com.vanniktech.maven.publish.JavadocJar import com.vanniktech.maven.publish.KotlinJvm -import java.io.DataInputStream -import java.io.FileInputStream import java.util.Base64 -import java.util.zip.GZIPInputStream plugins { kotlin("jvm") @@ -18,8 +15,10 @@ fun ByteArray.toByteStringExpression(): String { } val copyKotlinTemplates = tasks.register("copyKotlinTemplates") { + val kotlinTemplatesOutput = layout.buildDirectory.dir("generated/sources/kotlinTemplates") + from("src/main/kotlinTemplates") - into(layout.buildDirectory.dir("generated/sources/kotlinTemplates")) + into(kotlinTemplatesOutput) // Tag as an input to regenerate after an update inputs.file("src/test/resources/okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz") @@ -43,18 +42,20 @@ val generateIdnaMappingTableConfiguration: Configuration by configurations.creat dependencies { generateIdnaMappingTableConfiguration(projects.okhttpIdnaMappingTable) } -val generateIdnaMappingTable by tasks.creating(JavaExec::class.java) { - outputs.dir(layout.buildDirectory.dir("generated/sources/idnaMappingTable")) +val generateIdnaMappingTable = tasks.register("generateIdnaMappingTable") { + val idnaOutput = layout.buildDirectory.dir("generated/sources/idnaMappingTable") + + outputs.dir(idnaOutput) mainClass.set("okhttp3.internal.idn.GenerateIdnaMappingTableCode") - args(layout.buildDirectory.dir("generated/sources/idnaMappingTable").get()) + args(idnaOutput.get()) classpath = generateIdnaMappingTableConfiguration } kotlin { sourceSets { getByName("main") { - kotlin.srcDir(copyKotlinTemplates.get().outputs) - kotlin.srcDir(generateIdnaMappingTable.outputs) + kotlin.srcDir(copyKotlinTemplates.map { it.outputs }) + kotlin.srcDir(generateIdnaMappingTable.map { it.outputs }) } } } @@ -107,11 +108,13 @@ normalization { // Expose OSGi jars to the test environment. val osgiTestDeploy: Configuration by configurations.creating -val copyOsgiTestDeployment by tasks.creating(Copy::class.java) { +val test by tasks.existing(Test::class) +val copyOsgiTestDeployment = tasks.register("copyOsgiTestDeployment") { from(osgiTestDeploy) into(layout.buildDirectory.dir("resources/test/okhttp3/osgi/deployments")) } -tasks.getByName("test") { + +test.configure { dependsOn(copyOsgiTestDeployment) } From 5b2a1e139e9721455990a1b3d1462be47d27c599 Mon Sep 17 00:00:00 2001 From: Yuri Schimke Date: Fri, 27 Dec 2024 15:39:56 +0200 Subject: [PATCH 4/6] Split okhttp core into Android and JVM (#8600) --- .../okhttp/android/testapp/MainActivity.kt | 4 + build.gradle.kts | 116 +- buildSrc/settings.gradle.kts | 1 + gradle.properties | 1 + gradle/libs.versions.toml | 3 +- mockwebserver-junit4/build.gradle.kts | 1 + okcurl/build.gradle.kts | 1 - okhttp-android/build.gradle.kts | 13 +- .../android/AndroidSocketAdapterTest.kt | 48 +- .../android/RobolectricOkHttpClientTest.kt | 2 +- okhttp-idna-mapping-table/build.gradle.kts | 2 + okhttp-osgi-tests/build.gradle.kts | 68 + .../src/test/kotlin}/okhttp3/osgi/OsgiTest.kt | 0 okhttp-testing-support/build.gradle.kts | 2 + .../okhttp3/internal/concurrent/TaskFaker.kt | 8 +- .../kotlin/okhttp3/testing/PlatformRule.kt | 8 +- okhttp/api/{ => android}/okhttp.api | 0 okhttp/api/jvm/okhttp.api | 1294 +++++++++++++++++ okhttp/build.gradle.kts | 290 ++-- .../META-INF/proguard => }/okhttp3.pro | 1 + okhttp/src/androidMain/AndroidManifest.xml | 4 + .../internal/platform/Android10Platform.kt | 0 .../internal/platform/AndroidPlatform.kt | 0 .../internal/platform/PlatformRegistry.kt | 13 + .../android/Android10SocketAdapter.kt | 0 .../android/AndroidCertificateChainCleaner.kt | 0 .../internal/platform/android/AndroidLog.kt | 0 .../platform/android/AndroidSocketAdapter.kt | 0 .../android/BouncyCastleSocketAdapter.kt | 15 +- .../android/ConscryptSocketAdapter.kt | 39 +- .../platform/android/DeferredSocketAdapter.kt | 0 .../platform/android/SocketAdapter.kt | 0 .../android/StandardAndroidSocketAdapter.kt | 0 .../kotlin/okhttp3/Address.kt | 0 .../kotlin/okhttp3/AsyncDns.kt | 0 .../kotlin/okhttp3/Authenticator.kt | 0 .../kotlin/okhttp3/Cache.kt | 0 .../kotlin/okhttp3/CacheControl.kt | 0 .../kotlin/okhttp3/Call.kt | 0 .../kotlin/okhttp3/Callback.kt | 0 .../kotlin/okhttp3/CertificatePinner.kt | 0 .../kotlin/okhttp3/Challenge.kt | 0 .../kotlin/okhttp3/CipherSuite.kt | 0 .../kotlin/okhttp3/Connection.kt | 0 .../kotlin/okhttp3/ConnectionListener.kt | 0 .../kotlin/okhttp3/ConnectionPool.kt | 0 .../kotlin/okhttp3/ConnectionSpec.kt | 0 .../kotlin/okhttp3/Cookie.kt | 0 .../kotlin/okhttp3/CookieJar.kt | 0 .../kotlin/okhttp3/Credentials.kt | 0 .../kotlin/okhttp3/Dispatcher.kt | 0 .../kotlin/okhttp3/Dns.kt | 0 .../kotlin/okhttp3/EventListener.kt | 0 .../kotlin/okhttp3/ExperimentalOkHttpApi.kt | 0 .../kotlin/okhttp3/FormBody.kt | 0 .../kotlin/okhttp3/Handshake.kt | 0 .../kotlin/okhttp3/Headers.kt | 0 .../kotlin/okhttp3/HttpUrl.kt | 0 .../kotlin/okhttp3/Interceptor.kt | 0 .../kotlin/okhttp3/MediaType.kt | 0 .../kotlin/okhttp3/MultipartBody.kt | 0 .../kotlin/okhttp3/MultipartReader.kt | 0 .../kotlin/okhttp3/OkHttp.kt | 0 .../kotlin/okhttp3/OkHttpClient.kt | 7 - .../kotlin/okhttp3/Protocol.kt | 0 .../kotlin/okhttp3/Request.kt | 0 .../kotlin/okhttp3/RequestBody.kt | 0 .../kotlin/okhttp3/Response.kt | 0 .../kotlin/okhttp3/ResponseBody.kt | 0 .../kotlin/okhttp3/Route.kt | 0 .../kotlin/okhttp3/TlsVersion.kt | 0 .../kotlin/okhttp3/WebSocket.kt | 0 .../kotlin/okhttp3/WebSocketListener.kt | 0 .../okhttp3/internal/-CacheControlCommon.kt | 0 .../okhttp3/internal/-ChallengeCommon.kt | 0 .../kotlin/okhttp3/internal/-HeadersCommon.kt | 0 .../okhttp3/internal/-HostnamesCommon.kt | 0 .../okhttp3/internal/-MediaTypeCommon.kt | 0 .../kotlin/okhttp3/internal/-NormalizeJvm.kt | 0 .../okhttp3/internal/-RequestBodyCommon.kt | 0 .../kotlin/okhttp3/internal/-RequestCommon.kt | 0 .../okhttp3/internal/-ResponseBodyCommon.kt | 0 .../okhttp3/internal/-ResponseCommon.kt | 0 .../kotlin/okhttp3/internal/-UtilCommon.kt | 0 .../kotlin/okhttp3/internal/-UtilJvm.kt | 0 .../internal/NativeImageTestsAccessors.kt | 0 .../internal/SuppressSignatureCheck.kt | 0 .../authenticator/JavaNetAuthenticator.kt | 0 .../internal/cache/CacheInterceptor.kt | 0 .../okhttp3/internal/cache/CacheRequest.kt | 0 .../okhttp3/internal/cache/CacheStrategy.kt | 0 .../okhttp3/internal/cache/DiskLruCache.kt | 0 .../okhttp3/internal/cache/FaultHidingSink.kt | 0 .../okhttp3/internal/cache2/FileOperator.kt | 0 .../kotlin/okhttp3/internal/cache2/Relay.kt | 0 .../okhttp3/internal/concurrent/Task.kt | 0 .../okhttp3/internal/concurrent/TaskLogger.kt | 0 .../okhttp3/internal/concurrent/TaskQueue.kt | 0 .../okhttp3/internal/concurrent/TaskRunner.kt | 0 .../internal/connection/CallConnectionUser.kt | 0 .../internal/connection/ConnectInterceptor.kt | 0 .../internal/connection/ConnectPlan.kt | 0 .../internal/connection/ConnectionUser.kt | 0 .../okhttp3/internal/connection/Exchange.kt | 0 .../internal/connection/ExchangeFinder.kt | 0 .../okhttp3/internal/connection/FailedPlan.kt | 0 .../connection/FastFallbackExchangeFinder.kt | 0 .../connection/ForceConnectRoutePlanner.kt | 0 .../internal/connection/InetAddressOrder.kt | 0 .../okhttp3/internal/connection/Locks.kt | 2 +- .../internal/connection/PoolConnectionUser.kt | 0 .../okhttp3/internal/connection/RealCall.kt | 0 .../internal/connection/RealConnection.kt | 0 .../internal/connection/RealConnectionPool.kt | 0 .../internal/connection/RealRoutePlanner.kt | 0 .../internal/connection/RetryTlsHandshake.kt | 0 .../okhttp3/internal/connection/ReusePlan.kt | 0 .../internal/connection/RouteDatabase.kt | 0 .../internal/connection/RoutePlanner.kt | 0 .../internal/connection/RouteSelector.kt | 0 .../connection/SequentialExchangeFinder.kt | 0 .../internal/http/BridgeInterceptor.kt | 0 .../internal/http/CallServerInterceptor.kt | 0 .../okhttp3/internal/http/DateFormatting.kt | 0 .../okhttp3/internal/http/ExchangeCodec.kt | 0 .../okhttp3/internal/http/HttpHeaders.kt | 0 .../okhttp3/internal/http/HttpMethod.kt | 0 .../okhttp3/internal/http/HttpStatusCodes.kt | 0 .../internal/http/RealInterceptorChain.kt | 0 .../okhttp3/internal/http/RealResponseBody.kt | 0 .../okhttp3/internal/http/RequestLine.kt | 0 .../http/RetryAndFollowUpInterceptor.kt | 0 .../okhttp3/internal/http/StatusLine.kt | 0 .../okhttp3/internal/http1/HeadersReader.kt | 0 .../internal/http1/Http1ExchangeCodec.kt | 0 .../http2/ConnectionShutdownException.kt | 0 .../okhttp3/internal/http2/ErrorCode.kt | 0 .../internal/http2/FlowControlListener.kt | 0 .../kotlin/okhttp3/internal/http2/Header.kt | 0 .../kotlin/okhttp3/internal/http2/Hpack.kt | 0 .../kotlin/okhttp3/internal/http2/Http2.kt | 0 .../okhttp3/internal/http2/Http2Connection.kt | 0 .../internal/http2/Http2ExchangeCodec.kt | 0 .../okhttp3/internal/http2/Http2Reader.kt | 0 .../okhttp3/internal/http2/Http2Stream.kt | 0 .../okhttp3/internal/http2/Http2Writer.kt | 0 .../kotlin/okhttp3/internal/http2/Huffman.kt | 0 .../okhttp3/internal/http2/PushObserver.kt | 0 .../kotlin/okhttp3/internal/http2/Settings.kt | 0 .../internal/http2/StreamResetException.kt | 0 .../http2/flowcontrol/WindowCounter.kt | 0 .../okhttp3/internal/idn/IdnaMappingTable.kt | 0 .../kotlin/okhttp3/internal/idn/Punycode.kt | 0 .../kotlin/okhttp3/internal/internal.kt | 0 .../okhttp3/internal/platform/Platform.kt | 80 +- .../internal/platform/PlatformRegistry.kt | 7 + .../internal/proxy/NullProxySelector.kt | 0 .../publicsuffix/PublicSuffixDatabase.kt | 0 .../internal/publicsuffix/PublicSuffixList.kt | 0 .../tls/BasicCertificateChainCleaner.kt | 0 .../internal/tls/BasicTrustRootIndex.kt | 0 .../internal/tls/CertificateChainCleaner.kt | 0 .../internal/tls/OkHostnameVerifier.kt | 0 .../okhttp3/internal/tls/TrustRootIndex.kt | 0 .../kotlin/okhttp3/internal/url/-Url.kt | 0 .../okhttp3/internal/ws/MessageDeflater.kt | 0 .../okhttp3/internal/ws/MessageInflater.kt | 0 .../okhttp3/internal/ws/RealWebSocket.kt | 0 .../internal/ws/WebSocketExtensions.kt | 0 .../okhttp3/internal/ws/WebSocketProtocol.kt | 0 .../okhttp3/internal/ws/WebSocketReader.kt | 0 .../okhttp3/internal/ws/WebSocketWriter.kt | 0 .../okhttp3/internal/-InternalVersion.kt | 0 .../publicsuffix/EmbeddedPublicSuffixList.kt | 0 .../kotlin/okhttp3/internal/graal/GraalSvm.kt | 10 - .../okhttp3/internal/graal/OkHttpFeature.kt | 0 .../internal/platform/BouncyCastlePlatform.kt | 0 .../internal/platform/ConscryptPlatform.kt | 0 .../platform/Jdk8WithJettyBootPlatform.kt | 0 .../okhttp3/internal/platform/Jdk9Platform.kt | 0 .../internal/platform/OpenJSSEPlatform.kt | 0 .../internal/platform/PlatformRegistry.kt | 68 + .../okhttp/okhttp/native-image.properties | 1 + .../okhttp/okhttp/reflect-config.json | 0 .../okhttp/okhttp/resource-config.json | 0 .../kotlin}/okhttp3/AddressTest.kt | 0 .../kotlin}/okhttp3/AutobahnTester.kt | 0 .../kotlin}/okhttp3/BouncyCastleTest.kt | 0 .../kotlin}/okhttp3/CacheControlJvmTest.kt | 0 .../kotlin}/okhttp3/CacheControlTest.kt | 0 .../kotlin}/okhttp3/CacheCorruptionTest.kt | 0 .../kotlin}/okhttp3/CacheTest.kt | 0 .../kotlin}/okhttp3/CallHandshakeTest.kt | 0 .../kotlin}/okhttp3/CallKotlinTest.kt | 0 .../kotlin}/okhttp3/CallTest.kt | 0 .../okhttp3/CertificateChainCleanerTest.kt | 0 .../okhttp3/CertificatePinnerKotlinTest.kt | 0 .../kotlin}/okhttp3/CertificatePinnerTest.kt | 0 .../kotlin}/okhttp3/ChannelSocketFactory.kt | 0 .../kotlin}/okhttp3/CipherSuiteTest.kt | 0 .../kotlin}/okhttp3/CommonRequestBodyTest.kt | 0 .../okhttp3/ConnectionCoalescingTest.kt | 0 .../kotlin}/okhttp3/ConnectionListenerTest.kt | 0 .../kotlin}/okhttp3/ConnectionReuseTest.kt | 0 .../kotlin}/okhttp3/ConnectionSpecTest.kt | 0 .../kotlin}/okhttp3/ConscryptTest.kt | 0 .../kotlin}/okhttp3/CookieTest.kt | 0 .../kotlin}/okhttp3/CookiesTest.kt | 0 .../kotlin}/okhttp3/CorrettoTest.kt | 0 .../kotlin}/okhttp3/DispatcherCleanupTest.kt | 0 .../kotlin}/okhttp3/DispatcherTest.kt | 0 .../kotlin}/okhttp3/DuplexTest.kt | 0 .../kotlin}/okhttp3/EventListenerTest.kt | 0 .../kotlin}/okhttp3/FakeRoutePlanner.kt | 0 .../FallbackTestClientSocketFactory.kt | 0 .../kotlin}/okhttp3/FastFallbackTest.kt | 0 .../kotlin}/okhttp3/FormBodyTest.kt | 0 .../kotlin}/okhttp3/HandshakeTest.kt | 0 .../kotlin}/okhttp3/HeadersChallengesTest.kt | 0 .../kotlin}/okhttp3/HeadersJvmTest.kt | 0 .../kotlin}/okhttp3/HeadersKotlinTest.kt | 0 .../kotlin}/okhttp3/HeadersRequestTest.kt | 0 .../kotlin}/okhttp3/HeadersTest.kt | 0 .../kotlin}/okhttp3/HttpUrlJvmTest.kt | 0 .../kotlin}/okhttp3/HttpUrlTest.kt | 0 .../kotlin}/okhttp3/InsecureForHostTest.kt | 0 .../kotlin}/okhttp3/InterceptorTest.kt | 0 .../kotlin}/okhttp3/JSSETest.kt | 0 .../okhttp3/KotlinDeprecationErrorTest.kt | 0 .../kotlin}/okhttp3/KotlinSourceModernTest.kt | 0 .../kotlin}/okhttp3/LoomTest.kt | 0 .../kotlin}/okhttp3/MediaTypeGetTest.kt | 0 .../kotlin}/okhttp3/MediaTypeJvmTest.kt | 0 .../kotlin}/okhttp3/MediaTypeTest.kt | 0 .../kotlin}/okhttp3/MultipartBodyTest.kt | 0 .../kotlin}/okhttp3/MultipartReaderTest.kt | 0 .../kotlin}/okhttp3/OkHttpClientTest.kt | 0 .../kotlin}/okhttp3/OkHttpTest.kt | 0 .../kotlin}/okhttp3/OpenJSSETest.kt | 0 .../kotlin}/okhttp3/ProtocolTest.kt | 0 .../kotlin}/okhttp3/PublicInternalApiTest.kt | 0 .../kotlin}/okhttp3/RecordedResponse.kt | 0 .../kotlin}/okhttp3/RecordingCallback.kt | 0 .../kotlin}/okhttp3/RecordingExecutor.kt | 0 .../kotlin}/okhttp3/RequestBodyTest.kt | 0 .../kotlin}/okhttp3/RequestCommonTest.kt | 0 .../kotlin}/okhttp3/RequestTest.kt | 0 .../kotlin}/okhttp3/ResponseBodyJvmTest.kt | 0 .../kotlin}/okhttp3/ResponseBodyTest.kt | 0 .../kotlin}/okhttp3/ResponseCommonTest.kt | 0 .../kotlin}/okhttp3/ResponseJvmTest.kt | 0 .../kotlin}/okhttp3/RouteFailureTest.kt | 0 .../okhttp3/ServerTruncatesRequestTest.kt | 0 .../kotlin}/okhttp3/SessionReuseTest.kt | 0 .../kotlin}/okhttp3/SocketChannelTest.kt | 0 .../kotlin}/okhttp3/SocksProxy.kt | 0 .../kotlin}/okhttp3/SocksProxyTest.kt | 0 .../kotlin}/okhttp3/TestLogHandler.kt | 0 .../kotlin}/okhttp3/TestTls13Request.kt | 0 .../kotlin}/okhttp3/URLConnectionTest.kt | 0 .../okhttp3/UrlComponentEncodingTester.kt | 0 .../okhttp3/UrlComponentEncodingTesterJvm.kt | 0 .../kotlin}/okhttp3/WebPlatformToAsciiData.kt | 2 +- .../kotlin}/okhttp3/WebPlatformToAsciiTest.kt | 0 .../kotlin}/okhttp3/WebPlatformUrlTest.kt | 0 .../kotlin}/okhttp3/WebPlatformUrlTestData.kt | 0 .../okhttp3/WholeOperationTimeoutTest.kt | 0 .../okhttp3/internal/DoubleInetAddressDns.kt | 0 .../kotlin}/okhttp3/internal/HostnamesTest.kt | 0 .../internal/RecordingAuthenticator.kt | 0 .../kotlin}/okhttp3/internal/UtilTest.kt | 0 .../authenticator/JavaNetAuthenticatorTest.kt | 0 .../internal/cache/DiskLruCacheTest.kt | 0 .../internal/cache2/FileOperatorTest.kt | 0 .../okhttp3/internal/cache2/RelayTest.kt | 0 .../internal/concurrent/TaskLoggerTest.kt | 0 .../concurrent/TaskRunnerRealBackendTest.kt | 0 .../internal/concurrent/TaskRunnerTest.kt | 0 .../internal/connection/ConnectionPoolTest.kt | 0 .../FastFallbackExchangeFinderTest.kt | 0 .../connection/InetAddressOrderTest.kt | 0 .../connection/RetryConnectionTest.kt | 0 .../internal/connection/RouteSelectorTest.kt | 0 .../okhttp3/internal/http/CancelTest.kt | 0 .../internal/http/ExternalHttp2Example.kt | 0 .../okhttp3/internal/http/HttpDateTest.kt | 0 .../okhttp3/internal/http/StatusLineTest.kt | 0 .../internal/http/ThreadInterruptTest.kt | 0 .../okhttp3/internal/http2/BaseTestHandler.kt | 0 .../okhttp3/internal/http2/FrameLogTest.kt | 0 .../okhttp3/internal/http2/HpackTest.kt | 0 .../internal/http2/Http2ConnectionTest.kt | 0 .../okhttp3/internal/http2/Http2Test.kt | 0 .../internal/http2/HttpOverHttp2Test.kt | 0 .../okhttp3/internal/http2/HuffmanTest.kt | 0 .../okhttp3/internal/http2/MockHttp2Peer.kt | 0 .../okhttp3/internal/http2/SettingsTest.kt | 0 .../internal/idn/IdnaMappingTableTest.kt | 0 .../okhttp3/internal/idn/PunycodeTest.kt | 0 .../okhttp3/internal/io/FaultyFileSystem.kt | 0 .../platform/Jdk8WithJettyBootPlatformTest.kt | 0 .../internal/platform/Jdk9PlatformTest.kt | 0 .../okhttp3/internal/platform/PlatformTest.kt | 0 .../publicsuffix/PublicSuffixDatabaseTest.kt | 0 .../publicsuffix/PublicSuffixListGenerator.kt | 0 .../publicsuffix/ResourcePublicSuffixList.kt | 0 .../CertificatePinnerChainValidationTest.kt | 0 .../okhttp3/internal/tls/ClientAuthTest.kt | 0 .../internal/tls/HostnameVerifierTest.kt | 0 .../ws/MessageDeflaterInflaterTest.kt | 0 .../okhttp3/internal/ws/RealWebSocketTest.kt | 0 .../internal/ws/WebSocketExtensionsTest.kt | 0 .../okhttp3/internal/ws/WebSocketHttpTest.kt | 0 .../internal/ws/WebSocketReaderTest.kt | 0 .../okhttp3/internal/ws/WebSocketRecorder.kt | 0 .../internal/ws/WebSocketWriterTest.kt | 0 .../okhttp3/internal/publicsuffix/NOTICE | 0 .../publicsuffix/PublicSuffixDatabase.gz | Bin .../publicsuffix/public_suffix_list.dat | 0 .../resources/web-platform-test-toascii.json | 0 .../web-platform-test-urltestdata.txt | 0 settings.gradle.kts | 24 +- 322 files changed, 1824 insertions(+), 311 deletions(-) create mode 100644 buildSrc/settings.gradle.kts rename {okhttp/src/test/java/okhttp3/internal/platform => okhttp-android/src/test/kotlin/okhttp3}/android/AndroidSocketAdapterTest.kt (76%) create mode 100644 okhttp-osgi-tests/build.gradle.kts rename {okhttp/src/test/java => okhttp-osgi-tests/src/test/kotlin}/okhttp3/osgi/OsgiTest.kt (100%) rename okhttp/api/{ => android}/okhttp.api (100%) create mode 100644 okhttp/api/jvm/okhttp.api rename okhttp/{src/main/resources/META-INF/proguard => }/okhttp3.pro (85%) create mode 100644 okhttp/src/androidMain/AndroidManifest.xml rename okhttp/src/{main => androidMain}/kotlin/okhttp3/internal/platform/Android10Platform.kt (100%) rename okhttp/src/{main => androidMain}/kotlin/okhttp3/internal/platform/AndroidPlatform.kt (100%) create mode 100644 okhttp/src/androidMain/kotlin/okhttp3/internal/platform/PlatformRegistry.kt rename okhttp/src/{main => androidMain}/kotlin/okhttp3/internal/platform/android/Android10SocketAdapter.kt (100%) rename okhttp/src/{main => androidMain}/kotlin/okhttp3/internal/platform/android/AndroidCertificateChainCleaner.kt (100%) rename okhttp/src/{main => androidMain}/kotlin/okhttp3/internal/platform/android/AndroidLog.kt (100%) rename okhttp/src/{main => androidMain}/kotlin/okhttp3/internal/platform/android/AndroidSocketAdapter.kt (100%) rename okhttp/src/{main => androidMain}/kotlin/okhttp3/internal/platform/android/BouncyCastleSocketAdapter.kt (81%) rename okhttp/src/{main => androidMain}/kotlin/okhttp3/internal/platform/android/ConscryptSocketAdapter.kt (64%) rename okhttp/src/{main => androidMain}/kotlin/okhttp3/internal/platform/android/DeferredSocketAdapter.kt (100%) rename okhttp/src/{main => androidMain}/kotlin/okhttp3/internal/platform/android/SocketAdapter.kt (100%) rename okhttp/src/{main => androidMain}/kotlin/okhttp3/internal/platform/android/StandardAndroidSocketAdapter.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Address.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/AsyncDns.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Authenticator.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Cache.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/CacheControl.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Call.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Callback.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/CertificatePinner.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Challenge.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/CipherSuite.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Connection.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/ConnectionListener.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/ConnectionPool.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/ConnectionSpec.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Cookie.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/CookieJar.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Credentials.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Dispatcher.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Dns.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/EventListener.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/ExperimentalOkHttpApi.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/FormBody.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Handshake.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Headers.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/HttpUrl.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Interceptor.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/MediaType.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/MultipartBody.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/MultipartReader.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/OkHttp.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/OkHttpClient.kt (99%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Protocol.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Request.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/RequestBody.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Response.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/ResponseBody.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/Route.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/TlsVersion.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/WebSocket.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/WebSocketListener.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-CacheControlCommon.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-ChallengeCommon.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-HeadersCommon.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-HostnamesCommon.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-MediaTypeCommon.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-NormalizeJvm.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-RequestBodyCommon.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-RequestCommon.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-ResponseBodyCommon.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-ResponseCommon.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-UtilCommon.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/-UtilJvm.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/NativeImageTestsAccessors.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/SuppressSignatureCheck.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/authenticator/JavaNetAuthenticator.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/cache/CacheInterceptor.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/cache/CacheRequest.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/cache/CacheStrategy.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/cache/DiskLruCache.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/cache/FaultHidingSink.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/cache2/FileOperator.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/cache2/Relay.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/concurrent/Task.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/concurrent/TaskLogger.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/concurrent/TaskQueue.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/concurrent/TaskRunner.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/CallConnectionUser.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/ConnectInterceptor.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/ConnectPlan.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/ConnectionUser.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/Exchange.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/ExchangeFinder.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/FailedPlan.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/FastFallbackExchangeFinder.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/ForceConnectRoutePlanner.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/InetAddressOrder.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/Locks.kt (97%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/PoolConnectionUser.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/RealCall.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/RealConnection.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/RealConnectionPool.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/RealRoutePlanner.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/RetryTlsHandshake.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/ReusePlan.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/RouteDatabase.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/RoutePlanner.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/RouteSelector.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/connection/SequentialExchangeFinder.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/BridgeInterceptor.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/CallServerInterceptor.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/DateFormatting.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/ExchangeCodec.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/HttpHeaders.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/HttpMethod.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/HttpStatusCodes.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/RealInterceptorChain.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/RealResponseBody.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/RequestLine.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/RetryAndFollowUpInterceptor.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http/StatusLine.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http1/HeadersReader.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http1/Http1ExchangeCodec.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/ConnectionShutdownException.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/ErrorCode.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/FlowControlListener.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/Header.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/Hpack.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/Http2.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/Http2Connection.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/Http2ExchangeCodec.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/Http2Reader.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/Http2Stream.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/Http2Writer.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/Huffman.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/PushObserver.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/Settings.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/StreamResetException.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/http2/flowcontrol/WindowCounter.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/idn/IdnaMappingTable.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/idn/Punycode.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/internal.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/platform/Platform.kt (78%) create mode 100644 okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/platform/PlatformRegistry.kt rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/proxy/NullProxySelector.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/publicsuffix/PublicSuffixDatabase.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/publicsuffix/PublicSuffixList.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/tls/BasicCertificateChainCleaner.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/tls/BasicTrustRootIndex.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/tls/CertificateChainCleaner.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/tls/OkHostnameVerifier.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/tls/TrustRootIndex.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/url/-Url.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/ws/MessageDeflater.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/ws/MessageInflater.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/ws/RealWebSocket.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/ws/WebSocketExtensions.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/ws/WebSocketProtocol.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/ws/WebSocketReader.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlin/okhttp3/internal/ws/WebSocketWriter.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlinTemplates/okhttp3/internal/-InternalVersion.kt (100%) rename okhttp/src/{main => commonJvmAndroid}/kotlinTemplates/okhttp3/internal/publicsuffix/EmbeddedPublicSuffixList.kt (100%) rename okhttp/src/{main => jvmMain}/kotlin/okhttp3/internal/graal/GraalSvm.kt (86%) rename okhttp/src/{main => jvmMain}/kotlin/okhttp3/internal/graal/OkHttpFeature.kt (100%) rename okhttp/src/{main => jvmMain}/kotlin/okhttp3/internal/platform/BouncyCastlePlatform.kt (100%) rename okhttp/src/{main => jvmMain}/kotlin/okhttp3/internal/platform/ConscryptPlatform.kt (100%) rename okhttp/src/{main => jvmMain}/kotlin/okhttp3/internal/platform/Jdk8WithJettyBootPlatform.kt (100%) rename okhttp/src/{main => jvmMain}/kotlin/okhttp3/internal/platform/Jdk9Platform.kt (100%) rename okhttp/src/{main => jvmMain}/kotlin/okhttp3/internal/platform/OpenJSSEPlatform.kt (100%) create mode 100644 okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/PlatformRegistry.kt create mode 100644 okhttp/src/jvmMain/resources/META-INF/native-image/okhttp/okhttp/native-image.properties rename okhttp/src/{main => jvmMain}/resources/META-INF/native-image/okhttp/okhttp/reflect-config.json (100%) rename okhttp/src/{main => jvmMain}/resources/META-INF/native-image/okhttp/okhttp/resource-config.json (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/AddressTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/AutobahnTester.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/BouncyCastleTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CacheControlJvmTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CacheControlTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CacheCorruptionTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CacheTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CallHandshakeTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CallKotlinTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CallTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CertificateChainCleanerTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CertificatePinnerKotlinTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CertificatePinnerTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ChannelSocketFactory.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CipherSuiteTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CommonRequestBodyTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ConnectionCoalescingTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ConnectionListenerTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ConnectionReuseTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ConnectionSpecTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ConscryptTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CookieTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CookiesTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/CorrettoTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/DispatcherCleanupTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/DispatcherTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/DuplexTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/EventListenerTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/FakeRoutePlanner.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/FallbackTestClientSocketFactory.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/FastFallbackTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/FormBodyTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/HandshakeTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/HeadersChallengesTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/HeadersJvmTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/HeadersKotlinTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/HeadersRequestTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/HeadersTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/HttpUrlJvmTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/HttpUrlTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/InsecureForHostTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/InterceptorTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/JSSETest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/KotlinDeprecationErrorTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/KotlinSourceModernTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/LoomTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/MediaTypeGetTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/MediaTypeJvmTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/MediaTypeTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/MultipartBodyTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/MultipartReaderTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/OkHttpClientTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/OkHttpTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/OpenJSSETest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ProtocolTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/PublicInternalApiTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/RecordedResponse.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/RecordingCallback.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/RecordingExecutor.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/RequestBodyTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/RequestCommonTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/RequestTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ResponseBodyJvmTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ResponseBodyTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ResponseCommonTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ResponseJvmTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/RouteFailureTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/ServerTruncatesRequestTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/SessionReuseTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/SocketChannelTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/SocksProxy.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/SocksProxyTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/TestLogHandler.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/TestTls13Request.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/URLConnectionTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/UrlComponentEncodingTester.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/UrlComponentEncodingTesterJvm.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/WebPlatformToAsciiData.kt (93%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/WebPlatformToAsciiTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/WebPlatformUrlTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/WebPlatformUrlTestData.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/WholeOperationTimeoutTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/DoubleInetAddressDns.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/HostnamesTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/RecordingAuthenticator.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/UtilTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/authenticator/JavaNetAuthenticatorTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/cache/DiskLruCacheTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/cache2/FileOperatorTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/cache2/RelayTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/concurrent/TaskLoggerTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/concurrent/TaskRunnerRealBackendTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/concurrent/TaskRunnerTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/connection/ConnectionPoolTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/connection/FastFallbackExchangeFinderTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/connection/InetAddressOrderTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/connection/RetryConnectionTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/connection/RouteSelectorTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http/CancelTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http/ExternalHttp2Example.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http/HttpDateTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http/StatusLineTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http/ThreadInterruptTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http2/BaseTestHandler.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http2/FrameLogTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http2/HpackTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http2/Http2ConnectionTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http2/Http2Test.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http2/HttpOverHttp2Test.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http2/HuffmanTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http2/MockHttp2Peer.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/http2/SettingsTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/idn/IdnaMappingTableTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/idn/PunycodeTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/io/FaultyFileSystem.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/platform/Jdk8WithJettyBootPlatformTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/platform/Jdk9PlatformTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/platform/PlatformTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/publicsuffix/PublicSuffixDatabaseTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/publicsuffix/PublicSuffixListGenerator.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/publicsuffix/ResourcePublicSuffixList.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/tls/CertificatePinnerChainValidationTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/tls/ClientAuthTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/tls/HostnameVerifierTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/ws/MessageDeflaterInflaterTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/ws/RealWebSocketTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/ws/WebSocketExtensionsTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/ws/WebSocketHttpTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/ws/WebSocketReaderTest.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/ws/WebSocketRecorder.kt (100%) rename okhttp/src/{test/java => jvmTest/kotlin}/okhttp3/internal/ws/WebSocketWriterTest.kt (100%) rename okhttp/src/{test => jvmTest}/resources/okhttp3/internal/publicsuffix/NOTICE (100%) rename okhttp/src/{test => jvmTest}/resources/okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz (100%) rename okhttp/src/{test => jvmTest}/resources/okhttp3/internal/publicsuffix/public_suffix_list.dat (100%) rename okhttp/src/{test => jvmTest}/resources/web-platform-test-toascii.json (100%) rename okhttp/src/{test => jvmTest}/resources/web-platform-test-urltestdata.txt (100%) diff --git a/android-test-app/src/main/kotlin/okhttp/android/testapp/MainActivity.kt b/android-test-app/src/main/kotlin/okhttp/android/testapp/MainActivity.kt index d9ed518156ff..cf896359b4b1 100644 --- a/android-test-app/src/main/kotlin/okhttp/android/testapp/MainActivity.kt +++ b/android-test-app/src/main/kotlin/okhttp/android/testapp/MainActivity.kt @@ -23,6 +23,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response +import okhttp3.internal.platform.AndroidPlatform import okio.IOException class MainActivity : ComponentActivity() { @@ -31,6 +32,9 @@ class MainActivity : ComponentActivity() { val client = OkHttpClient() + // Ensure we are compiling against the right variant + println(AndroidPlatform.isSupported) + val url = "https://github.com/square/okhttp".toHttpUrl() println(url.topPrivateDomain()) diff --git a/build.gradle.kts b/build.gradle.kts index 13122ea3fdf9..dd647ba4fe41 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,6 +8,7 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.jetbrains.dokka.gradle.DokkaTaskPartial import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.targets.jvm.tasks.KotlinJvmTest import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import ru.vyarus.gradle.plugin.animalsniffer.AnimalSnifferExtension import java.net.URI @@ -93,11 +94,16 @@ subprojects { apply(plugin = "checkstyle") apply(plugin = "ru.vyarus.animalsniffer") - apply(plugin = "biz.aQute.bnd.builder") - apply(plugin = "io.github.usefulness.maven-sympathy") + + // The 'java' plugin has been applied, but it is not compatible with the Android plugins. + // These are applied inside the okhttp module for that case specifically + if (project.name != "okhttp") { + apply(plugin = "biz.aQute.bnd.builder") + apply(plugin = "io.github.usefulness.maven-sympathy") + } // Skip samples parent - if (project.buildFile.exists()) { + if (project.buildFile.exists() && project.name != "okhttp") { apply(plugin = "com.android.lint") dependencies { @@ -109,9 +115,11 @@ subprojects { options.encoding = Charsets.UTF_8.toString() } - configure { - toolchain { - languageVersion.set(JavaLanguageVersion.of(17)) + if (plugins.hasPlugin(JavaBasePlugin::class.java)) { + extensions.configure { + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } } } @@ -126,33 +134,38 @@ subprojects { } } - configure { - config = resources.text.fromArchiveEntry(checkstyleConfig, "google_checks.xml") - toolVersion = rootProject.libs.versions.checkStyle.get() - sourceSets = listOf(project.sourceSets["main"]) - } + // Handled in :okhttp directly + if (project.name != "okhttp") { + configure { + config = resources.text.fromArchiveEntry(checkstyleConfig, "google_checks.xml") + toolVersion = rootProject.libs.versions.checkStyle.get() + sourceSets = listOf(project.sourceSets["main"]) + } - // Animal Sniffer confirms we generally don't use APIs not on Java 8. - configure { - annotation = "okhttp3.internal.SuppressSignatureCheck" - sourceSets = listOf(project.sourceSets["main"]) + // Animal Sniffer confirms we generally don't use APIs not on Java 8. + configure { + annotation = "okhttp3.internal.SuppressSignatureCheck" + sourceSets = listOf(project.sourceSets["main"]) + } } - val signature: Configuration by configurations.getting dependencies { // No dependency requirements for testing-support. if (project.name == "okhttp-testing-support") return@dependencies + // okhttp configured specifically. + if (project.name == "okhttp") return@dependencies + if (project.name == "mockwebserver3-junit5") { // JUnit 5's APIs need java.util.function.Function and java.util.Optional from API 24. - signature(rootProject.libs.signature.android.apilevel24) { artifact { type = "signature" } } + "signature"(rootProject.libs.signature.android.apilevel24) { artifact { type = "signature" } } } else { // Everything else requires Android API 21+. - signature(rootProject.libs.signature.android.apilevel21) { artifact { type = "signature" } } + "signature"(rootProject.libs.signature.android.apilevel21) { artifact { type = "signature" } } } // OkHttp requires Java 8+. - signature(rootProject.libs.codehaus.signature.java18) { artifact { type = "signature" } } + "signature"(rootProject.libs.codehaus.signature.java18) { artifact { type = "signature" } } } val javaVersionSetting = @@ -175,10 +188,15 @@ subprojects { } } - val testRuntimeOnly: Configuration by configurations.getting - dependencies { - testRuntimeOnly(rootProject.libs.junit.jupiter.engine) - testRuntimeOnly(rootProject.libs.junit.vintage.engine) + val platform = System.getProperty("okhttp.platform", "jdk9") + val testJavaVersion = System.getProperty("test.java.version", "21").toInt() + + if (project.name != "okhttp") { + val testRuntimeOnly: Configuration by configurations.getting + dependencies { + testRuntimeOnly(rootProject.libs.junit.jupiter.engine) + testRuntimeOnly(rootProject.libs.junit.vintage.engine) + } } tasks.withType { @@ -211,25 +229,30 @@ subprojects { tasks.withType().configureEach { environment("OKHTTP_ROOT", rootDir) } + tasks.withType().configureEach { + environment("OKHTTP_ROOT", rootDir) + } - if (platform == "jdk8alpn") { - // Add alpn-boot on Java 8 so we can use HTTP/2 without a stable API. - val alpnBootVersion = alpnBootVersion() - if (alpnBootVersion != null) { - val alpnBootJar = configurations.detachedConfiguration( - dependencies.create("org.mortbay.jetty.alpn:alpn-boot:$alpnBootVersion") - ).singleFile - tasks.withType { - jvmArgs("-Xbootclasspath/p:${alpnBootJar}") + if (project.name != "okhttp") { + if (platform == "jdk8alpn") { + // Add alpn-boot on Java 8 so we can use HTTP/2 without a stable API. + val alpnBootVersion = alpnBootVersion() + if (alpnBootVersion != null) { + val alpnBootJar = configurations.detachedConfiguration( + dependencies.create("org.mortbay.jetty.alpn:alpn-boot:$alpnBootVersion") + ).singleFile + tasks.withType { + jvmArgs("-Xbootclasspath/p:${alpnBootJar}") + } + } + } else if (platform == "conscrypt") { + dependencies { +// testRuntimeOnly(rootProject.libs.conscrypt.openjdk) + } + } else if (platform == "openjsse") { + dependencies { +// testRuntimeOnly(rootProject.libs.openjsse) } - } - } else if (platform == "conscrypt") { - dependencies { - testRuntimeOnly(rootProject.libs.conscrypt.openjdk) - } - } else if (platform == "openjsse") { - dependencies { - testRuntimeOnly(rootProject.libs.openjsse) } } @@ -246,6 +269,11 @@ subprojects { languageSettings.optIn("okhttp3.ExperimentalOkHttpApi") } } + plugins.withId("org.jetbrains.kotlin.multiplatform") { + kotlinExtension.sourceSets.configureEach { + languageSettings.optIn("okhttp3.ExperimentalOkHttpApi") + } + } plugins.withId("org.jetbrains.kotlin.android") { kotlinExtension.sourceSets.configureEach { languageSettings.optIn("okhttp3.ExperimentalOkHttpApi") @@ -316,6 +344,14 @@ subprojects { } } +plugins.withId("org.jetbrains.kotlin.jvm") { + val test = tasks.named("test") + tasks.register("jvmTest") { + description = "Get 'gradlew jvmTest' to run the tests of JVM-only modules" + dependsOn(test) + } +} + tasks.wrapper { distributionType = Wrapper.DistributionType.ALL } diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts new file mode 100644 index 000000000000..ae6fdeecb742 --- /dev/null +++ b/buildSrc/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "okhttp-buildSrc" diff --git a/gradle.properties b/gradle.properties index c7af0b38dfb6..439ab99d084e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,6 +2,7 @@ org.gradle.caching=true org.gradle.parallel=true android.useAndroidX=true +kotlin.mpp.applyDefaultHierarchyTemplate=false androidBuild=false graalBuild=false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9ce30ad49d65..a8745321b8de 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -47,7 +47,7 @@ gradlePlugin-androidJunit5 = "de.mannodermaus.gradle.plugins:android-junit5:1.11 gradlePlugin-animalsniffer = "ru.vyarus:gradle-animalsniffer-plugin:1.7.2" gradlePlugin-binaryCompatibilityValidator = "org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin:0.17.0" gradlePlugin-bnd = { module = "biz.aQute.bnd:biz.aQute.bnd.gradle", version.ref = "biz-aQute-bnd" } -gradlePlugin-dokka = "org.jetbrains.dokka:dokka-gradle-plugin:1.9.20" +gradlePlugin-dokka = "org.jetbrains.dokka:dokka-gradle-plugin:2.0.0" gradlePlugin-errorprone = "net.ltgt.gradle:gradle-errorprone-plugin:4.1.0" gradlePlugin-graalvmBuildTools = "org.graalvm.buildtools.native:org.graalvm.buildtools.native.gradle.plugin:0.10.4" gradlePlugin-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "org-jetbrains-kotlin" } @@ -78,7 +78,6 @@ kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = " kotlin-stdlib-osgi = { module = "org.jetbrains.kotlin:kotlin-osgi-bundle", version.ref = "org-jetbrains-kotlin" } kotlin-test-annotations = { module = "org.jetbrains.kotlin:kotlin-test-annotations-common", version.ref = "org-jetbrains-kotlin" } kotlin-test-common = { module = "org.jetbrains.kotlin:kotlin-test-common", version.ref = "org-jetbrains-kotlin" } -kotlin-test-js = { module = "org.jetbrains.kotlin:kotlin-test-js", version.ref = "org-jetbrains-kotlin" } kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "org-jetbrains-kotlin" } kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "org-jetbrains-coroutines" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "org-jetbrains-coroutines" } diff --git a/mockwebserver-junit4/build.gradle.kts b/mockwebserver-junit4/build.gradle.kts index ced54ebe9c95..389710bbe6d4 100644 --- a/mockwebserver-junit4/build.gradle.kts +++ b/mockwebserver-junit4/build.gradle.kts @@ -19,6 +19,7 @@ dependencies { api(libs.junit) testImplementation(libs.assertk) + testImplementation(libs.junit.vintage.engine) } mavenPublishing { diff --git a/okcurl/build.gradle.kts b/okcurl/build.gradle.kts index a9060b2abb90..0cfa1a5d19a2 100644 --- a/okcurl/build.gradle.kts +++ b/okcurl/build.gradle.kts @@ -55,7 +55,6 @@ tasks.shadowJar { mergeServiceFiles() } - if (testJavaVersion >= 11) { apply(plugin = "org.graalvm.buildtools.native") diff --git a/okhttp-android/build.gradle.kts b/okhttp-android/build.gradle.kts index 59a27124e4ff..d4360b71c694 100644 --- a/okhttp-android/build.gradle.kts +++ b/okhttp-android/build.gradle.kts @@ -64,6 +64,8 @@ dependencies { testImplementation(libs.robolectric) testImplementation(libs.androidx.espresso.core) testImplementation(libs.squareup.okio.fakefilesystem) + testImplementation(projects.okhttpTestingSupport) + testImplementation(rootProject.libs.conscrypt.openjdk) androidTestImplementation(projects.okhttpTls) androidTestImplementation(libs.assertk) @@ -71,7 +73,10 @@ dependencies { androidTestImplementation(libs.androidx.test.runner) } -mavenPublishing { - // AGP 7.2 embeds Dokka 4, which breaks publishing. Android modules are hardcoded to generate Javadoc instead of Gfm. - configure(com.vanniktech.maven.publish.AndroidSingleVariantLibrary(publishJavadocJar=false)) -} +// TODO remove this whole module after merging with okhttp +// Conflicts with KMP :okhttp outputs + +//mavenPublishing { +// // AGP 7.2 embeds Dokka 4, which breaks publishing. Android modules are hardcoded to generate Javadoc instead of Gfm. +// configure(com.vanniktech.maven.publish.AndroidSingleVariantLibrary(publishJavadocJar=false)) +//} diff --git a/okhttp/src/test/java/okhttp3/internal/platform/android/AndroidSocketAdapterTest.kt b/okhttp-android/src/test/kotlin/okhttp3/android/AndroidSocketAdapterTest.kt similarity index 76% rename from okhttp/src/test/java/okhttp3/internal/platform/android/AndroidSocketAdapterTest.kt rename to okhttp-android/src/test/kotlin/okhttp3/android/AndroidSocketAdapterTest.kt index 0d1b3e57f0ec..5c52f3e710af 100644 --- a/okhttp/src/test/java/okhttp3/internal/platform/android/AndroidSocketAdapterTest.kt +++ b/okhttp-android/src/test/kotlin/okhttp3/android/AndroidSocketAdapterTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package okhttp3.internal.platform.android +package okhttp3.android import java.security.Provider import javax.net.ssl.SSLContext @@ -22,7 +22,11 @@ import okhttp3.DelegatingSSLSocket import okhttp3.DelegatingSSLSocketFactory import okhttp3.Protocol.HTTP_1_1 import okhttp3.Protocol.HTTP_2 -import okhttp3.testing.PlatformRule +import okhttp3.internal.platform.android.AndroidSocketAdapter +import okhttp3.internal.platform.android.ConscryptSocketAdapter +import okhttp3.internal.platform.android.DeferredSocketAdapter +import okhttp3.internal.platform.android.SocketAdapter +import okhttp3.internal.platform.android.StandardAndroidSocketAdapter import org.conscrypt.Conscrypt import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull @@ -30,20 +34,13 @@ import org.junit.Assert.assertNull import org.junit.Assert.assertTrue import org.junit.Assume.assumeFalse import org.junit.Assume.assumeTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.extension.RegisterExtension -import org.junit.jupiter.params.ParameterizedTest -import org.junit.jupiter.params.provider.MethodSource - -class AndroidSocketAdapterTest { - @RegisterExtension @JvmField - val platform = PlatformRule() - - @BeforeEach - fun setUp() { - platform.assumeConscrypt() - } +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.ParameterizedRobolectricTestRunner +import org.robolectric.ParameterizedRobolectricTestRunner.Parameters +@RunWith(ParameterizedRobolectricTestRunner::class) +class AndroidSocketAdapterTest(val adapter: SocketAdapter) { val context: SSLContext by lazy { val provider: Provider = Conscrypt.newProviderBuilder().provideTrustManager(true).build() @@ -52,9 +49,8 @@ class AndroidSocketAdapterTest { } } - @ParameterizedTest - @MethodSource("data") - fun testMatchesSupportedSocket(adapter: SocketAdapter) { + @Test + fun testMatchesSupportedSocket() { val socketFactory = context.socketFactory val sslSocket = socketFactory.createSocket() as SSLSocket @@ -65,27 +61,24 @@ class AndroidSocketAdapterTest { assertNull(adapter.getSelectedProtocol(sslSocket)) } - @ParameterizedTest - @MethodSource("data") - fun testMatchesSupportedAndroidSocketFactory(adapter: SocketAdapter) { + @Test + fun testMatchesSupportedAndroidSocketFactory() { assumeTrue(adapter is StandardAndroidSocketAdapter) assertTrue(adapter.matchesSocketFactory(context.socketFactory)) assertNotNull(adapter.trustManager(context.socketFactory)) } - @ParameterizedTest - @MethodSource("data") - fun testDoesntMatchSupportedCustomSocketFactory(adapter: SocketAdapter) { + @Test + fun testDoesntMatchSupportedCustomSocketFactory() { assumeFalse(adapter is StandardAndroidSocketAdapter) assertFalse(adapter.matchesSocketFactory(context.socketFactory)) assertNull(adapter.trustManager(context.socketFactory)) } - @ParameterizedTest - @MethodSource("data") - fun testCustomSocket(adapter: SocketAdapter) { + @Test + fun testCustomSocket() { val socketFactory = DelegatingSSLSocketFactory(context.socketFactory) assertFalse(adapter.matchesSocketFactory(socketFactory)) @@ -101,6 +94,7 @@ class AndroidSocketAdapterTest { companion object { @JvmStatic + @Parameters(name = "{0}") fun data(): Collection { return listOfNotNull( DeferredSocketAdapter(ConscryptSocketAdapter.factory), diff --git a/okhttp-android/src/test/kotlin/okhttp3/android/RobolectricOkHttpClientTest.kt b/okhttp-android/src/test/kotlin/okhttp3/android/RobolectricOkHttpClientTest.kt index 1ffaefa723e9..0a8faf0d65ab 100644 --- a/okhttp-android/src/test/kotlin/okhttp3/android/RobolectricOkHttpClientTest.kt +++ b/okhttp-android/src/test/kotlin/okhttp3/android/RobolectricOkHttpClientTest.kt @@ -40,7 +40,7 @@ import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) @Config( - sdk = [30], + sdk = [21, 26, 30, 33, 35], ) class RobolectricOkHttpClientTest { private lateinit var context: Context diff --git a/okhttp-idna-mapping-table/build.gradle.kts b/okhttp-idna-mapping-table/build.gradle.kts index 250c18a60af5..7154371ce8b2 100644 --- a/okhttp-idna-mapping-table/build.gradle.kts +++ b/okhttp-idna-mapping-table/build.gradle.kts @@ -9,6 +9,8 @@ dependencies { testImplementation(libs.assertk) testImplementation(libs.junit.jupiter.api) testImplementation(libs.junit.jupiter.params) + + testImplementation(rootProject.libs.junit.jupiter.engine) } animalsniffer { diff --git a/okhttp-osgi-tests/build.gradle.kts b/okhttp-osgi-tests/build.gradle.kts new file mode 100644 index 000000000000..94b45096ebec --- /dev/null +++ b/okhttp-osgi-tests/build.gradle.kts @@ -0,0 +1,68 @@ +plugins { + kotlin("jvm") +} + +dependencies { + implementation(projects.okhttp) + implementation(projects.okhttpBrotli) + implementation(projects.okhttpCoroutines) + implementation(projects.okhttpDnsoverhttps) + implementation(projects.loggingInterceptor) + implementation(projects.okhttpSse) + implementation(projects.okhttpTls) + implementation(projects.okhttpUrlconnection) + + testImplementation(projects.okhttpTestingSupport) + testImplementation(libs.junit) + testImplementation(libs.kotlin.test.common) + testImplementation(libs.kotlin.test.junit) + testImplementation(libs.assertk) + + testImplementation(libs.aqute.resolve) +} + +normalization { + runtimeClasspath { + /* + - The below two ignored files are generated during test execution + by the test: okhttp/src/test/java/okhttp3/osgi/OsgiTest.java + + - The compressed index.xml file contains a timestamp property which + changes with every test execution, such that running the test + actually changes the test classpath itself. This means that it + can"t benefit from incremental build acceleration, because on every + execution it sees that the classpath has changed, and so to be + safe, it needs to re-run. + + - This is unfortunate, because actually it would be safe to declare + the task as up-to-date, because these two files, which are based on + the generated index.xml, are outputs, not inputs. We can be sure of + this because they are deleted in the @BeforeEach method of the + OsgiTest test class. + + - To enable the benefit of incremental builds, we can ask Gradle + to ignore these two files when considering whether the classpath + has changed. That is the purpose of this normalization block. + */ + ignore("okhttp3/osgi/workspace/cnf/repo/index.xml.gz") + ignore("okhttp3/osgi/workspace/cnf/repo/index.xml.gz.sha") + } +} + +// Expose OSGi jars to the test environment. +val osgiTestDeploy: Configuration by configurations.creating + +val test = tasks.named("test") +val copyOsgiTestDeployment = tasks.register("copyOsgiTestDeployment") { + from(osgiTestDeploy) + into(layout.buildDirectory.dir("resources/test/okhttp3/osgi/deployments")) +} + +test.configure { + dependsOn(copyOsgiTestDeployment) +} + +dependencies { + osgiTestDeploy(libs.eclipseOsgi) + osgiTestDeploy(libs.kotlin.stdlib.osgi) +} diff --git a/okhttp/src/test/java/okhttp3/osgi/OsgiTest.kt b/okhttp-osgi-tests/src/test/kotlin/okhttp3/osgi/OsgiTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/osgi/OsgiTest.kt rename to okhttp-osgi-tests/src/test/kotlin/okhttp3/osgi/OsgiTest.kt diff --git a/okhttp-testing-support/build.gradle.kts b/okhttp-testing-support/build.gradle.kts index 68d2cb4bc2ee..87c287063693 100644 --- a/okhttp-testing-support/build.gradle.kts +++ b/okhttp-testing-support/build.gradle.kts @@ -14,6 +14,8 @@ dependencies { api(libs.conscrypt.openjdk) api(libs.openjsse) + api(rootProject.libs.junit.jupiter.engine) + api(variantOf(libs.amazonCorretto) { classifier("linux-x86_64") }) diff --git a/okhttp-testing-support/src/main/kotlin/okhttp3/internal/concurrent/TaskFaker.kt b/okhttp-testing-support/src/main/kotlin/okhttp3/internal/concurrent/TaskFaker.kt index e9be10d078cd..b1b96c7f82b9 100644 --- a/okhttp-testing-support/src/main/kotlin/okhttp3/internal/concurrent/TaskFaker.kt +++ b/okhttp-testing-support/src/main/kotlin/okhttp3/internal/concurrent/TaskFaker.kt @@ -360,15 +360,17 @@ class TaskFaker : Closeable { timeout: Long, unit: TimeUnit, ): T? { - taskRunner.withLock { + return taskRunner.withLock { val waitUntil = nanoTime + unit.toNanos(timeout) while (true) { val result = poll() - if (result != null) return result - if (nanoTime >= waitUntil) return null + if (result != null) return@withLock result + if (nanoTime >= waitUntil) return@withLock null val editCountBefore = editCount yieldUntil { nanoTime >= waitUntil || editCount > editCountBefore } } + // TODO report compiler bug + TODO("Can't get here") } } diff --git a/okhttp-testing-support/src/main/kotlin/okhttp3/testing/PlatformRule.kt b/okhttp-testing-support/src/main/kotlin/okhttp3/testing/PlatformRule.kt index bbcda679fcfb..2b9f42d66439 100644 --- a/okhttp-testing-support/src/main/kotlin/okhttp3/testing/PlatformRule.kt +++ b/okhttp-testing-support/src/main/kotlin/okhttp3/testing/PlatformRule.kt @@ -26,6 +26,7 @@ import okhttp3.internal.platform.Jdk8WithJettyBootPlatform import okhttp3.internal.platform.Jdk9Platform import okhttp3.internal.platform.OpenJSSEPlatform import okhttp3.internal.platform.Platform +import okhttp3.internal.platform.PlatformRegistry import okhttp3.tls.HandshakeCertificates import okhttp3.tls.HeldCertificate import okhttp3.tls.internal.TlsUtil.localhost @@ -435,9 +436,14 @@ open class PlatformRule } @JvmStatic - fun getPlatformSystemProperty(): String { + fun getPlatformSystemProperty(): String? { var property: String? = System.getProperty(PROPERTY_NAME) + if (PlatformRegistry.isAndroid) { + // Platforms below are unavailable on Android + return null + } + if (property == null) { property = when (Platform.get()) { diff --git a/okhttp/api/okhttp.api b/okhttp/api/android/okhttp.api similarity index 100% rename from okhttp/api/okhttp.api rename to okhttp/api/android/okhttp.api diff --git a/okhttp/api/jvm/okhttp.api b/okhttp/api/jvm/okhttp.api new file mode 100644 index 000000000000..fcc0709091a4 --- /dev/null +++ b/okhttp/api/jvm/okhttp.api @@ -0,0 +1,1294 @@ +public final class okhttp3/Address { + public final fun -deprecated_certificatePinner ()Lokhttp3/CertificatePinner; + public final fun -deprecated_connectionSpecs ()Ljava/util/List; + public final fun -deprecated_dns ()Lokhttp3/Dns; + public final fun -deprecated_hostnameVerifier ()Ljavax/net/ssl/HostnameVerifier; + public final fun -deprecated_protocols ()Ljava/util/List; + public final fun -deprecated_proxy ()Ljava/net/Proxy; + public final fun -deprecated_proxyAuthenticator ()Lokhttp3/Authenticator; + public final fun -deprecated_proxySelector ()Ljava/net/ProxySelector; + public final fun -deprecated_socketFactory ()Ljavax/net/SocketFactory; + public final fun -deprecated_sslSocketFactory ()Ljavax/net/ssl/SSLSocketFactory; + public final fun -deprecated_url ()Lokhttp3/HttpUrl; + public fun (Ljava/lang/String;ILokhttp3/Dns;Ljavax/net/SocketFactory;Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/HostnameVerifier;Lokhttp3/CertificatePinner;Lokhttp3/Authenticator;Ljava/net/Proxy;Ljava/util/List;Ljava/util/List;Ljava/net/ProxySelector;)V + public final fun certificatePinner ()Lokhttp3/CertificatePinner; + public final fun connectionSpecs ()Ljava/util/List; + public final fun dns ()Lokhttp3/Dns; + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public final fun hostnameVerifier ()Ljavax/net/ssl/HostnameVerifier; + public final fun protocols ()Ljava/util/List; + public final fun proxy ()Ljava/net/Proxy; + public final fun proxyAuthenticator ()Lokhttp3/Authenticator; + public final fun proxySelector ()Ljava/net/ProxySelector; + public final fun socketFactory ()Ljavax/net/SocketFactory; + public final fun sslSocketFactory ()Ljavax/net/ssl/SSLSocketFactory; + public fun toString ()Ljava/lang/String; + public final fun url ()Lokhttp3/HttpUrl; +} + +public abstract interface class okhttp3/AsyncDns { + public static final field Companion Lokhttp3/AsyncDns$Companion; + public static final field TYPE_A I + public static final field TYPE_AAAA I + public abstract fun query (Ljava/lang/String;Lokhttp3/AsyncDns$Callback;)V +} + +public abstract interface class okhttp3/AsyncDns$Callback { + public abstract fun onFailure (Ljava/lang/String;Ljava/io/IOException;)V + public abstract fun onResponse (Ljava/lang/String;Ljava/util/List;)V +} + +public final class okhttp3/AsyncDns$Companion { + public static final field TYPE_A I + public static final field TYPE_AAAA I + public final fun toDns ([Lokhttp3/AsyncDns;)Lokhttp3/Dns; +} + +public final class okhttp3/AsyncDns$DnsClass : java/lang/Enum { + public static final field IPV4 Lokhttp3/AsyncDns$DnsClass; + public static final field IPV6 Lokhttp3/AsyncDns$DnsClass; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public final fun getType ()I + public static fun valueOf (Ljava/lang/String;)Lokhttp3/AsyncDns$DnsClass; + public static fun values ()[Lokhttp3/AsyncDns$DnsClass; +} + +public abstract interface class okhttp3/Authenticator { + public static final field Companion Lokhttp3/Authenticator$Companion; + public static final field JAVA_NET_AUTHENTICATOR Lokhttp3/Authenticator; + public static final field NONE Lokhttp3/Authenticator; + public abstract fun authenticate (Lokhttp3/Route;Lokhttp3/Response;)Lokhttp3/Request; +} + +public final class okhttp3/Authenticator$Companion { +} + +public final class okhttp3/Cache : java/io/Closeable, java/io/Flushable { + public static final field Companion Lokhttp3/Cache$Companion; + public final fun -deprecated_directory ()Ljava/io/File; + public fun (Ljava/io/File;J)V + public fun (Lokio/FileSystem;Lokio/Path;J)V + public fun close ()V + public final fun delete ()V + public final fun directory ()Ljava/io/File; + public final fun directoryPath ()Lokio/Path; + public final fun evictAll ()V + public fun flush ()V + public final fun hitCount ()I + public final fun initialize ()V + public final fun isClosed ()Z + public static final fun key (Lokhttp3/HttpUrl;)Ljava/lang/String; + public final fun maxSize ()J + public final fun networkCount ()I + public final fun requestCount ()I + public final fun size ()J + public final fun urls ()Ljava/util/Iterator; + public final fun writeAbortCount ()I + public final fun writeSuccessCount ()I +} + +public final class okhttp3/Cache$Companion { + public final fun hasVaryAll (Lokhttp3/Response;)Z + public final fun key (Lokhttp3/HttpUrl;)Ljava/lang/String; + public final fun varyHeaders (Lokhttp3/Response;)Lokhttp3/Headers; + public final fun varyMatches (Lokhttp3/Response;Lokhttp3/Headers;Lokhttp3/Request;)Z +} + +public final class okhttp3/CacheControl { + public static final field Companion Lokhttp3/CacheControl$Companion; + public static final field FORCE_CACHE Lokhttp3/CacheControl; + public static final field FORCE_NETWORK Lokhttp3/CacheControl; + public final fun -deprecated_immutable ()Z + public final fun -deprecated_maxAgeSeconds ()I + public final fun -deprecated_maxStaleSeconds ()I + public final fun -deprecated_minFreshSeconds ()I + public final fun -deprecated_mustRevalidate ()Z + public final fun -deprecated_noCache ()Z + public final fun -deprecated_noStore ()Z + public final fun -deprecated_noTransform ()Z + public final fun -deprecated_onlyIfCached ()Z + public final fun -deprecated_sMaxAgeSeconds ()I + public final fun immutable ()Z + public final fun isPrivate ()Z + public final fun isPublic ()Z + public final fun maxAgeSeconds ()I + public final fun maxStaleSeconds ()I + public final fun minFreshSeconds ()I + public final fun mustRevalidate ()Z + public final fun noCache ()Z + public final fun noStore ()Z + public final fun noTransform ()Z + public final fun onlyIfCached ()Z + public static final fun parse (Lokhttp3/Headers;)Lokhttp3/CacheControl; + public final fun sMaxAgeSeconds ()I + public fun toString ()Ljava/lang/String; +} + +public final class okhttp3/CacheControl$Builder { + public fun ()V + public final fun build ()Lokhttp3/CacheControl; + public final fun immutable ()Lokhttp3/CacheControl$Builder; + public final fun maxAge (ILjava/util/concurrent/TimeUnit;)Lokhttp3/CacheControl$Builder; + public final fun maxAge-LRDsOJo (J)Lokhttp3/CacheControl$Builder; + public final fun maxStale (ILjava/util/concurrent/TimeUnit;)Lokhttp3/CacheControl$Builder; + public final fun maxStale-LRDsOJo (J)Lokhttp3/CacheControl$Builder; + public final fun minFresh (ILjava/util/concurrent/TimeUnit;)Lokhttp3/CacheControl$Builder; + public final fun minFresh-LRDsOJo (J)Lokhttp3/CacheControl$Builder; + public final fun noCache ()Lokhttp3/CacheControl$Builder; + public final fun noStore ()Lokhttp3/CacheControl$Builder; + public final fun noTransform ()Lokhttp3/CacheControl$Builder; + public final fun onlyIfCached ()Lokhttp3/CacheControl$Builder; +} + +public final class okhttp3/CacheControl$Companion { + public final fun parse (Lokhttp3/Headers;)Lokhttp3/CacheControl; +} + +public abstract interface class okhttp3/Call : java/lang/Cloneable { + public abstract fun cancel ()V + public abstract fun clone ()Lokhttp3/Call; + public abstract fun enqueue (Lokhttp3/Callback;)V + public abstract fun execute ()Lokhttp3/Response; + public abstract fun isCanceled ()Z + public abstract fun isExecuted ()Z + public abstract fun request ()Lokhttp3/Request; + public abstract fun timeout ()Lokio/Timeout; +} + +public abstract interface class okhttp3/Call$Factory { + public abstract fun newCall (Lokhttp3/Request;)Lokhttp3/Call; +} + +public abstract interface class okhttp3/Callback { + public abstract fun onFailure (Lokhttp3/Call;Ljava/io/IOException;)V + public abstract fun onResponse (Lokhttp3/Call;Lokhttp3/Response;)V +} + +public final class okhttp3/CertificatePinner { + public static final field Companion Lokhttp3/CertificatePinner$Companion; + public static final field DEFAULT Lokhttp3/CertificatePinner; + public final fun check (Ljava/lang/String;Ljava/util/List;)V + public final fun check (Ljava/lang/String;[Ljava/security/cert/Certificate;)V + public fun equals (Ljava/lang/Object;)Z + public final fun findMatchingPins (Ljava/lang/String;)Ljava/util/List; + public final fun getPins ()Ljava/util/Set; + public fun hashCode ()I + public static final fun pin (Ljava/security/cert/Certificate;)Ljava/lang/String; + public static final fun sha1Hash (Ljava/security/cert/X509Certificate;)Lokio/ByteString; + public static final fun sha256Hash (Ljava/security/cert/X509Certificate;)Lokio/ByteString; +} + +public final class okhttp3/CertificatePinner$Builder { + public fun ()V + public final fun add (Ljava/lang/String;[Ljava/lang/String;)Lokhttp3/CertificatePinner$Builder; + public final fun build ()Lokhttp3/CertificatePinner; + public final fun getPins ()Ljava/util/List; +} + +public final class okhttp3/CertificatePinner$Companion { + public final fun pin (Ljava/security/cert/Certificate;)Ljava/lang/String; + public final fun sha1Hash (Ljava/security/cert/X509Certificate;)Lokio/ByteString; + public final fun sha256Hash (Ljava/security/cert/X509Certificate;)Lokio/ByteString; +} + +public final class okhttp3/CertificatePinner$Pin { + public fun (Ljava/lang/String;Ljava/lang/String;)V + public fun equals (Ljava/lang/Object;)Z + public final fun getHash ()Lokio/ByteString; + public final fun getHashAlgorithm ()Ljava/lang/String; + public final fun getPattern ()Ljava/lang/String; + public fun hashCode ()I + public final fun matchesCertificate (Ljava/security/cert/X509Certificate;)Z + public final fun matchesHostname (Ljava/lang/String;)Z + public fun toString ()Ljava/lang/String; +} + +public final class okhttp3/Challenge { + public final fun -deprecated_authParams ()Ljava/util/Map; + public final fun -deprecated_charset ()Ljava/nio/charset/Charset; + public final fun -deprecated_realm ()Ljava/lang/String; + public final fun -deprecated_scheme ()Ljava/lang/String; + public fun (Ljava/lang/String;Ljava/lang/String;)V + public fun (Ljava/lang/String;Ljava/util/Map;)V + public final fun authParams ()Ljava/util/Map; + public final fun charset ()Ljava/nio/charset/Charset; + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public final fun realm ()Ljava/lang/String; + public final fun scheme ()Ljava/lang/String; + public fun toString ()Ljava/lang/String; + public final fun withCharset (Ljava/nio/charset/Charset;)Lokhttp3/Challenge; +} + +public final class okhttp3/CipherSuite { + public static final field Companion Lokhttp3/CipherSuite$Companion; + public static final field TLS_AES_128_CCM_8_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_AES_128_CCM_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_AES_128_GCM_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_AES_256_GCM_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_CHACHA20_POLY1305_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_DSS_WITH_AES_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_DHE_DSS_WITH_AES_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_DSS_WITH_DES_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_WITH_AES_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_WITH_AES_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_DHE_RSA_WITH_DES_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 Lokhttp3/CipherSuite; + public static final field TLS_DH_anon_WITH_3DES_EDE_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DH_anon_WITH_AES_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DH_anon_WITH_AES_128_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_DH_anon_WITH_AES_128_GCM_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_DH_anon_WITH_AES_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DH_anon_WITH_AES_256_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_DH_anon_WITH_AES_256_GCM_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_DH_anon_WITH_DES_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_DH_anon_WITH_RC4_128_MD5 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_ECDSA_WITH_NULL_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_ECDSA_WITH_RC4_128_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_RSA_WITH_NULL_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDHE_RSA_WITH_RC4_128_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_ECDH_ECDSA_WITH_NULL_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_ECDSA_WITH_RC4_128_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_RSA_WITH_AES_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_ECDH_RSA_WITH_AES_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_ECDH_RSA_WITH_NULL_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_RSA_WITH_RC4_128_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_anon_WITH_AES_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_anon_WITH_AES_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_anon_WITH_NULL_SHA Lokhttp3/CipherSuite; + public static final field TLS_ECDH_anon_WITH_RC4_128_SHA Lokhttp3/CipherSuite; + public static final field TLS_EMPTY_RENEGOTIATION_INFO_SCSV Lokhttp3/CipherSuite; + public static final field TLS_FALLBACK_SCSV Lokhttp3/CipherSuite; + public static final field TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 Lokhttp3/CipherSuite; + public static final field TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA Lokhttp3/CipherSuite; + public static final field TLS_KRB5_EXPORT_WITH_RC4_40_MD5 Lokhttp3/CipherSuite; + public static final field TLS_KRB5_EXPORT_WITH_RC4_40_SHA Lokhttp3/CipherSuite; + public static final field TLS_KRB5_WITH_3DES_EDE_CBC_MD5 Lokhttp3/CipherSuite; + public static final field TLS_KRB5_WITH_3DES_EDE_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_KRB5_WITH_DES_CBC_MD5 Lokhttp3/CipherSuite; + public static final field TLS_KRB5_WITH_DES_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_KRB5_WITH_RC4_128_MD5 Lokhttp3/CipherSuite; + public static final field TLS_KRB5_WITH_RC4_128_SHA Lokhttp3/CipherSuite; + public static final field TLS_PSK_WITH_3DES_EDE_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_PSK_WITH_AES_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_PSK_WITH_AES_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_PSK_WITH_RC4_128_SHA Lokhttp3/CipherSuite; + public static final field TLS_RSA_EXPORT_WITH_DES40_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_RSA_EXPORT_WITH_RC4_40_MD5 Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_3DES_EDE_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_AES_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_AES_128_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_AES_128_GCM_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_AES_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_AES_256_CBC_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_AES_256_GCM_SHA384 Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_CAMELLIA_128_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_CAMELLIA_256_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_DES_CBC_SHA Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_NULL_MD5 Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_NULL_SHA Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_NULL_SHA256 Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_RC4_128_MD5 Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_RC4_128_SHA Lokhttp3/CipherSuite; + public static final field TLS_RSA_WITH_SEED_CBC_SHA Lokhttp3/CipherSuite; + public final fun -deprecated_javaName ()Ljava/lang/String; + public synthetic fun (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public static final fun forJavaName (Ljava/lang/String;)Lokhttp3/CipherSuite; + public final fun javaName ()Ljava/lang/String; + public fun toString ()Ljava/lang/String; +} + +public final class okhttp3/CipherSuite$Companion { + public final fun forJavaName (Ljava/lang/String;)Lokhttp3/CipherSuite; +} + +public abstract interface class okhttp3/Connection { + public abstract fun handshake ()Lokhttp3/Handshake; + public abstract fun protocol ()Lokhttp3/Protocol; + public abstract fun route ()Lokhttp3/Route; + public abstract fun socket ()Ljava/net/Socket; +} + +public abstract class okhttp3/ConnectionListener { + public static final field Companion Lokhttp3/ConnectionListener$Companion; + public fun ()V + public fun connectEnd (Lokhttp3/Connection;Lokhttp3/Route;Lokhttp3/Call;)V + public fun connectFailed (Lokhttp3/Route;Lokhttp3/Call;Ljava/io/IOException;)V + public fun connectStart (Lokhttp3/Route;Lokhttp3/Call;)V + public fun connectionAcquired (Lokhttp3/Connection;Lokhttp3/Call;)V + public fun connectionClosed (Lokhttp3/Connection;)V + public fun connectionReleased (Lokhttp3/Connection;Lokhttp3/Call;)V + public fun noNewExchanges (Lokhttp3/Connection;)V +} + +public final class okhttp3/ConnectionListener$Companion { + public final fun getNONE ()Lokhttp3/ConnectionListener; +} + +public final class okhttp3/ConnectionPool { + public fun ()V + public fun (IJLjava/util/concurrent/TimeUnit;)V + public fun (IJLjava/util/concurrent/TimeUnit;Lokhttp3/ConnectionListener;)V + public synthetic fun (IJLjava/util/concurrent/TimeUnit;Lokhttp3/ConnectionListener;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun connectionCount ()I + public final fun evictAll ()V + public final fun idleConnectionCount ()I + public final fun setPolicy (Lokhttp3/Address;Lokhttp3/ConnectionPool$AddressPolicy;)V +} + +public final class okhttp3/ConnectionPool$AddressPolicy { + public final field backoffDelayMillis J + public final field backoffJitterMillis I + public final field minimumConcurrentCalls I + public fun ()V + public fun (IJI)V + public synthetic fun (IJIILkotlin/jvm/internal/DefaultConstructorMarker;)V +} + +public final class okhttp3/ConnectionSpec { + public static final field CLEARTEXT Lokhttp3/ConnectionSpec; + public static final field COMPATIBLE_TLS Lokhttp3/ConnectionSpec; + public static final field Companion Lokhttp3/ConnectionSpec$Companion; + public static final field MODERN_TLS Lokhttp3/ConnectionSpec; + public static final field RESTRICTED_TLS Lokhttp3/ConnectionSpec; + public final fun -deprecated_cipherSuites ()Ljava/util/List; + public final fun -deprecated_supportsTlsExtensions ()Z + public final fun -deprecated_tlsVersions ()Ljava/util/List; + public final fun cipherSuites ()Ljava/util/List; + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public final fun isCompatible (Ljavax/net/ssl/SSLSocket;)Z + public final fun isTls ()Z + public final fun supportsTlsExtensions ()Z + public final fun tlsVersions ()Ljava/util/List; + public fun toString ()Ljava/lang/String; +} + +public final class okhttp3/ConnectionSpec$Builder { + public fun (Lokhttp3/ConnectionSpec;)V + public final fun allEnabledCipherSuites ()Lokhttp3/ConnectionSpec$Builder; + public final fun allEnabledTlsVersions ()Lokhttp3/ConnectionSpec$Builder; + public final fun build ()Lokhttp3/ConnectionSpec; + public final fun cipherSuites ([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder; + public final fun cipherSuites ([Lokhttp3/CipherSuite;)Lokhttp3/ConnectionSpec$Builder; + public final fun supportsTlsExtensions (Z)Lokhttp3/ConnectionSpec$Builder; + public final fun tlsVersions ([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder; + public final fun tlsVersions ([Lokhttp3/TlsVersion;)Lokhttp3/ConnectionSpec$Builder; +} + +public final class okhttp3/ConnectionSpec$Companion { +} + +public final class okhttp3/Cookie { + public static final field Companion Lokhttp3/Cookie$Companion; + public final fun -deprecated_domain ()Ljava/lang/String; + public final fun -deprecated_expiresAt ()J + public final fun -deprecated_hostOnly ()Z + public final fun -deprecated_httpOnly ()Z + public final fun -deprecated_name ()Ljava/lang/String; + public final fun -deprecated_path ()Ljava/lang/String; + public final fun -deprecated_persistent ()Z + public final fun -deprecated_secure ()Z + public final fun -deprecated_value ()Ljava/lang/String; + public synthetic fun (Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;ZZZZLjava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun domain ()Ljava/lang/String; + public fun equals (Ljava/lang/Object;)Z + public final fun expiresAt ()J + public fun hashCode ()I + public final fun hostOnly ()Z + public final fun httpOnly ()Z + public final fun matches (Lokhttp3/HttpUrl;)Z + public final fun name ()Ljava/lang/String; + public final fun newBuilder ()Lokhttp3/Cookie$Builder; + public static final fun parse (Lokhttp3/HttpUrl;Ljava/lang/String;)Lokhttp3/Cookie; + public static final fun parseAll (Lokhttp3/HttpUrl;Lokhttp3/Headers;)Ljava/util/List; + public final fun path ()Ljava/lang/String; + public final fun persistent ()Z + public final fun sameSite ()Ljava/lang/String; + public final fun secure ()Z + public fun toString ()Ljava/lang/String; + public final fun value ()Ljava/lang/String; +} + +public final class okhttp3/Cookie$Builder { + public fun ()V + public final fun build ()Lokhttp3/Cookie; + public final fun domain (Ljava/lang/String;)Lokhttp3/Cookie$Builder; + public final fun expiresAt (J)Lokhttp3/Cookie$Builder; + public final fun hostOnlyDomain (Ljava/lang/String;)Lokhttp3/Cookie$Builder; + public final fun httpOnly ()Lokhttp3/Cookie$Builder; + public final fun name (Ljava/lang/String;)Lokhttp3/Cookie$Builder; + public final fun path (Ljava/lang/String;)Lokhttp3/Cookie$Builder; + public final fun sameSite (Ljava/lang/String;)Lokhttp3/Cookie$Builder; + public final fun secure ()Lokhttp3/Cookie$Builder; + public final fun value (Ljava/lang/String;)Lokhttp3/Cookie$Builder; +} + +public final class okhttp3/Cookie$Companion { + public final fun parse (Lokhttp3/HttpUrl;Ljava/lang/String;)Lokhttp3/Cookie; + public final fun parseAll (Lokhttp3/HttpUrl;Lokhttp3/Headers;)Ljava/util/List; +} + +public abstract interface class okhttp3/CookieJar { + public static final field Companion Lokhttp3/CookieJar$Companion; + public static final field NO_COOKIES Lokhttp3/CookieJar; + public abstract fun loadForRequest (Lokhttp3/HttpUrl;)Ljava/util/List; + public abstract fun saveFromResponse (Lokhttp3/HttpUrl;Ljava/util/List;)V +} + +public final class okhttp3/CookieJar$Companion { +} + +public final class okhttp3/Credentials { + public static final field INSTANCE Lokhttp3/Credentials; + public static final fun basic (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + public static final fun basic (Ljava/lang/String;Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/lang/String; + public static synthetic fun basic$default (Ljava/lang/String;Ljava/lang/String;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/lang/String; +} + +public final class okhttp3/Dispatcher { + public final fun -deprecated_executorService ()Ljava/util/concurrent/ExecutorService; + public fun ()V + public fun (Ljava/util/concurrent/ExecutorService;)V + public final fun cancelAll ()V + public final fun executorService ()Ljava/util/concurrent/ExecutorService; + public final fun getIdleCallback ()Ljava/lang/Runnable; + public final fun getMaxRequests ()I + public final fun getMaxRequestsPerHost ()I + public final fun queuedCalls ()Ljava/util/List; + public final fun queuedCallsCount ()I + public final fun runningCalls ()Ljava/util/List; + public final fun runningCallsCount ()I + public final fun setIdleCallback (Ljava/lang/Runnable;)V + public final fun setMaxRequests (I)V + public final fun setMaxRequestsPerHost (I)V +} + +public abstract interface class okhttp3/Dns { + public static final field Companion Lokhttp3/Dns$Companion; + public static final field SYSTEM Lokhttp3/Dns; + public abstract fun lookup (Ljava/lang/String;)Ljava/util/List; +} + +public final class okhttp3/Dns$Companion { +} + +public abstract class okhttp3/EventListener { + public static final field Companion Lokhttp3/EventListener$Companion; + public static final field NONE Lokhttp3/EventListener; + public fun ()V + public fun cacheConditionalHit (Lokhttp3/Call;Lokhttp3/Response;)V + public fun cacheHit (Lokhttp3/Call;Lokhttp3/Response;)V + public fun cacheMiss (Lokhttp3/Call;)V + public fun callEnd (Lokhttp3/Call;)V + public fun callFailed (Lokhttp3/Call;Ljava/io/IOException;)V + public fun callStart (Lokhttp3/Call;)V + public fun canceled (Lokhttp3/Call;)V + public fun connectEnd (Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;Lokhttp3/Protocol;)V + public fun connectFailed (Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;Lokhttp3/Protocol;Ljava/io/IOException;)V + public fun connectStart (Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;)V + public fun connectionAcquired (Lokhttp3/Call;Lokhttp3/Connection;)V + public fun connectionReleased (Lokhttp3/Call;Lokhttp3/Connection;)V + public fun dnsEnd (Lokhttp3/Call;Ljava/lang/String;Ljava/util/List;)V + public fun dnsStart (Lokhttp3/Call;Ljava/lang/String;)V + public fun proxySelectEnd (Lokhttp3/Call;Lokhttp3/HttpUrl;Ljava/util/List;)V + public fun proxySelectStart (Lokhttp3/Call;Lokhttp3/HttpUrl;)V + public fun requestBodyEnd (Lokhttp3/Call;J)V + public fun requestBodyStart (Lokhttp3/Call;)V + public fun requestFailed (Lokhttp3/Call;Ljava/io/IOException;)V + public fun requestHeadersEnd (Lokhttp3/Call;Lokhttp3/Request;)V + public fun requestHeadersStart (Lokhttp3/Call;)V + public fun responseBodyEnd (Lokhttp3/Call;J)V + public fun responseBodyStart (Lokhttp3/Call;)V + public fun responseFailed (Lokhttp3/Call;Ljava/io/IOException;)V + public fun responseHeadersEnd (Lokhttp3/Call;Lokhttp3/Response;)V + public fun responseHeadersStart (Lokhttp3/Call;)V + public fun satisfactionFailure (Lokhttp3/Call;Lokhttp3/Response;)V + public fun secureConnectEnd (Lokhttp3/Call;Lokhttp3/Handshake;)V + public fun secureConnectStart (Lokhttp3/Call;)V +} + +public final class okhttp3/EventListener$Companion { +} + +public abstract interface class okhttp3/EventListener$Factory { + public abstract fun create (Lokhttp3/Call;)Lokhttp3/EventListener; +} + +public abstract interface annotation class okhttp3/ExperimentalOkHttpApi : java/lang/annotation/Annotation { +} + +public final class okhttp3/FormBody : okhttp3/RequestBody { + public static final field Companion Lokhttp3/FormBody$Companion; + public final fun -deprecated_size ()I + public fun contentLength ()J + public fun contentType ()Lokhttp3/MediaType; + public final fun encodedName (I)Ljava/lang/String; + public final fun encodedValue (I)Ljava/lang/String; + public final fun name (I)Ljava/lang/String; + public final fun size ()I + public final fun value (I)Ljava/lang/String; + public fun writeTo (Lokio/BufferedSink;)V +} + +public final class okhttp3/FormBody$Builder { + public fun ()V + public fun (Ljava/nio/charset/Charset;)V + public synthetic fun (Ljava/nio/charset/Charset;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun add (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/FormBody$Builder; + public final fun addEncoded (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/FormBody$Builder; + public final fun build ()Lokhttp3/FormBody; +} + +public final class okhttp3/FormBody$Companion { +} + +public final class okhttp3/Handshake { + public static final field Companion Lokhttp3/Handshake$Companion; + public final fun -deprecated_cipherSuite ()Lokhttp3/CipherSuite; + public final fun -deprecated_localCertificates ()Ljava/util/List; + public final fun -deprecated_localPrincipal ()Ljava/security/Principal; + public final fun -deprecated_peerCertificates ()Ljava/util/List; + public final fun -deprecated_peerPrincipal ()Ljava/security/Principal; + public final fun -deprecated_tlsVersion ()Lokhttp3/TlsVersion; + public final fun cipherSuite ()Lokhttp3/CipherSuite; + public fun equals (Ljava/lang/Object;)Z + public static final fun get (Ljavax/net/ssl/SSLSession;)Lokhttp3/Handshake; + public static final fun get (Lokhttp3/TlsVersion;Lokhttp3/CipherSuite;Ljava/util/List;Ljava/util/List;)Lokhttp3/Handshake; + public fun hashCode ()I + public final fun localCertificates ()Ljava/util/List; + public final fun localPrincipal ()Ljava/security/Principal; + public final fun peerCertificates ()Ljava/util/List; + public final fun peerPrincipal ()Ljava/security/Principal; + public final fun tlsVersion ()Lokhttp3/TlsVersion; + public fun toString ()Ljava/lang/String; +} + +public final class okhttp3/Handshake$Companion { + public final fun -deprecated_get (Ljavax/net/ssl/SSLSession;)Lokhttp3/Handshake; + public final fun get (Ljavax/net/ssl/SSLSession;)Lokhttp3/Handshake; + public final fun get (Lokhttp3/TlsVersion;Lokhttp3/CipherSuite;Ljava/util/List;Ljava/util/List;)Lokhttp3/Handshake; +} + +public final class okhttp3/Headers : java/lang/Iterable, kotlin/jvm/internal/markers/KMappedMarker { + public static final field Companion Lokhttp3/Headers$Companion; + public final fun -deprecated_size ()I + public final fun byteCount ()J + public fun equals (Ljava/lang/Object;)Z + public final fun get (Ljava/lang/String;)Ljava/lang/String; + public final fun getDate (Ljava/lang/String;)Ljava/util/Date; + public final fun getInstant (Ljava/lang/String;)Ljava/time/Instant; + public fun hashCode ()I + public fun iterator ()Ljava/util/Iterator; + public final fun name (I)Ljava/lang/String; + public final fun names ()Ljava/util/Set; + public final fun newBuilder ()Lokhttp3/Headers$Builder; + public static final fun of (Ljava/util/Map;)Lokhttp3/Headers; + public static final fun of ([Ljava/lang/String;)Lokhttp3/Headers; + public final fun size ()I + public final fun toMultimap ()Ljava/util/Map; + public fun toString ()Ljava/lang/String; + public final fun value (I)Ljava/lang/String; + public final fun values (Ljava/lang/String;)Ljava/util/List; +} + +public final class okhttp3/Headers$Builder { + public fun ()V + public final fun add (Ljava/lang/String;)Lokhttp3/Headers$Builder; + public final fun add (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; + public final fun add (Ljava/lang/String;Ljava/time/Instant;)Lokhttp3/Headers$Builder; + public final fun add (Ljava/lang/String;Ljava/util/Date;)Lokhttp3/Headers$Builder; + public final fun addAll (Lokhttp3/Headers;)Lokhttp3/Headers$Builder; + public final fun addUnsafeNonAscii (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; + public final fun build ()Lokhttp3/Headers; + public final fun get (Ljava/lang/String;)Ljava/lang/String; + public final fun removeAll (Ljava/lang/String;)Lokhttp3/Headers$Builder; + public final fun set (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; + public final fun set (Ljava/lang/String;Ljava/time/Instant;)Lokhttp3/Headers$Builder; + public final fun set (Ljava/lang/String;Ljava/util/Date;)Lokhttp3/Headers$Builder; +} + +public final class okhttp3/Headers$Companion { + public final fun -deprecated_of (Ljava/util/Map;)Lokhttp3/Headers; + public final fun -deprecated_of ([Ljava/lang/String;)Lokhttp3/Headers; + public final fun of (Ljava/util/Map;)Lokhttp3/Headers; + public final fun of ([Ljava/lang/String;)Lokhttp3/Headers; +} + +public final class okhttp3/HttpUrl { + public static final field Companion Lokhttp3/HttpUrl$Companion; + public final fun -deprecated_encodedFragment ()Ljava/lang/String; + public final fun -deprecated_encodedPassword ()Ljava/lang/String; + public final fun -deprecated_encodedPath ()Ljava/lang/String; + public final fun -deprecated_encodedPathSegments ()Ljava/util/List; + public final fun -deprecated_encodedQuery ()Ljava/lang/String; + public final fun -deprecated_encodedUsername ()Ljava/lang/String; + public final fun -deprecated_fragment ()Ljava/lang/String; + public final fun -deprecated_host ()Ljava/lang/String; + public final fun -deprecated_password ()Ljava/lang/String; + public final fun -deprecated_pathSegments ()Ljava/util/List; + public final fun -deprecated_pathSize ()I + public final fun -deprecated_port ()I + public final fun -deprecated_query ()Ljava/lang/String; + public final fun -deprecated_queryParameterNames ()Ljava/util/Set; + public final fun -deprecated_querySize ()I + public final fun -deprecated_scheme ()Ljava/lang/String; + public final fun -deprecated_uri ()Ljava/net/URI; + public final fun -deprecated_url ()Ljava/net/URL; + public final fun -deprecated_username ()Ljava/lang/String; + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public static final fun defaultPort (Ljava/lang/String;)I + public final fun encodedFragment ()Ljava/lang/String; + public final fun encodedPassword ()Ljava/lang/String; + public final fun encodedPath ()Ljava/lang/String; + public final fun encodedPathSegments ()Ljava/util/List; + public final fun encodedQuery ()Ljava/lang/String; + public final fun encodedUsername ()Ljava/lang/String; + public fun equals (Ljava/lang/Object;)Z + public final fun fragment ()Ljava/lang/String; + public static final fun get (Ljava/lang/String;)Lokhttp3/HttpUrl; + public static final fun get (Ljava/net/URI;)Lokhttp3/HttpUrl; + public static final fun get (Ljava/net/URL;)Lokhttp3/HttpUrl; + public fun hashCode ()I + public final fun host ()Ljava/lang/String; + public final fun isHttps ()Z + public final fun newBuilder ()Lokhttp3/HttpUrl$Builder; + public final fun newBuilder (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public static final fun parse (Ljava/lang/String;)Lokhttp3/HttpUrl; + public final fun password ()Ljava/lang/String; + public final fun pathSegments ()Ljava/util/List; + public final fun pathSize ()I + public final fun port ()I + public final fun query ()Ljava/lang/String; + public final fun queryParameter (Ljava/lang/String;)Ljava/lang/String; + public final fun queryParameterName (I)Ljava/lang/String; + public final fun queryParameterNames ()Ljava/util/Set; + public final fun queryParameterValue (I)Ljava/lang/String; + public final fun queryParameterValues (Ljava/lang/String;)Ljava/util/List; + public final fun querySize ()I + public final fun redact ()Ljava/lang/String; + public final fun resolve (Ljava/lang/String;)Lokhttp3/HttpUrl; + public final fun scheme ()Ljava/lang/String; + public fun toString ()Ljava/lang/String; + public final fun topPrivateDomain ()Ljava/lang/String; + public final fun uri ()Ljava/net/URI; + public final fun url ()Ljava/net/URL; + public final fun username ()Ljava/lang/String; +} + +public final class okhttp3/HttpUrl$Builder { + public fun ()V + public final fun addEncodedPathSegment (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun addEncodedPathSegments (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun addEncodedQueryParameter (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun addPathSegment (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun addPathSegments (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun addQueryParameter (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun build ()Lokhttp3/HttpUrl; + public final fun encodedFragment (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun encodedPassword (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun encodedPath (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun encodedQuery (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun encodedUsername (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun fragment (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun host (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun password (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun port (I)Lokhttp3/HttpUrl$Builder; + public final fun query (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun removeAllEncodedQueryParameters (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun removeAllQueryParameters (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun removePathSegment (I)Lokhttp3/HttpUrl$Builder; + public final fun scheme (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun setEncodedPathSegment (ILjava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun setEncodedQueryParameter (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun setPathSegment (ILjava/lang/String;)Lokhttp3/HttpUrl$Builder; + public final fun setQueryParameter (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; + public fun toString ()Ljava/lang/String; + public final fun username (Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; +} + +public final class okhttp3/HttpUrl$Companion { + public final fun -deprecated_get (Ljava/lang/String;)Lokhttp3/HttpUrl; + public final fun -deprecated_get (Ljava/net/URI;)Lokhttp3/HttpUrl; + public final fun -deprecated_get (Ljava/net/URL;)Lokhttp3/HttpUrl; + public final fun -deprecated_parse (Ljava/lang/String;)Lokhttp3/HttpUrl; + public final fun defaultPort (Ljava/lang/String;)I + public final fun get (Ljava/lang/String;)Lokhttp3/HttpUrl; + public final fun get (Ljava/net/URI;)Lokhttp3/HttpUrl; + public final fun get (Ljava/net/URL;)Lokhttp3/HttpUrl; + public final fun parse (Ljava/lang/String;)Lokhttp3/HttpUrl; +} + +public abstract interface class okhttp3/Interceptor { + public static final field Companion Lokhttp3/Interceptor$Companion; + public abstract fun intercept (Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; +} + +public abstract interface class okhttp3/Interceptor$Chain { + public abstract fun call ()Lokhttp3/Call; + public abstract fun connectTimeoutMillis ()I + public abstract fun connection ()Lokhttp3/Connection; + public abstract fun proceed (Lokhttp3/Request;)Lokhttp3/Response; + public abstract fun readTimeoutMillis ()I + public abstract fun request ()Lokhttp3/Request; + public abstract fun withConnectTimeout (ILjava/util/concurrent/TimeUnit;)Lokhttp3/Interceptor$Chain; + public abstract fun withReadTimeout (ILjava/util/concurrent/TimeUnit;)Lokhttp3/Interceptor$Chain; + public abstract fun withWriteTimeout (ILjava/util/concurrent/TimeUnit;)Lokhttp3/Interceptor$Chain; + public abstract fun writeTimeoutMillis ()I +} + +public final class okhttp3/Interceptor$Companion { + public final fun invoke (Lkotlin/jvm/functions/Function1;)Lokhttp3/Interceptor; +} + +public final class okhttp3/MediaType { + public static final field Companion Lokhttp3/MediaType$Companion; + public final fun -deprecated_subtype ()Ljava/lang/String; + public final fun -deprecated_type ()Ljava/lang/String; + public final fun charset ()Ljava/nio/charset/Charset; + public final fun charset (Ljava/nio/charset/Charset;)Ljava/nio/charset/Charset; + public static synthetic fun charset$default (Lokhttp3/MediaType;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/nio/charset/Charset; + public fun equals (Ljava/lang/Object;)Z + public static final fun get (Ljava/lang/String;)Lokhttp3/MediaType; + public fun hashCode ()I + public final fun parameter (Ljava/lang/String;)Ljava/lang/String; + public static final fun parse (Ljava/lang/String;)Lokhttp3/MediaType; + public final fun subtype ()Ljava/lang/String; + public fun toString ()Ljava/lang/String; + public final fun type ()Ljava/lang/String; +} + +public final class okhttp3/MediaType$Companion { + public final fun -deprecated_get (Ljava/lang/String;)Lokhttp3/MediaType; + public final fun -deprecated_parse (Ljava/lang/String;)Lokhttp3/MediaType; + public final fun get (Ljava/lang/String;)Lokhttp3/MediaType; + public final fun parse (Ljava/lang/String;)Lokhttp3/MediaType; +} + +public final class okhttp3/MultipartBody : okhttp3/RequestBody { + public static final field ALTERNATIVE Lokhttp3/MediaType; + public static final field Companion Lokhttp3/MultipartBody$Companion; + public static final field DIGEST Lokhttp3/MediaType; + public static final field FORM Lokhttp3/MediaType; + public static final field MIXED Lokhttp3/MediaType; + public static final field PARALLEL Lokhttp3/MediaType; + public final fun -deprecated_boundary ()Ljava/lang/String; + public final fun -deprecated_parts ()Ljava/util/List; + public final fun -deprecated_size ()I + public final fun -deprecated_type ()Lokhttp3/MediaType; + public final fun boundary ()Ljava/lang/String; + public fun contentLength ()J + public fun contentType ()Lokhttp3/MediaType; + public fun isOneShot ()Z + public final fun part (I)Lokhttp3/MultipartBody$Part; + public final fun parts ()Ljava/util/List; + public final fun size ()I + public final fun type ()Lokhttp3/MediaType; + public fun writeTo (Lokio/BufferedSink;)V +} + +public final class okhttp3/MultipartBody$Builder { + public fun ()V + public fun (Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun addFormDataPart (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/MultipartBody$Builder; + public final fun addFormDataPart (Ljava/lang/String;Ljava/lang/String;Lokhttp3/RequestBody;)Lokhttp3/MultipartBody$Builder; + public final fun addPart (Lokhttp3/Headers;Lokhttp3/RequestBody;)Lokhttp3/MultipartBody$Builder; + public final fun addPart (Lokhttp3/MultipartBody$Part;)Lokhttp3/MultipartBody$Builder; + public final fun addPart (Lokhttp3/RequestBody;)Lokhttp3/MultipartBody$Builder; + public final fun build ()Lokhttp3/MultipartBody; + public final fun setType (Lokhttp3/MediaType;)Lokhttp3/MultipartBody$Builder; +} + +public final class okhttp3/MultipartBody$Companion { +} + +public final class okhttp3/MultipartBody$Part { + public static final field Companion Lokhttp3/MultipartBody$Part$Companion; + public final fun -deprecated_body ()Lokhttp3/RequestBody; + public final fun -deprecated_headers ()Lokhttp3/Headers; + public synthetic fun (Lokhttp3/Headers;Lokhttp3/RequestBody;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun body ()Lokhttp3/RequestBody; + public static final fun create (Lokhttp3/Headers;Lokhttp3/RequestBody;)Lokhttp3/MultipartBody$Part; + public static final fun create (Lokhttp3/RequestBody;)Lokhttp3/MultipartBody$Part; + public static final fun createFormData (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/MultipartBody$Part; + public static final fun createFormData (Ljava/lang/String;Ljava/lang/String;Lokhttp3/RequestBody;)Lokhttp3/MultipartBody$Part; + public final fun headers ()Lokhttp3/Headers; +} + +public final class okhttp3/MultipartBody$Part$Companion { + public final fun create (Lokhttp3/Headers;Lokhttp3/RequestBody;)Lokhttp3/MultipartBody$Part; + public final fun create (Lokhttp3/RequestBody;)Lokhttp3/MultipartBody$Part; + public final fun createFormData (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/MultipartBody$Part; + public final fun createFormData (Ljava/lang/String;Ljava/lang/String;Lokhttp3/RequestBody;)Lokhttp3/MultipartBody$Part; +} + +public final class okhttp3/MultipartReader : java/io/Closeable { + public fun (Lokhttp3/ResponseBody;)V + public fun (Lokio/BufferedSource;Ljava/lang/String;)V + public final fun boundary ()Ljava/lang/String; + public fun close ()V + public final fun nextPart ()Lokhttp3/MultipartReader$Part; +} + +public final class okhttp3/MultipartReader$Part : java/io/Closeable { + public fun (Lokhttp3/Headers;Lokio/BufferedSource;)V + public final fun body ()Lokio/BufferedSource; + public fun close ()V + public final fun headers ()Lokhttp3/Headers; +} + +public final class okhttp3/OkHttp { + public static final field INSTANCE Lokhttp3/OkHttp; + public static final field VERSION Ljava/lang/String; +} + +public class okhttp3/OkHttpClient : okhttp3/Call$Factory, okhttp3/WebSocket$Factory { + public static final field Companion Lokhttp3/OkHttpClient$Companion; + public final fun -deprecated_authenticator ()Lokhttp3/Authenticator; + public final fun -deprecated_cache ()Lokhttp3/Cache; + public final fun -deprecated_callTimeoutMillis ()I + public final fun -deprecated_certificatePinner ()Lokhttp3/CertificatePinner; + public final fun -deprecated_connectTimeoutMillis ()I + public final fun -deprecated_connectionPool ()Lokhttp3/ConnectionPool; + public final fun -deprecated_connectionSpecs ()Ljava/util/List; + public final fun -deprecated_cookieJar ()Lokhttp3/CookieJar; + public final fun -deprecated_dispatcher ()Lokhttp3/Dispatcher; + public final fun -deprecated_dns ()Lokhttp3/Dns; + public final fun -deprecated_eventListenerFactory ()Lokhttp3/EventListener$Factory; + public final fun -deprecated_followRedirects ()Z + public final fun -deprecated_followSslRedirects ()Z + public final fun -deprecated_hostnameVerifier ()Ljavax/net/ssl/HostnameVerifier; + public final fun -deprecated_interceptors ()Ljava/util/List; + public final fun -deprecated_networkInterceptors ()Ljava/util/List; + public final fun -deprecated_pingIntervalMillis ()I + public final fun -deprecated_protocols ()Ljava/util/List; + public final fun -deprecated_proxy ()Ljava/net/Proxy; + public final fun -deprecated_proxyAuthenticator ()Lokhttp3/Authenticator; + public final fun -deprecated_proxySelector ()Ljava/net/ProxySelector; + public final fun -deprecated_readTimeoutMillis ()I + public final fun -deprecated_retryOnConnectionFailure ()Z + public final fun -deprecated_socketFactory ()Ljavax/net/SocketFactory; + public final fun -deprecated_sslSocketFactory ()Ljavax/net/ssl/SSLSocketFactory; + public final fun -deprecated_writeTimeoutMillis ()I + public fun ()V + public final fun address (Lokhttp3/HttpUrl;)Lokhttp3/Address; + public final fun authenticator ()Lokhttp3/Authenticator; + public final fun cache ()Lokhttp3/Cache; + public final fun callTimeoutMillis ()I + public final fun certificateChainCleaner ()Lokhttp3/internal/tls/CertificateChainCleaner; + public final fun certificatePinner ()Lokhttp3/CertificatePinner; + public final fun connectTimeoutMillis ()I + public final fun connectionPool ()Lokhttp3/ConnectionPool; + public final fun connectionSpecs ()Ljava/util/List; + public final fun cookieJar ()Lokhttp3/CookieJar; + public final fun dispatcher ()Lokhttp3/Dispatcher; + public final fun dns ()Lokhttp3/Dns; + public final fun eventListenerFactory ()Lokhttp3/EventListener$Factory; + public final fun fastFallback ()Z + public final fun followRedirects ()Z + public final fun followSslRedirects ()Z + public final fun hostnameVerifier ()Ljavax/net/ssl/HostnameVerifier; + public final fun interceptors ()Ljava/util/List; + public final fun minWebSocketMessageToCompress ()J + public final fun networkInterceptors ()Ljava/util/List; + public fun newBuilder ()Lokhttp3/OkHttpClient$Builder; + public fun newCall (Lokhttp3/Request;)Lokhttp3/Call; + public fun newWebSocket (Lokhttp3/Request;Lokhttp3/WebSocketListener;)Lokhttp3/WebSocket; + public final fun pingIntervalMillis ()I + public final fun protocols ()Ljava/util/List; + public final fun proxy ()Ljava/net/Proxy; + public final fun proxyAuthenticator ()Lokhttp3/Authenticator; + public final fun proxySelector ()Ljava/net/ProxySelector; + public final fun readTimeoutMillis ()I + public final fun retryOnConnectionFailure ()Z + public final fun socketFactory ()Ljavax/net/SocketFactory; + public final fun sslSocketFactory ()Ljavax/net/ssl/SSLSocketFactory; + public final fun webSocketCloseTimeout ()I + public final fun writeTimeoutMillis ()I + public final fun x509TrustManager ()Ljavax/net/ssl/X509TrustManager; +} + +public final class okhttp3/OkHttpClient$Builder { + public final fun -addInterceptor (Lkotlin/jvm/functions/Function1;)Lokhttp3/OkHttpClient$Builder; + public final fun -addNetworkInterceptor (Lkotlin/jvm/functions/Function1;)Lokhttp3/OkHttpClient$Builder; + public fun ()V + public final fun addInterceptor (Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder; + public final fun addNetworkInterceptor (Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder; + public final fun authenticator (Lokhttp3/Authenticator;)Lokhttp3/OkHttpClient$Builder; + public final fun build ()Lokhttp3/OkHttpClient; + public final fun cache (Lokhttp3/Cache;)Lokhttp3/OkHttpClient$Builder; + public final fun callTimeout (JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; + public final fun callTimeout (Ljava/time/Duration;)Lokhttp3/OkHttpClient$Builder; + public final fun callTimeout-LRDsOJo (J)Lokhttp3/OkHttpClient$Builder; + public final fun certificatePinner (Lokhttp3/CertificatePinner;)Lokhttp3/OkHttpClient$Builder; + public final fun connectTimeout (JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; + public final fun connectTimeout (Ljava/time/Duration;)Lokhttp3/OkHttpClient$Builder; + public final fun connectTimeout-LRDsOJo (J)Lokhttp3/OkHttpClient$Builder; + public final fun connectionPool (Lokhttp3/ConnectionPool;)Lokhttp3/OkHttpClient$Builder; + public final fun connectionSpecs (Ljava/util/List;)Lokhttp3/OkHttpClient$Builder; + public final fun cookieJar (Lokhttp3/CookieJar;)Lokhttp3/OkHttpClient$Builder; + public final fun dispatcher (Lokhttp3/Dispatcher;)Lokhttp3/OkHttpClient$Builder; + public final fun dns (Lokhttp3/Dns;)Lokhttp3/OkHttpClient$Builder; + public final fun eventListener (Lokhttp3/EventListener;)Lokhttp3/OkHttpClient$Builder; + public final fun eventListenerFactory (Lokhttp3/EventListener$Factory;)Lokhttp3/OkHttpClient$Builder; + public final fun fastFallback (Z)Lokhttp3/OkHttpClient$Builder; + public final fun followRedirects (Z)Lokhttp3/OkHttpClient$Builder; + public final fun followSslRedirects (Z)Lokhttp3/OkHttpClient$Builder; + public final fun hostnameVerifier (Ljavax/net/ssl/HostnameVerifier;)Lokhttp3/OkHttpClient$Builder; + public final fun interceptors ()Ljava/util/List; + public final fun minWebSocketMessageToCompress (J)Lokhttp3/OkHttpClient$Builder; + public final fun networkInterceptors ()Ljava/util/List; + public final fun pingInterval (JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; + public final fun pingInterval (Ljava/time/Duration;)Lokhttp3/OkHttpClient$Builder; + public final fun pingInterval-LRDsOJo (J)Lokhttp3/OkHttpClient$Builder; + public final fun protocols (Ljava/util/List;)Lokhttp3/OkHttpClient$Builder; + public final fun proxy (Ljava/net/Proxy;)Lokhttp3/OkHttpClient$Builder; + public final fun proxyAuthenticator (Lokhttp3/Authenticator;)Lokhttp3/OkHttpClient$Builder; + public final fun proxySelector (Ljava/net/ProxySelector;)Lokhttp3/OkHttpClient$Builder; + public final fun readTimeout (JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; + public final fun readTimeout (Ljava/time/Duration;)Lokhttp3/OkHttpClient$Builder; + public final fun readTimeout-LRDsOJo (J)Lokhttp3/OkHttpClient$Builder; + public final fun retryOnConnectionFailure (Z)Lokhttp3/OkHttpClient$Builder; + public final fun socketFactory (Ljavax/net/SocketFactory;)Lokhttp3/OkHttpClient$Builder; + public final fun sslSocketFactory (Ljavax/net/ssl/SSLSocketFactory;)Lokhttp3/OkHttpClient$Builder; + public final fun sslSocketFactory (Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; + public final fun webSocketCloseTimeout (JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; + public final fun webSocketCloseTimeout (Ljava/time/Duration;)Lokhttp3/OkHttpClient$Builder; + public final fun webSocketCloseTimeout-LRDsOJo (J)Lokhttp3/OkHttpClient$Builder; + public final fun writeTimeout (JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; + public final fun writeTimeout (Ljava/time/Duration;)Lokhttp3/OkHttpClient$Builder; + public final fun writeTimeout-LRDsOJo (J)Lokhttp3/OkHttpClient$Builder; +} + +public final class okhttp3/OkHttpClient$Companion { +} + +public final class okhttp3/Protocol : java/lang/Enum { + public static final field Companion Lokhttp3/Protocol$Companion; + public static final field H2_PRIOR_KNOWLEDGE Lokhttp3/Protocol; + public static final field HTTP_1_0 Lokhttp3/Protocol; + public static final field HTTP_1_1 Lokhttp3/Protocol; + public static final field HTTP_2 Lokhttp3/Protocol; + public static final field HTTP_3 Lokhttp3/Protocol; + public static final field QUIC Lokhttp3/Protocol; + public static final field SPDY_3 Lokhttp3/Protocol; + public static final fun get (Ljava/lang/String;)Lokhttp3/Protocol; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public fun toString ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Lokhttp3/Protocol; + public static fun values ()[Lokhttp3/Protocol; +} + +public final class okhttp3/Protocol$Companion { + public final fun get (Ljava/lang/String;)Lokhttp3/Protocol; +} + +public final class okhttp3/Request { + public final fun -deprecated_body ()Lokhttp3/RequestBody; + public final fun -deprecated_cacheControl ()Lokhttp3/CacheControl; + public final fun -deprecated_headers ()Lokhttp3/Headers; + public final fun -deprecated_method ()Ljava/lang/String; + public final fun -deprecated_url ()Lokhttp3/HttpUrl; + public fun (Lokhttp3/HttpUrl;Lokhttp3/Headers;Ljava/lang/String;Lokhttp3/RequestBody;)V + public synthetic fun (Lokhttp3/HttpUrl;Lokhttp3/Headers;Ljava/lang/String;Lokhttp3/RequestBody;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun body ()Lokhttp3/RequestBody; + public final fun cacheControl ()Lokhttp3/CacheControl; + public final fun cacheUrlOverride ()Lokhttp3/HttpUrl; + public final fun header (Ljava/lang/String;)Ljava/lang/String; + public final fun headers ()Lokhttp3/Headers; + public final fun headers (Ljava/lang/String;)Ljava/util/List; + public final fun isHttps ()Z + public final fun method ()Ljava/lang/String; + public final fun newBuilder ()Lokhttp3/Request$Builder; + public final fun tag ()Ljava/lang/Object; + public final fun tag (Ljava/lang/Class;)Ljava/lang/Object; + public final fun tag (Lkotlin/reflect/KClass;)Ljava/lang/Object; + public fun toString ()Ljava/lang/String; + public final fun url ()Lokhttp3/HttpUrl; +} + +public class okhttp3/Request$Builder { + public fun ()V + public fun addHeader (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder; + public fun build ()Lokhttp3/Request; + public fun cacheControl (Lokhttp3/CacheControl;)Lokhttp3/Request$Builder; + public final fun cacheUrlOverride (Lokhttp3/HttpUrl;)Lokhttp3/Request$Builder; + public final fun delete ()Lokhttp3/Request$Builder; + public fun delete (Lokhttp3/RequestBody;)Lokhttp3/Request$Builder; + public static synthetic fun delete$default (Lokhttp3/Request$Builder;Lokhttp3/RequestBody;ILjava/lang/Object;)Lokhttp3/Request$Builder; + public fun get ()Lokhttp3/Request$Builder; + public fun head ()Lokhttp3/Request$Builder; + public fun header (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder; + public fun headers (Lokhttp3/Headers;)Lokhttp3/Request$Builder; + public fun method (Ljava/lang/String;Lokhttp3/RequestBody;)Lokhttp3/Request$Builder; + public fun patch (Lokhttp3/RequestBody;)Lokhttp3/Request$Builder; + public fun post (Lokhttp3/RequestBody;)Lokhttp3/Request$Builder; + public fun put (Lokhttp3/RequestBody;)Lokhttp3/Request$Builder; + public fun removeHeader (Ljava/lang/String;)Lokhttp3/Request$Builder; + public fun tag (Ljava/lang/Class;Ljava/lang/Object;)Lokhttp3/Request$Builder; + public fun tag (Ljava/lang/Object;)Lokhttp3/Request$Builder; + public final fun tag (Lkotlin/reflect/KClass;Ljava/lang/Object;)Lokhttp3/Request$Builder; + public fun url (Ljava/lang/String;)Lokhttp3/Request$Builder; + public fun url (Ljava/net/URL;)Lokhttp3/Request$Builder; + public fun url (Lokhttp3/HttpUrl;)Lokhttp3/Request$Builder; +} + +public abstract class okhttp3/RequestBody { + public static final field Companion Lokhttp3/RequestBody$Companion; + public fun ()V + public fun contentLength ()J + public abstract fun contentType ()Lokhttp3/MediaType; + public static final fun create (Ljava/io/File;Lokhttp3/MediaType;)Lokhttp3/RequestBody; + public static final fun create (Ljava/io/FileDescriptor;Lokhttp3/MediaType;)Lokhttp3/RequestBody; + public static final fun create (Ljava/lang/String;Lokhttp3/MediaType;)Lokhttp3/RequestBody; + public static final fun create (Lokhttp3/MediaType;Ljava/io/File;)Lokhttp3/RequestBody; + public static final fun create (Lokhttp3/MediaType;Ljava/lang/String;)Lokhttp3/RequestBody; + public static final fun create (Lokhttp3/MediaType;Lokio/ByteString;)Lokhttp3/RequestBody; + public static final fun create (Lokhttp3/MediaType;[B)Lokhttp3/RequestBody; + public static final fun create (Lokhttp3/MediaType;[BI)Lokhttp3/RequestBody; + public static final fun create (Lokhttp3/MediaType;[BII)Lokhttp3/RequestBody; + public static final fun create (Lokio/ByteString;Lokhttp3/MediaType;)Lokhttp3/RequestBody; + public static final fun create (Lokio/Path;Lokio/FileSystem;Lokhttp3/MediaType;)Lokhttp3/RequestBody; + public static final fun create ([B)Lokhttp3/RequestBody; + public static final fun create ([BLokhttp3/MediaType;)Lokhttp3/RequestBody; + public static final fun create ([BLokhttp3/MediaType;I)Lokhttp3/RequestBody; + public static final fun create ([BLokhttp3/MediaType;II)Lokhttp3/RequestBody; + public static final fun gzip (Lokhttp3/RequestBody;)Lokhttp3/RequestBody; + public fun isDuplex ()Z + public fun isOneShot ()Z + public abstract fun writeTo (Lokio/BufferedSink;)V +} + +public final class okhttp3/RequestBody$Companion { + public final fun create (Ljava/io/File;Lokhttp3/MediaType;)Lokhttp3/RequestBody; + public final fun create (Ljava/io/FileDescriptor;Lokhttp3/MediaType;)Lokhttp3/RequestBody; + public final fun create (Ljava/lang/String;Lokhttp3/MediaType;)Lokhttp3/RequestBody; + public final fun create (Lokhttp3/MediaType;Ljava/io/File;)Lokhttp3/RequestBody; + public final fun create (Lokhttp3/MediaType;Ljava/lang/String;)Lokhttp3/RequestBody; + public final fun create (Lokhttp3/MediaType;Lokio/ByteString;)Lokhttp3/RequestBody; + public final fun create (Lokhttp3/MediaType;[B)Lokhttp3/RequestBody; + public final fun create (Lokhttp3/MediaType;[BI)Lokhttp3/RequestBody; + public final fun create (Lokhttp3/MediaType;[BII)Lokhttp3/RequestBody; + public final fun create (Lokio/ByteString;Lokhttp3/MediaType;)Lokhttp3/RequestBody; + public final fun create (Lokio/Path;Lokio/FileSystem;Lokhttp3/MediaType;)Lokhttp3/RequestBody; + public final fun create ([B)Lokhttp3/RequestBody; + public final fun create ([BLokhttp3/MediaType;)Lokhttp3/RequestBody; + public final fun create ([BLokhttp3/MediaType;I)Lokhttp3/RequestBody; + public final fun create ([BLokhttp3/MediaType;II)Lokhttp3/RequestBody; + public static synthetic fun create$default (Lokhttp3/RequestBody$Companion;Ljava/io/File;Lokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/RequestBody; + public static synthetic fun create$default (Lokhttp3/RequestBody$Companion;Ljava/io/FileDescriptor;Lokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/RequestBody; + public static synthetic fun create$default (Lokhttp3/RequestBody$Companion;Ljava/lang/String;Lokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/RequestBody; + public static synthetic fun create$default (Lokhttp3/RequestBody$Companion;Lokhttp3/MediaType;[BIIILjava/lang/Object;)Lokhttp3/RequestBody; + public static synthetic fun create$default (Lokhttp3/RequestBody$Companion;Lokio/ByteString;Lokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/RequestBody; + public static synthetic fun create$default (Lokhttp3/RequestBody$Companion;Lokio/Path;Lokio/FileSystem;Lokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/RequestBody; + public static synthetic fun create$default (Lokhttp3/RequestBody$Companion;[BLokhttp3/MediaType;IIILjava/lang/Object;)Lokhttp3/RequestBody; + public final fun gzip (Lokhttp3/RequestBody;)Lokhttp3/RequestBody; +} + +public final class okhttp3/Response : java/io/Closeable { + public final fun -deprecated_body ()Lokhttp3/ResponseBody; + public final fun -deprecated_cacheControl ()Lokhttp3/CacheControl; + public final fun -deprecated_cacheResponse ()Lokhttp3/Response; + public final fun -deprecated_code ()I + public final fun -deprecated_handshake ()Lokhttp3/Handshake; + public final fun -deprecated_headers ()Lokhttp3/Headers; + public final fun -deprecated_message ()Ljava/lang/String; + public final fun -deprecated_networkResponse ()Lokhttp3/Response; + public final fun -deprecated_priorResponse ()Lokhttp3/Response; + public final fun -deprecated_protocol ()Lokhttp3/Protocol; + public final fun -deprecated_receivedResponseAtMillis ()J + public final fun -deprecated_request ()Lokhttp3/Request; + public final fun -deprecated_sentRequestAtMillis ()J + public final fun body ()Lokhttp3/ResponseBody; + public final fun cacheControl ()Lokhttp3/CacheControl; + public final fun cacheResponse ()Lokhttp3/Response; + public final fun challenges ()Ljava/util/List; + public fun close ()V + public final fun code ()I + public final fun handshake ()Lokhttp3/Handshake; + public final fun header (Ljava/lang/String;)Ljava/lang/String; + public final fun header (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + public static synthetic fun header$default (Lokhttp3/Response;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String; + public final fun headers ()Lokhttp3/Headers; + public final fun headers (Ljava/lang/String;)Ljava/util/List; + public final fun isRedirect ()Z + public final fun isSuccessful ()Z + public final fun message ()Ljava/lang/String; + public final fun networkResponse ()Lokhttp3/Response; + public final fun newBuilder ()Lokhttp3/Response$Builder; + public final fun peekBody (J)Lokhttp3/ResponseBody; + public final fun priorResponse ()Lokhttp3/Response; + public final fun protocol ()Lokhttp3/Protocol; + public final fun receivedResponseAtMillis ()J + public final fun request ()Lokhttp3/Request; + public final fun sentRequestAtMillis ()J + public fun toString ()Ljava/lang/String; + public final fun trailers ()Lokhttp3/Headers; +} + +public class okhttp3/Response$Builder { + public fun ()V + public fun addHeader (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Response$Builder; + public fun body (Lokhttp3/ResponseBody;)Lokhttp3/Response$Builder; + public fun build ()Lokhttp3/Response; + public fun cacheResponse (Lokhttp3/Response;)Lokhttp3/Response$Builder; + public fun code (I)Lokhttp3/Response$Builder; + public fun handshake (Lokhttp3/Handshake;)Lokhttp3/Response$Builder; + public fun header (Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Response$Builder; + public fun headers (Lokhttp3/Headers;)Lokhttp3/Response$Builder; + public fun message (Ljava/lang/String;)Lokhttp3/Response$Builder; + public fun networkResponse (Lokhttp3/Response;)Lokhttp3/Response$Builder; + public fun priorResponse (Lokhttp3/Response;)Lokhttp3/Response$Builder; + public fun protocol (Lokhttp3/Protocol;)Lokhttp3/Response$Builder; + public fun receivedResponseAtMillis (J)Lokhttp3/Response$Builder; + public fun removeHeader (Ljava/lang/String;)Lokhttp3/Response$Builder; + public fun request (Lokhttp3/Request;)Lokhttp3/Response$Builder; + public fun sentRequestAtMillis (J)Lokhttp3/Response$Builder; + public fun trailers (Lkotlin/jvm/functions/Function0;)Lokhttp3/Response$Builder; +} + +public abstract class okhttp3/ResponseBody : java/io/Closeable { + public static final field Companion Lokhttp3/ResponseBody$Companion; + public fun ()V + public final fun byteStream ()Ljava/io/InputStream; + public final fun byteString ()Lokio/ByteString; + public final fun bytes ()[B + public final fun charStream ()Ljava/io/Reader; + public fun close ()V + public abstract fun contentLength ()J + public abstract fun contentType ()Lokhttp3/MediaType; + public static final fun create (Ljava/lang/String;Lokhttp3/MediaType;)Lokhttp3/ResponseBody; + public static final fun create (Lokhttp3/MediaType;JLokio/BufferedSource;)Lokhttp3/ResponseBody; + public static final fun create (Lokhttp3/MediaType;Ljava/lang/String;)Lokhttp3/ResponseBody; + public static final fun create (Lokhttp3/MediaType;Lokio/ByteString;)Lokhttp3/ResponseBody; + public static final fun create (Lokhttp3/MediaType;[B)Lokhttp3/ResponseBody; + public static final fun create (Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody; + public static final fun create (Lokio/ByteString;Lokhttp3/MediaType;)Lokhttp3/ResponseBody; + public static final fun create ([BLokhttp3/MediaType;)Lokhttp3/ResponseBody; + public abstract fun source ()Lokio/BufferedSource; + public final fun string ()Ljava/lang/String; +} + +public final class okhttp3/ResponseBody$Companion { + public final fun create (Ljava/lang/String;Lokhttp3/MediaType;)Lokhttp3/ResponseBody; + public final fun create (Lokhttp3/MediaType;JLokio/BufferedSource;)Lokhttp3/ResponseBody; + public final fun create (Lokhttp3/MediaType;Ljava/lang/String;)Lokhttp3/ResponseBody; + public final fun create (Lokhttp3/MediaType;Lokio/ByteString;)Lokhttp3/ResponseBody; + public final fun create (Lokhttp3/MediaType;[B)Lokhttp3/ResponseBody; + public final fun create (Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody; + public final fun create (Lokio/ByteString;Lokhttp3/MediaType;)Lokhttp3/ResponseBody; + public final fun create ([BLokhttp3/MediaType;)Lokhttp3/ResponseBody; + public static synthetic fun create$default (Lokhttp3/ResponseBody$Companion;Ljava/lang/String;Lokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/ResponseBody; + public static synthetic fun create$default (Lokhttp3/ResponseBody$Companion;Lokio/BufferedSource;Lokhttp3/MediaType;JILjava/lang/Object;)Lokhttp3/ResponseBody; + public static synthetic fun create$default (Lokhttp3/ResponseBody$Companion;Lokio/ByteString;Lokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/ResponseBody; + public static synthetic fun create$default (Lokhttp3/ResponseBody$Companion;[BLokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/ResponseBody; +} + +public final class okhttp3/Route { + public final fun -deprecated_address ()Lokhttp3/Address; + public final fun -deprecated_proxy ()Ljava/net/Proxy; + public final fun -deprecated_socketAddress ()Ljava/net/InetSocketAddress; + public fun (Lokhttp3/Address;Ljava/net/Proxy;Ljava/net/InetSocketAddress;)V + public final fun address ()Lokhttp3/Address; + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public final fun proxy ()Ljava/net/Proxy; + public final fun requiresTunnel ()Z + public final fun socketAddress ()Ljava/net/InetSocketAddress; + public fun toString ()Ljava/lang/String; +} + +public final class okhttp3/TlsVersion : java/lang/Enum { + public static final field Companion Lokhttp3/TlsVersion$Companion; + public static final field SSL_3_0 Lokhttp3/TlsVersion; + public static final field TLS_1_0 Lokhttp3/TlsVersion; + public static final field TLS_1_1 Lokhttp3/TlsVersion; + public static final field TLS_1_2 Lokhttp3/TlsVersion; + public static final field TLS_1_3 Lokhttp3/TlsVersion; + public final fun -deprecated_javaName ()Ljava/lang/String; + public static final fun forJavaName (Ljava/lang/String;)Lokhttp3/TlsVersion; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public final fun javaName ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Lokhttp3/TlsVersion; + public static fun values ()[Lokhttp3/TlsVersion; +} + +public final class okhttp3/TlsVersion$Companion { + public final fun forJavaName (Ljava/lang/String;)Lokhttp3/TlsVersion; +} + +public abstract interface class okhttp3/WebSocket { + public abstract fun cancel ()V + public abstract fun close (ILjava/lang/String;)Z + public abstract fun queueSize ()J + public abstract fun request ()Lokhttp3/Request; + public abstract fun send (Ljava/lang/String;)Z + public abstract fun send (Lokio/ByteString;)Z +} + +public abstract interface class okhttp3/WebSocket$Factory { + public abstract fun newWebSocket (Lokhttp3/Request;Lokhttp3/WebSocketListener;)Lokhttp3/WebSocket; +} + +public abstract class okhttp3/WebSocketListener { + public fun ()V + public fun onClosed (Lokhttp3/WebSocket;ILjava/lang/String;)V + public fun onClosing (Lokhttp3/WebSocket;ILjava/lang/String;)V + public fun onFailure (Lokhttp3/WebSocket;Ljava/lang/Throwable;Lokhttp3/Response;)V + public fun onMessage (Lokhttp3/WebSocket;Ljava/lang/String;)V + public fun onMessage (Lokhttp3/WebSocket;Lokio/ByteString;)V + public fun onOpen (Lokhttp3/WebSocket;Lokhttp3/Response;)V +} + diff --git a/okhttp/build.gradle.kts b/okhttp/build.gradle.kts index e1214a6fc1fe..cd9b9e66a8c7 100644 --- a/okhttp/build.gradle.kts +++ b/okhttp/build.gradle.kts @@ -1,15 +1,24 @@ +@file:Suppress("UnstableApiUsage") + +import aQute.bnd.gradle.BundleTaskExtension import com.vanniktech.maven.publish.JavadocJar -import com.vanniktech.maven.publish.KotlinJvm +import com.vanniktech.maven.publish.KotlinMultiplatform +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import ru.vyarus.gradle.plugin.animalsniffer.AnimalSnifferExtension import java.util.Base64 plugins { - kotlin("jvm") + kotlin("multiplatform") + id("com.android.library") kotlin("plugin.serialization") id("org.jetbrains.dokka") id("com.vanniktech.maven.publish.base") id("binary-compatibility-validator") } +val platform = System.getProperty("okhttp.platform", "jdk9") +val testJavaVersion = System.getProperty("test.java.version", "21").toInt() + fun ByteArray.toByteStringExpression(): String { return "\"${Base64.getEncoder().encodeToString(this@toByteStringExpression)}\".decodeBase64()!!" } @@ -17,15 +26,15 @@ fun ByteArray.toByteStringExpression(): String { val copyKotlinTemplates = tasks.register("copyKotlinTemplates") { val kotlinTemplatesOutput = layout.buildDirectory.dir("generated/sources/kotlinTemplates") - from("src/main/kotlinTemplates") + from("src/commonJvmAndroid/kotlinTemplates") into(kotlinTemplatesOutput) // Tag as an input to regenerate after an update - inputs.file("src/test/resources/okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz") + inputs.file("src/jvmTest/resources/okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz") filteringCharset = Charsets.UTF_8.toString() - val databaseGz = project.file("src/test/resources/okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz") + val databaseGz = project.file("src/jvmTest/resources/okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz") val listBytes = databaseGz.readBytes().toByteStringExpression() expand( @@ -52,125 +61,192 @@ val generateIdnaMappingTable = tasks.register("generateIdnaMappingTabl } kotlin { + jvmToolchain(8) + + jvm { +// withJava() /* <- cannot be used when the Android Plugin is present */ + } + + androidTarget { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + } + } + sourceSets { - getByName("main") { + val commonJvmAndroid = create("commonJvmAndroid") { + dependsOn(commonMain.get()) + kotlin.srcDir(copyKotlinTemplates.map { it.outputs }) kotlin.srcDir(generateIdnaMappingTable.map { it.outputs }) + + dependencies { + api(libs.squareup.okio) + api(libs.kotlin.stdlib) + + compileOnly(libs.findbugs.jsr305) + compileOnly(libs.animalsniffer.annotations) + } + } + + androidMain { + dependsOn(commonJvmAndroid) + dependencies { + compileOnly(libs.bouncycastle.bcprov) + compileOnly(libs.bouncycastle.bctls) + compileOnly(libs.conscrypt.openjdk) + } + } + + jvmMain { + dependsOn(commonJvmAndroid) + + dependencies { + // These compileOnly dependencies must also be listed in the OSGi configuration above. + compileOnly(libs.conscrypt.openjdk) + compileOnly(libs.bouncycastle.bcprov) + compileOnly(libs.bouncycastle.bctls) + + // graal build support + compileOnly(libs.nativeImageSvm) + compileOnly(libs.openjsse) + } + } + + val jvmTest by getting { + dependencies { + implementation(projects.okhttpTestingSupport) + implementation(libs.assertk) + implementation(libs.kotlin.test.annotations) + implementation(libs.kotlin.test.common) + implementation(libs.kotlinx.serialization.core) + implementation(libs.kotlinx.serialization.json) + implementation(projects.okhttpJavaNetCookiejar) + implementation(projects.okhttpTls) + implementation(projects.okhttpUrlconnection) + implementation(projects.mockwebserver3) + implementation(projects.mockwebserver3Junit4) + implementation(projects.mockwebserver3Junit5) + implementation(projects.mockwebserver) + implementation(projects.loggingInterceptor) + implementation(projects.okhttpBrotli) + implementation(projects.okhttpDnsoverhttps) + implementation(projects.okhttpIdnaMappingTable) + implementation(projects.okhttpSse) + implementation(projects.okhttpCoroutines) + implementation(libs.kotlinx.coroutines.core) + implementation(libs.squareup.moshi) + implementation(libs.squareup.moshi.kotlin) + implementation(libs.squareup.okio.fakefilesystem) + implementation(libs.conscrypt.openjdk) + implementation(libs.junit) + implementation(libs.junit.jupiter.api) + implementation(libs.junit.jupiter.params) + implementation(libs.kotlin.test.junit) + implementation(libs.openjsse) + compileOnly(libs.findbugs.jsr305) + + implementation(libs.junit.jupiter.engine) + implementation(libs.junit.vintage.engine) + + if (platform == "conscrypt") { + implementation(rootProject.libs.conscrypt.openjdk) + } else if (platform == "openjsse") { + implementation(rootProject.libs.openjsse) + } + } } } } -project.applyOsgi( - "Export-Package: okhttp3,okhttp3.internal.*;okhttpinternal=true;mandatory:=okhttpinternal", - "Import-Package: " + - "android.*;resolution:=optional," + - "com.oracle.svm.core.annotate;resolution:=optional," + - "com.oracle.svm.core.configure;resolution:=optional," + - "dalvik.system;resolution:=optional," + - "org.conscrypt;resolution:=optional," + - "org.bouncycastle.*;resolution:=optional," + - "org.openjsse.*;resolution:=optional," + - "org.graalvm.nativeimage;resolution:=optional," + - "org.graalvm.nativeimage.hosted;resolution:=optional," + - "sun.security.ssl;resolution:=optional,*", - "Automatic-Module-Name: okhttp3", - "Bundle-SymbolicName: com.squareup.okhttp3" -) - -normalization { - runtimeClasspath { - /* - - The below two ignored files are generated during test execution - by the test: okhttp/src/test/java/okhttp3/osgi/OsgiTest.java - - - The compressed index.xml file contains a timestamp property which - changes with every test execution, such that running the test - actually changes the test classpath itself. This means that it - can"t benefit from incremental build acceleration, because on every - execution it sees that the classpath has changed, and so to be - safe, it needs to re-run. - - - This is unfortunate, because actually it would be safe to declare - the task as up-to-date, because these two files, which are based on - the generated index.xml, are outputs, not inputs. We can be sure of - this because they are deleted in the @BeforeEach method of the - OsgiTest test class. - - - To enable the benefit of incremental builds, we can ask Gradle - to ignore these two files when considering whether the classpath - has changed. That is the purpose of this normalization block. - */ - ignore("okhttp3/osgi/workspace/cnf/repo/index.xml.gz") - ignore("okhttp3/osgi/workspace/cnf/repo/index.xml.gz.sha") +if (platform == "jdk8alpn") { + // Add alpn-boot on Java 8 so we can use HTTP/2 without a stable API. + val alpnBootVersion = alpnBootVersion() + if (alpnBootVersion != null) { + val alpnBootJar = configurations.detachedConfiguration( + dependencies.create("org.mortbay.jetty.alpn:alpn-boot:$alpnBootVersion") + ).singleFile + tasks.withType { + jvmArgs("-Xbootclasspath/p:${alpnBootJar}") + } } } -// Expose OSGi jars to the test environment. -val osgiTestDeploy: Configuration by configurations.creating +android { + compileSdk = 34 + + namespace = "okhttp.okhttp3" + + defaultConfig { + minSdk = 21 -val test by tasks.existing(Test::class) -val copyOsgiTestDeployment = tasks.register("copyOsgiTestDeployment") { - from(osgiTestDeploy) - into(layout.buildDirectory.dir("resources/test/okhttp3/osgi/deployments")) + consumerProguardFiles("okhttp3.pro") + } } -test.configure { - dependsOn(copyOsgiTestDeployment) +// Hack to make BundleTaskExtension pass briefly +project.extensions + .getByType(JavaPluginExtension::class.java) + .sourceSets.create("main") + +// Call the convention when the task has finished, to modify the jar to contain OSGi metadata. +tasks.named("jvmJar").configure { + val bundleExtension = extensions.create( + BundleTaskExtension.NAME, + BundleTaskExtension::class.java, + this, + ).apply { + classpath(libs.kotlin.stdlib.osgi.map { it.artifacts }, tasks.named("jvmMainClasses").map { it.outputs }) + bnd( + "Export-Package: okhttp3,okhttp3.internal.*;okhttpinternal=true;mandatory:=okhttpinternal", + "Import-Package: " + + "com.oracle.svm.core.annotate;resolution:=optional," + + "com.oracle.svm.core.configure;resolution:=optional," + + "dalvik.system;resolution:=optional," + + "org.conscrypt;resolution:=optional," + + "org.bouncycastle.*;resolution:=optional," + + "org.openjsse.*;resolution:=optional," + + "org.graalvm.nativeimage;resolution:=optional," + + "org.graalvm.nativeimage.hosted;resolution:=optional," + + "sun.security.ssl;resolution:=optional,*", + "Automatic-Module-Name: okhttp3", + "Bundle-SymbolicName: com.squareup.okhttp3" + ) + } + + doLast { + bundleExtension.buildAction().execute(this) + } } +val checkstyleConfig: Configuration by configurations.named("checkstyleConfig") dependencies { - api(libs.squareup.okio) - api(libs.kotlin.stdlib) - - // These compileOnly dependencies must also be listed in the OSGi configuration above. - compileOnly(libs.robolectric.android) - compileOnly(libs.bouncycastle.bcprov) - compileOnly(libs.bouncycastle.bctls) - compileOnly(libs.conscrypt.openjdk) - compileOnly(libs.openjsse) - compileOnly(libs.findbugs.jsr305) - compileOnly(libs.animalsniffer.annotations) - - // graal build support - compileOnly(libs.nativeImageSvm) - - testCompileOnly(libs.bouncycastle.bctls) - testImplementation(projects.okhttpTestingSupport) - testImplementation(libs.assertk) - testImplementation(libs.kotlin.test.annotations) - testImplementation(libs.kotlin.test.common) - testImplementation(libs.kotlinx.serialization.core) - testImplementation(libs.kotlinx.serialization.json) - testImplementation(projects.okhttpJavaNetCookiejar) - testImplementation(projects.okhttpTls) - testImplementation(projects.okhttpUrlconnection) - testImplementation(projects.mockwebserver3) - testImplementation(projects.mockwebserver3Junit4) - testImplementation(projects.mockwebserver3Junit5) - testImplementation(projects.mockwebserver) - testImplementation(projects.loggingInterceptor) - testImplementation(projects.okhttpBrotli) - testImplementation(projects.okhttpDnsoverhttps) - testImplementation(projects.okhttpIdnaMappingTable) - testImplementation(projects.okhttpSse) - testImplementation(projects.okhttpCoroutines) - testImplementation(libs.kotlinx.coroutines.core) - testImplementation(libs.squareup.moshi) - testImplementation(libs.squareup.moshi.kotlin) - testImplementation(libs.squareup.okio.fakefilesystem) - testImplementation(libs.conscrypt.openjdk) - testImplementation(libs.junit) - testImplementation(libs.junit.jupiter.api) - testImplementation(libs.junit.jupiter.params) - testImplementation(libs.kotlin.test.junit) - testImplementation(libs.openjsse) - testImplementation(libs.aqute.resolve) - testCompileOnly(libs.findbugs.jsr305) - - osgiTestDeploy(libs.eclipseOsgi) - osgiTestDeploy(libs.kotlin.stdlib.osgi) + // Everything else requires Android API 21+. + "signature"(rootProject.libs.signature.android.apilevel21) { artifact { type = "signature" } } + + // OkHttp requires Java 8+. + "signature"(rootProject.libs.codehaus.signature.java18) { artifact { type = "signature" } } + + checkstyleConfig(rootProject.libs.checkStyle) { + isTransitive = false + } +} + +// Animal Sniffer confirms we generally don't use APIs not on Java 8. +configure { + annotation = "okhttp3.internal.SuppressSignatureCheck" + sourceSets = listOf(project.sourceSets["main"]) +} + +configure { + config = resources.text.fromArchiveEntry(checkstyleConfig, "google_checks.xml") + toolVersion = rootProject.libs.versions.checkStyle.get() + // TODO switch out checkstyle to use something supporting KMP + sourceSets = listOf(project.sourceSets["main"]) } +apply(plugin = "io.github.usefulness.maven-sympathy") + mavenPublishing { - configure(KotlinJvm(javadocJar = JavadocJar.Empty())) + configure(KotlinMultiplatform(javadocJar = JavadocJar.Empty(), androidVariantsToPublish = listOf("release"))) } diff --git a/okhttp/src/main/resources/META-INF/proguard/okhttp3.pro b/okhttp/okhttp3.pro similarity index 85% rename from okhttp/src/main/resources/META-INF/proguard/okhttp3.pro rename to okhttp/okhttp3.pro index 280a52749be2..06eb9cc36d90 100644 --- a/okhttp/src/main/resources/META-INF/proguard/okhttp3.pro +++ b/okhttp/okhttp3.pro @@ -5,6 +5,7 @@ -dontwarn org.codehaus.mojo.animal_sniffer.* # OkHttp platform used only on JVM and when Conscrypt and other security providers are available. +# May be used with robolectric or deliberate use of Bouncy Castle on Android -dontwarn okhttp3.internal.platform.** -dontwarn org.conscrypt.** -dontwarn org.bouncycastle.** diff --git a/okhttp/src/androidMain/AndroidManifest.xml b/okhttp/src/androidMain/AndroidManifest.xml new file mode 100644 index 000000000000..6b7444be5b61 --- /dev/null +++ b/okhttp/src/androidMain/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/Android10Platform.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/Android10Platform.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/Android10Platform.kt rename to okhttp/src/androidMain/kotlin/okhttp3/internal/platform/Android10Platform.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/AndroidPlatform.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/AndroidPlatform.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/AndroidPlatform.kt rename to okhttp/src/androidMain/kotlin/okhttp3/internal/platform/AndroidPlatform.kt diff --git a/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/PlatformRegistry.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/PlatformRegistry.kt new file mode 100644 index 000000000000..38ec6920953a --- /dev/null +++ b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/PlatformRegistry.kt @@ -0,0 +1,13 @@ +package okhttp3.internal.platform + +import okhttp3.internal.platform.android.AndroidLog + +actual object PlatformRegistry { + actual fun findPlatform(): Platform { + AndroidLog.enable() + return Android10Platform.buildIfSupported() ?: AndroidPlatform.buildIfSupported()!! + } + + actual val isAndroid: Boolean + get() = true +} diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/android/Android10SocketAdapter.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/Android10SocketAdapter.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/android/Android10SocketAdapter.kt rename to okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/Android10SocketAdapter.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/android/AndroidCertificateChainCleaner.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/AndroidCertificateChainCleaner.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/android/AndroidCertificateChainCleaner.kt rename to okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/AndroidCertificateChainCleaner.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/android/AndroidLog.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/AndroidLog.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/android/AndroidLog.kt rename to okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/AndroidLog.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/android/AndroidSocketAdapter.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/AndroidSocketAdapter.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/android/AndroidSocketAdapter.kt rename to okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/AndroidSocketAdapter.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/android/BouncyCastleSocketAdapter.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/BouncyCastleSocketAdapter.kt similarity index 81% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/android/BouncyCastleSocketAdapter.kt rename to okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/BouncyCastleSocketAdapter.kt index a2a4ffdfb018..fb0bab1a40ac 100644 --- a/okhttp/src/main/kotlin/okhttp3/internal/platform/android/BouncyCastleSocketAdapter.kt +++ b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/BouncyCastleSocketAdapter.kt @@ -17,7 +17,6 @@ package okhttp3.internal.platform.android import javax.net.ssl.SSLSocket import okhttp3.Protocol -import okhttp3.internal.platform.BouncyCastlePlatform import okhttp3.internal.platform.Platform import org.bouncycastle.jsse.BCSSLSocket @@ -27,7 +26,7 @@ import org.bouncycastle.jsse.BCSSLSocket class BouncyCastleSocketAdapter : SocketAdapter { override fun matchesSocket(sslSocket: SSLSocket): Boolean = sslSocket is BCSSLSocket - override fun isSupported(): Boolean = BouncyCastlePlatform.isSupported + override fun isSupported(): Boolean = isSupported override fun getSelectedProtocol(sslSocket: SSLSocket): String? { val s = sslSocket as BCSSLSocket @@ -60,10 +59,20 @@ class BouncyCastleSocketAdapter : SocketAdapter { val factory = object : DeferredSocketAdapter.Factory { override fun matchesSocket(sslSocket: SSLSocket): Boolean { - return BouncyCastlePlatform.isSupported && sslSocket is BCSSLSocket + return isSupported && sslSocket is BCSSLSocket } override fun create(sslSocket: SSLSocket): SocketAdapter = BouncyCastleSocketAdapter() } + + val isSupported: Boolean = + try { + // Trigger an early exception over a fatal error, prefer a RuntimeException over Error. + Class.forName("org.bouncycastle.jsse.provider.BouncyCastleJsseProvider", false, javaClass.classLoader) + + true + } catch (_: ClassNotFoundException) { + false + } } } diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/android/ConscryptSocketAdapter.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/ConscryptSocketAdapter.kt similarity index 64% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/android/ConscryptSocketAdapter.kt rename to okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/ConscryptSocketAdapter.kt index 00781ee19b05..f14b9f8b9bc9 100644 --- a/okhttp/src/main/kotlin/okhttp3/internal/platform/android/ConscryptSocketAdapter.kt +++ b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/ConscryptSocketAdapter.kt @@ -17,7 +17,6 @@ package okhttp3.internal.platform.android import javax.net.ssl.SSLSocket import okhttp3.Protocol -import okhttp3.internal.platform.ConscryptPlatform import okhttp3.internal.platform.Platform import org.conscrypt.Conscrypt @@ -28,7 +27,7 @@ import org.conscrypt.Conscrypt class ConscryptSocketAdapter : SocketAdapter { override fun matchesSocket(sslSocket: SSLSocket): Boolean = Conscrypt.isConscrypt(sslSocket) - override fun isSupported(): Boolean = ConscryptPlatform.isSupported + override fun isSupported(): Boolean = isSupported override fun getSelectedProtocol(sslSocket: SSLSocket): String? = when { @@ -56,10 +55,44 @@ class ConscryptSocketAdapter : SocketAdapter { val factory = object : DeferredSocketAdapter.Factory { override fun matchesSocket(sslSocket: SSLSocket): Boolean { - return ConscryptPlatform.isSupported && Conscrypt.isConscrypt(sslSocket) + return isSupported && Conscrypt.isConscrypt(sslSocket) } override fun create(sslSocket: SSLSocket): SocketAdapter = ConscryptSocketAdapter() } + + val isSupported: Boolean = + try { + // Trigger an early exception over a fatal error, prefer a RuntimeException over Error. + Class.forName("org.conscrypt.Conscrypt\$Version", false, javaClass.classLoader) + + when { + // Bump this version if we ever have a binary incompatibility + Conscrypt.isAvailable() && atLeastVersion(2, 1, 0) -> true + else -> false + } + } catch (e: NoClassDefFoundError) { + false + } catch (e: ClassNotFoundException) { + false + } + + fun atLeastVersion( + major: Int, + minor: Int = 0, + patch: Int = 0, + ): Boolean { + val conscryptVersion = Conscrypt.version() ?: return false + + if (conscryptVersion.major() != major) { + return conscryptVersion.major() > major + } + + if (conscryptVersion.minor() != minor) { + return conscryptVersion.minor() > minor + } + + return conscryptVersion.patch() >= patch + } } } diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/android/DeferredSocketAdapter.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/DeferredSocketAdapter.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/android/DeferredSocketAdapter.kt rename to okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/DeferredSocketAdapter.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/android/SocketAdapter.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/SocketAdapter.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/android/SocketAdapter.kt rename to okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/SocketAdapter.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/android/StandardAndroidSocketAdapter.kt b/okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/StandardAndroidSocketAdapter.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/android/StandardAndroidSocketAdapter.kt rename to okhttp/src/androidMain/kotlin/okhttp3/internal/platform/android/StandardAndroidSocketAdapter.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Address.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Address.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Address.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Address.kt diff --git a/okhttp/src/main/kotlin/okhttp3/AsyncDns.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/AsyncDns.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/AsyncDns.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/AsyncDns.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Authenticator.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Authenticator.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Authenticator.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Authenticator.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Cache.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Cache.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Cache.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Cache.kt diff --git a/okhttp/src/main/kotlin/okhttp3/CacheControl.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/CacheControl.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/CacheControl.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/CacheControl.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Call.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Call.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Call.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Call.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Callback.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Callback.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Callback.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Callback.kt diff --git a/okhttp/src/main/kotlin/okhttp3/CertificatePinner.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/CertificatePinner.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/CertificatePinner.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/CertificatePinner.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Challenge.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Challenge.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Challenge.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Challenge.kt diff --git a/okhttp/src/main/kotlin/okhttp3/CipherSuite.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/CipherSuite.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/CipherSuite.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/CipherSuite.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Connection.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Connection.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Connection.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Connection.kt diff --git a/okhttp/src/main/kotlin/okhttp3/ConnectionListener.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/ConnectionListener.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/ConnectionListener.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/ConnectionListener.kt diff --git a/okhttp/src/main/kotlin/okhttp3/ConnectionPool.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/ConnectionPool.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/ConnectionPool.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/ConnectionPool.kt diff --git a/okhttp/src/main/kotlin/okhttp3/ConnectionSpec.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/ConnectionSpec.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/ConnectionSpec.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/ConnectionSpec.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Cookie.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Cookie.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Cookie.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Cookie.kt diff --git a/okhttp/src/main/kotlin/okhttp3/CookieJar.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/CookieJar.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/CookieJar.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/CookieJar.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Credentials.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Credentials.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Credentials.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Credentials.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Dispatcher.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Dispatcher.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Dispatcher.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Dispatcher.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Dns.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Dns.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Dns.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Dns.kt diff --git a/okhttp/src/main/kotlin/okhttp3/EventListener.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/EventListener.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/EventListener.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/EventListener.kt diff --git a/okhttp/src/main/kotlin/okhttp3/ExperimentalOkHttpApi.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/ExperimentalOkHttpApi.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/ExperimentalOkHttpApi.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/ExperimentalOkHttpApi.kt diff --git a/okhttp/src/main/kotlin/okhttp3/FormBody.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/FormBody.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/FormBody.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/FormBody.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Handshake.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Handshake.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Handshake.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Handshake.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Headers.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Headers.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Headers.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Headers.kt diff --git a/okhttp/src/main/kotlin/okhttp3/HttpUrl.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/HttpUrl.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/HttpUrl.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/HttpUrl.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Interceptor.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Interceptor.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Interceptor.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Interceptor.kt diff --git a/okhttp/src/main/kotlin/okhttp3/MediaType.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/MediaType.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/MediaType.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/MediaType.kt diff --git a/okhttp/src/main/kotlin/okhttp3/MultipartBody.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/MultipartBody.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/MultipartBody.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/MultipartBody.kt diff --git a/okhttp/src/main/kotlin/okhttp3/MultipartReader.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/MultipartReader.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/MultipartReader.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/MultipartReader.kt diff --git a/okhttp/src/main/kotlin/okhttp3/OkHttp.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/OkHttp.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/OkHttp.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/OkHttp.kt diff --git a/okhttp/src/main/kotlin/okhttp3/OkHttpClient.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/OkHttpClient.kt similarity index 99% rename from okhttp/src/main/kotlin/okhttp3/OkHttpClient.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/OkHttpClient.kt index 7f499c765c73..4f480d4a334d 100644 --- a/okhttp/src/main/kotlin/okhttp3/OkHttpClient.kt +++ b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/OkHttpClient.kt @@ -15,7 +15,6 @@ */ package okhttp3 -import android.annotation.SuppressLint import java.net.Proxy import java.net.ProxySelector import java.net.Socket @@ -1113,7 +1112,6 @@ open class OkHttpClient internal constructor( * * The default value is 0 which imposes no timeout. */ - @SuppressLint("NewApi") @IgnoreJRERequirement fun callTimeout(duration: Duration) = apply { @@ -1156,7 +1154,6 @@ open class OkHttpClient internal constructor( * The connect timeout is applied when connecting a TCP socket to the target host. The default * value is 10 seconds. */ - @SuppressLint("NewApi") @IgnoreJRERequirement fun connectTimeout(duration: Duration) = apply { @@ -1202,7 +1199,6 @@ open class OkHttpClient internal constructor( * @see Socket.setSoTimeout * @see Source.timeout */ - @SuppressLint("NewApi") @IgnoreJRERequirement fun readTimeout(duration: Duration) = apply { @@ -1249,7 +1245,6 @@ open class OkHttpClient internal constructor( * * @see Sink.timeout */ - @SuppressLint("NewApi") @IgnoreJRERequirement fun writeTimeout(duration: Duration) = apply { @@ -1303,7 +1298,6 @@ open class OkHttpClient internal constructor( * * The default value of 0 disables client-initiated pings. */ - @SuppressLint("NewApi") @IgnoreJRERequirement fun pingInterval(duration: Duration) = apply { @@ -1351,7 +1345,6 @@ open class OkHttpClient internal constructor( * wait for a graceful shutdown. If the server doesn't respond the web socket will be canceled. * The default value is 60 seconds. */ - @SuppressLint("NewApi") @IgnoreJRERequirement fun webSocketCloseTimeout(duration: Duration) = apply { diff --git a/okhttp/src/main/kotlin/okhttp3/Protocol.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Protocol.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Protocol.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Protocol.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Request.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Request.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Request.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Request.kt diff --git a/okhttp/src/main/kotlin/okhttp3/RequestBody.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/RequestBody.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/RequestBody.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/RequestBody.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Response.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Response.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Response.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Response.kt diff --git a/okhttp/src/main/kotlin/okhttp3/ResponseBody.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/ResponseBody.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/ResponseBody.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/ResponseBody.kt diff --git a/okhttp/src/main/kotlin/okhttp3/Route.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Route.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/Route.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/Route.kt diff --git a/okhttp/src/main/kotlin/okhttp3/TlsVersion.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/TlsVersion.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/TlsVersion.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/TlsVersion.kt diff --git a/okhttp/src/main/kotlin/okhttp3/WebSocket.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/WebSocket.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/WebSocket.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/WebSocket.kt diff --git a/okhttp/src/main/kotlin/okhttp3/WebSocketListener.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/WebSocketListener.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/WebSocketListener.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/WebSocketListener.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-CacheControlCommon.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-CacheControlCommon.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-CacheControlCommon.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-CacheControlCommon.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-ChallengeCommon.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-ChallengeCommon.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-ChallengeCommon.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-ChallengeCommon.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-HeadersCommon.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-HeadersCommon.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-HeadersCommon.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-HeadersCommon.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-HostnamesCommon.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-HostnamesCommon.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-HostnamesCommon.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-HostnamesCommon.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-MediaTypeCommon.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-MediaTypeCommon.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-MediaTypeCommon.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-MediaTypeCommon.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-NormalizeJvm.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-NormalizeJvm.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-NormalizeJvm.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-NormalizeJvm.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-RequestBodyCommon.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-RequestBodyCommon.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-RequestBodyCommon.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-RequestBodyCommon.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-RequestCommon.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-RequestCommon.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-RequestCommon.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-RequestCommon.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-ResponseBodyCommon.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-ResponseBodyCommon.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-ResponseBodyCommon.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-ResponseBodyCommon.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-ResponseCommon.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-ResponseCommon.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-ResponseCommon.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-ResponseCommon.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-UtilCommon.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-UtilCommon.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-UtilCommon.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-UtilCommon.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/-UtilJvm.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-UtilJvm.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/-UtilJvm.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/-UtilJvm.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/NativeImageTestsAccessors.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/NativeImageTestsAccessors.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/NativeImageTestsAccessors.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/NativeImageTestsAccessors.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/SuppressSignatureCheck.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/SuppressSignatureCheck.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/SuppressSignatureCheck.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/SuppressSignatureCheck.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/authenticator/JavaNetAuthenticator.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/authenticator/JavaNetAuthenticator.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/authenticator/JavaNetAuthenticator.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/authenticator/JavaNetAuthenticator.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/cache/CacheInterceptor.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache/CacheInterceptor.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/cache/CacheInterceptor.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache/CacheInterceptor.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/cache/CacheRequest.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache/CacheRequest.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/cache/CacheRequest.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache/CacheRequest.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/cache/CacheStrategy.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache/CacheStrategy.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/cache/CacheStrategy.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache/CacheStrategy.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/cache/DiskLruCache.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache/DiskLruCache.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/cache/DiskLruCache.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache/DiskLruCache.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/cache/FaultHidingSink.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache/FaultHidingSink.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/cache/FaultHidingSink.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache/FaultHidingSink.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/cache2/FileOperator.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache2/FileOperator.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/cache2/FileOperator.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache2/FileOperator.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/cache2/Relay.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache2/Relay.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/cache2/Relay.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/cache2/Relay.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/concurrent/Task.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/concurrent/Task.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/concurrent/Task.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/concurrent/Task.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/concurrent/TaskLogger.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/concurrent/TaskLogger.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/concurrent/TaskLogger.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/concurrent/TaskLogger.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/concurrent/TaskQueue.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/concurrent/TaskQueue.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/concurrent/TaskQueue.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/concurrent/TaskQueue.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/concurrent/TaskRunner.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/concurrent/TaskRunner.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/concurrent/TaskRunner.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/concurrent/TaskRunner.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/CallConnectionUser.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/CallConnectionUser.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/CallConnectionUser.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/CallConnectionUser.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/ConnectInterceptor.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ConnectInterceptor.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/ConnectInterceptor.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ConnectInterceptor.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/ConnectPlan.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ConnectPlan.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/ConnectPlan.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ConnectPlan.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/ConnectionUser.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ConnectionUser.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/ConnectionUser.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ConnectionUser.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/Exchange.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/Exchange.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/Exchange.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/Exchange.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/ExchangeFinder.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ExchangeFinder.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/ExchangeFinder.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ExchangeFinder.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/FailedPlan.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/FailedPlan.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/FailedPlan.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/FailedPlan.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/FastFallbackExchangeFinder.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/FastFallbackExchangeFinder.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/FastFallbackExchangeFinder.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/FastFallbackExchangeFinder.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/ForceConnectRoutePlanner.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ForceConnectRoutePlanner.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/ForceConnectRoutePlanner.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ForceConnectRoutePlanner.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/InetAddressOrder.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/InetAddressOrder.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/InetAddressOrder.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/InetAddressOrder.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/Locks.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/Locks.kt similarity index 97% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/Locks.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/Locks.kt index 0a765eb8a820..9fc039419099 100644 --- a/okhttp/src/main/kotlin/okhttp3/internal/connection/Locks.kt +++ b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/Locks.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@file:OptIn(ExperimentalContracts::class) +@file:OptIn(ExperimentalContracts::class, ExperimentalContracts::class) package okhttp3.internal.connection diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/PoolConnectionUser.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/PoolConnectionUser.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/PoolConnectionUser.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/PoolConnectionUser.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/RealCall.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RealCall.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/RealCall.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RealCall.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/RealConnection.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RealConnection.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/RealConnection.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RealConnection.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/RealConnectionPool.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RealConnectionPool.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/RealConnectionPool.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RealConnectionPool.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/RealRoutePlanner.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RealRoutePlanner.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/RealRoutePlanner.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RealRoutePlanner.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/RetryTlsHandshake.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RetryTlsHandshake.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/RetryTlsHandshake.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RetryTlsHandshake.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/ReusePlan.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ReusePlan.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/ReusePlan.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/ReusePlan.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/RouteDatabase.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RouteDatabase.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/RouteDatabase.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RouteDatabase.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/RoutePlanner.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RoutePlanner.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/RoutePlanner.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RoutePlanner.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/RouteSelector.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RouteSelector.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/RouteSelector.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/RouteSelector.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/connection/SequentialExchangeFinder.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/SequentialExchangeFinder.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/connection/SequentialExchangeFinder.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/connection/SequentialExchangeFinder.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/BridgeInterceptor.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/BridgeInterceptor.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/BridgeInterceptor.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/BridgeInterceptor.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/CallServerInterceptor.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/CallServerInterceptor.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/CallServerInterceptor.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/CallServerInterceptor.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/DateFormatting.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/DateFormatting.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/DateFormatting.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/DateFormatting.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/ExchangeCodec.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/ExchangeCodec.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/ExchangeCodec.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/ExchangeCodec.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/HttpHeaders.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/HttpHeaders.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/HttpHeaders.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/HttpHeaders.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/HttpMethod.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/HttpMethod.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/HttpMethod.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/HttpMethod.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/HttpStatusCodes.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/HttpStatusCodes.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/HttpStatusCodes.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/HttpStatusCodes.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/RealInterceptorChain.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/RealInterceptorChain.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/RealInterceptorChain.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/RealInterceptorChain.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/RealResponseBody.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/RealResponseBody.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/RealResponseBody.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/RealResponseBody.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/RequestLine.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/RequestLine.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/RequestLine.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/RequestLine.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/RetryAndFollowUpInterceptor.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/RetryAndFollowUpInterceptor.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/RetryAndFollowUpInterceptor.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/RetryAndFollowUpInterceptor.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http/StatusLine.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/StatusLine.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http/StatusLine.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http/StatusLine.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http1/HeadersReader.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http1/HeadersReader.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http1/HeadersReader.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http1/HeadersReader.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http1/Http1ExchangeCodec.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http1/Http1ExchangeCodec.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http1/Http1ExchangeCodec.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http1/Http1ExchangeCodec.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/ConnectionShutdownException.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/ConnectionShutdownException.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/ConnectionShutdownException.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/ConnectionShutdownException.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/ErrorCode.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/ErrorCode.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/ErrorCode.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/ErrorCode.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/FlowControlListener.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/FlowControlListener.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/FlowControlListener.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/FlowControlListener.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/Header.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Header.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/Header.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Header.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/Hpack.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Hpack.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/Hpack.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Hpack.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/Http2.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/Http2.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/Http2Connection.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2Connection.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/Http2Connection.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2Connection.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/Http2ExchangeCodec.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2ExchangeCodec.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/Http2ExchangeCodec.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2ExchangeCodec.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/Http2Reader.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2Reader.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/Http2Reader.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2Reader.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/Http2Stream.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2Stream.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/Http2Stream.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2Stream.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/Http2Writer.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2Writer.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/Http2Writer.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2Writer.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/Huffman.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Huffman.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/Huffman.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Huffman.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/PushObserver.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/PushObserver.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/PushObserver.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/PushObserver.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/Settings.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Settings.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/Settings.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Settings.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/StreamResetException.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/StreamResetException.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/StreamResetException.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/StreamResetException.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/http2/flowcontrol/WindowCounter.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/flowcontrol/WindowCounter.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/http2/flowcontrol/WindowCounter.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/flowcontrol/WindowCounter.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/idn/IdnaMappingTable.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/idn/IdnaMappingTable.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/idn/IdnaMappingTable.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/idn/IdnaMappingTable.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/idn/Punycode.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/idn/Punycode.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/idn/Punycode.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/idn/Punycode.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/internal.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/internal.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/internal.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/internal.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/Platform.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/platform/Platform.kt similarity index 78% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/Platform.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/platform/Platform.kt index 4483de380150..efcfac723c4e 100644 --- a/okhttp/src/main/kotlin/okhttp3/internal/platform/Platform.kt +++ b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/platform/Platform.kt @@ -16,13 +16,11 @@ */ package okhttp3.internal.platform -import android.annotation.SuppressLint import java.io.IOException import java.net.InetSocketAddress import java.net.Socket import java.security.GeneralSecurityException import java.security.KeyStore -import java.security.Security import java.util.logging.Level import java.util.logging.Logger import javax.net.ssl.ExtendedSSLSession @@ -35,7 +33,6 @@ import javax.net.ssl.TrustManagerFactory import javax.net.ssl.X509TrustManager import okhttp3.OkHttpClient import okhttp3.Protocol -import okhttp3.internal.platform.android.AndroidLog import okhttp3.internal.readFieldOrNull import okhttp3.internal.tls.BasicCertificateChainCleaner import okhttp3.internal.tls.BasicTrustRootIndex @@ -129,7 +126,6 @@ open class Platform { open fun getSelectedProtocol(sslSocket: SSLSocket): String? = null /** For MockWebServer. This returns the inbound SNI names. */ - @SuppressLint("NewApi") @IgnoreJRERequirement // This function is overridden to require API >= 24. open fun getHandshakeServerNames(sslSocket: SSLSocket): List { val session = sslSocket.session as? ExtendedSSLSession ?: return listOf() @@ -214,83 +210,11 @@ open class Platform { fun alpnProtocolNames(protocols: List) = protocols.filter { it != Protocol.HTTP_1_0 }.map { it.toString() } - // This explicit check avoids activating in Android Studio with Android specific classes - // available when running plugins inside the IDE. val isAndroid: Boolean - get() = "Dalvik" == System.getProperty("java.vm.name") - - private val isConscryptPreferred: Boolean - get() { - val preferredProvider = Security.getProviders()[0].name - return "Conscrypt" == preferredProvider - } - - private val isOpenJSSEPreferred: Boolean - get() { - val preferredProvider = Security.getProviders()[0].name - return "OpenJSSE" == preferredProvider - } - - private val isBouncyCastlePreferred: Boolean - get() { - val preferredProvider = Security.getProviders()[0].name - return "BC" == preferredProvider - } + get() = PlatformRegistry.isAndroid /** Attempt to match the host runtime to a capable Platform implementation. */ - private fun findPlatform(): Platform = - if (isAndroid) { - findAndroidPlatform() - } else { - findJvmPlatform() - } - - private fun findAndroidPlatform(): Platform { - AndroidLog.enable() - return Android10Platform.buildIfSupported() ?: AndroidPlatform.buildIfSupported()!! - } - - private fun findJvmPlatform(): Platform { - if (isConscryptPreferred) { - val conscrypt = ConscryptPlatform.buildIfSupported() - - if (conscrypt != null) { - return conscrypt - } - } - - if (isBouncyCastlePreferred) { - val bc = BouncyCastlePlatform.buildIfSupported() - - if (bc != null) { - return bc - } - } - - if (isOpenJSSEPreferred) { - val openJSSE = OpenJSSEPlatform.buildIfSupported() - - if (openJSSE != null) { - return openJSSE - } - } - - // An Oracle JDK 9 like OpenJDK, or JDK 8 251+. - val jdk9 = Jdk9Platform.buildIfSupported() - - if (jdk9 != null) { - return jdk9 - } - - // An Oracle JDK 8 like OpenJDK, pre 251. - val jdkWithJettyBoot = Jdk8WithJettyBootPlatform.buildIfSupported() - - if (jdkWithJettyBoot != null) { - return jdkWithJettyBoot - } - - return Platform() - } + private fun findPlatform(): Platform = PlatformRegistry.findPlatform() /** * Returns the concatenation of 8-bit, length prefixed protocol names. diff --git a/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/platform/PlatformRegistry.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/platform/PlatformRegistry.kt new file mode 100644 index 000000000000..ce90f02f93dd --- /dev/null +++ b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/platform/PlatformRegistry.kt @@ -0,0 +1,7 @@ +package okhttp3.internal.platform + +expect object PlatformRegistry { + fun findPlatform(): Platform + + val isAndroid: Boolean +} diff --git a/okhttp/src/main/kotlin/okhttp3/internal/proxy/NullProxySelector.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/proxy/NullProxySelector.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/proxy/NullProxySelector.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/proxy/NullProxySelector.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/publicsuffix/PublicSuffixDatabase.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/publicsuffix/PublicSuffixDatabase.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/publicsuffix/PublicSuffixDatabase.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/publicsuffix/PublicSuffixDatabase.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/publicsuffix/PublicSuffixList.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/publicsuffix/PublicSuffixList.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/publicsuffix/PublicSuffixList.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/publicsuffix/PublicSuffixList.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/tls/BasicCertificateChainCleaner.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/tls/BasicCertificateChainCleaner.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/tls/BasicCertificateChainCleaner.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/tls/BasicCertificateChainCleaner.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/tls/BasicTrustRootIndex.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/tls/BasicTrustRootIndex.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/tls/BasicTrustRootIndex.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/tls/BasicTrustRootIndex.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/tls/CertificateChainCleaner.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/tls/CertificateChainCleaner.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/tls/CertificateChainCleaner.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/tls/CertificateChainCleaner.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/tls/OkHostnameVerifier.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/tls/OkHostnameVerifier.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/tls/OkHostnameVerifier.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/tls/OkHostnameVerifier.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/tls/TrustRootIndex.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/tls/TrustRootIndex.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/tls/TrustRootIndex.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/tls/TrustRootIndex.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/url/-Url.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/url/-Url.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/url/-Url.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/url/-Url.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/ws/MessageDeflater.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/MessageDeflater.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/ws/MessageDeflater.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/MessageDeflater.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/ws/MessageInflater.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/MessageInflater.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/ws/MessageInflater.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/MessageInflater.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/ws/RealWebSocket.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/RealWebSocket.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/ws/RealWebSocket.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/RealWebSocket.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/ws/WebSocketExtensions.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/WebSocketExtensions.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/ws/WebSocketExtensions.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/WebSocketExtensions.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/ws/WebSocketProtocol.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/WebSocketProtocol.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/ws/WebSocketProtocol.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/WebSocketProtocol.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/ws/WebSocketReader.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/WebSocketReader.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/ws/WebSocketReader.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/WebSocketReader.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/ws/WebSocketWriter.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/WebSocketWriter.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/ws/WebSocketWriter.kt rename to okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/ws/WebSocketWriter.kt diff --git a/okhttp/src/main/kotlinTemplates/okhttp3/internal/-InternalVersion.kt b/okhttp/src/commonJvmAndroid/kotlinTemplates/okhttp3/internal/-InternalVersion.kt similarity index 100% rename from okhttp/src/main/kotlinTemplates/okhttp3/internal/-InternalVersion.kt rename to okhttp/src/commonJvmAndroid/kotlinTemplates/okhttp3/internal/-InternalVersion.kt diff --git a/okhttp/src/main/kotlinTemplates/okhttp3/internal/publicsuffix/EmbeddedPublicSuffixList.kt b/okhttp/src/commonJvmAndroid/kotlinTemplates/okhttp3/internal/publicsuffix/EmbeddedPublicSuffixList.kt similarity index 100% rename from okhttp/src/main/kotlinTemplates/okhttp3/internal/publicsuffix/EmbeddedPublicSuffixList.kt rename to okhttp/src/commonJvmAndroid/kotlinTemplates/okhttp3/internal/publicsuffix/EmbeddedPublicSuffixList.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/graal/GraalSvm.kt b/okhttp/src/jvmMain/kotlin/okhttp3/internal/graal/GraalSvm.kt similarity index 86% rename from okhttp/src/main/kotlin/okhttp3/internal/graal/GraalSvm.kt rename to okhttp/src/jvmMain/kotlin/okhttp3/internal/graal/GraalSvm.kt index caad047228d7..0e3b58e02c06 100644 --- a/okhttp/src/main/kotlin/okhttp3/internal/graal/GraalSvm.kt +++ b/okhttp/src/jvmMain/kotlin/okhttp3/internal/graal/GraalSvm.kt @@ -18,8 +18,6 @@ package okhttp3.internal.graal import com.oracle.svm.core.annotate.Delete import com.oracle.svm.core.annotate.Substitute import com.oracle.svm.core.annotate.TargetClass -import okhttp3.internal.platform.Android10Platform -import okhttp3.internal.platform.AndroidPlatform import okhttp3.internal.platform.BouncyCastlePlatform import okhttp3.internal.platform.ConscryptPlatform import okhttp3.internal.platform.Jdk8WithJettyBootPlatform @@ -27,14 +25,6 @@ import okhttp3.internal.platform.Jdk9Platform import okhttp3.internal.platform.OpenJSSEPlatform import okhttp3.internal.platform.Platform -@TargetClass(AndroidPlatform::class) -@Delete -class TargetAndroidPlatform - -@TargetClass(Android10Platform::class) -@Delete -class TargetAndroid10Platform - @TargetClass(BouncyCastlePlatform::class) @Delete class TargetBouncyCastlePlatform diff --git a/okhttp/src/main/kotlin/okhttp3/internal/graal/OkHttpFeature.kt b/okhttp/src/jvmMain/kotlin/okhttp3/internal/graal/OkHttpFeature.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/graal/OkHttpFeature.kt rename to okhttp/src/jvmMain/kotlin/okhttp3/internal/graal/OkHttpFeature.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/BouncyCastlePlatform.kt b/okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/BouncyCastlePlatform.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/BouncyCastlePlatform.kt rename to okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/BouncyCastlePlatform.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/ConscryptPlatform.kt b/okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/ConscryptPlatform.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/ConscryptPlatform.kt rename to okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/ConscryptPlatform.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/Jdk8WithJettyBootPlatform.kt b/okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/Jdk8WithJettyBootPlatform.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/Jdk8WithJettyBootPlatform.kt rename to okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/Jdk8WithJettyBootPlatform.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/Jdk9Platform.kt b/okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/Jdk9Platform.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/Jdk9Platform.kt rename to okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/Jdk9Platform.kt diff --git a/okhttp/src/main/kotlin/okhttp3/internal/platform/OpenJSSEPlatform.kt b/okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/OpenJSSEPlatform.kt similarity index 100% rename from okhttp/src/main/kotlin/okhttp3/internal/platform/OpenJSSEPlatform.kt rename to okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/OpenJSSEPlatform.kt diff --git a/okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/PlatformRegistry.kt b/okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/PlatformRegistry.kt new file mode 100644 index 000000000000..721170b8a047 --- /dev/null +++ b/okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/PlatformRegistry.kt @@ -0,0 +1,68 @@ +package okhttp3.internal.platform + +import java.security.Security + +actual object PlatformRegistry { + private val isConscryptPreferred: Boolean + get() { + val preferredProvider = Security.getProviders()[0].name + return "Conscrypt" == preferredProvider + } + + private val isOpenJSSEPreferred: Boolean + get() { + val preferredProvider = Security.getProviders()[0].name + return "OpenJSSE" == preferredProvider + } + + private val isBouncyCastlePreferred: Boolean + get() { + val preferredProvider = Security.getProviders()[0].name + return "BC" == preferredProvider + } + + actual fun findPlatform(): Platform { + if (isConscryptPreferred) { + val conscrypt = ConscryptPlatform.buildIfSupported() + + if (conscrypt != null) { + return conscrypt + } + } + + if (isBouncyCastlePreferred) { + val bc = BouncyCastlePlatform.buildIfSupported() + + if (bc != null) { + return bc + } + } + + if (isOpenJSSEPreferred) { + val openJSSE = OpenJSSEPlatform.buildIfSupported() + + if (openJSSE != null) { + return openJSSE + } + } + + // An Oracle JDK 9 like OpenJDK, or JDK 8 251+. + val jdk9 = Jdk9Platform.buildIfSupported() + + if (jdk9 != null) { + return jdk9 + } + + // An Oracle JDK 8 like OpenJDK, pre 251. + val jdkWithJettyBoot = Jdk8WithJettyBootPlatform.buildIfSupported() + + if (jdkWithJettyBoot != null) { + return jdkWithJettyBoot + } + + return Platform() + } + + actual val isAndroid: Boolean + get() = false +} diff --git a/okhttp/src/jvmMain/resources/META-INF/native-image/okhttp/okhttp/native-image.properties b/okhttp/src/jvmMain/resources/META-INF/native-image/okhttp/okhttp/native-image.properties new file mode 100644 index 000000000000..75cbefcdc5c1 --- /dev/null +++ b/okhttp/src/jvmMain/resources/META-INF/native-image/okhttp/okhttp/native-image.properties @@ -0,0 +1 @@ +Args = -H:+AddAllCharsets --enable-http --enable-https --features=okhttp3.internal.graal.OkHttpFeature --report-unsupported-elements-at-runtime diff --git a/okhttp/src/main/resources/META-INF/native-image/okhttp/okhttp/reflect-config.json b/okhttp/src/jvmMain/resources/META-INF/native-image/okhttp/okhttp/reflect-config.json similarity index 100% rename from okhttp/src/main/resources/META-INF/native-image/okhttp/okhttp/reflect-config.json rename to okhttp/src/jvmMain/resources/META-INF/native-image/okhttp/okhttp/reflect-config.json diff --git a/okhttp/src/main/resources/META-INF/native-image/okhttp/okhttp/resource-config.json b/okhttp/src/jvmMain/resources/META-INF/native-image/okhttp/okhttp/resource-config.json similarity index 100% rename from okhttp/src/main/resources/META-INF/native-image/okhttp/okhttp/resource-config.json rename to okhttp/src/jvmMain/resources/META-INF/native-image/okhttp/okhttp/resource-config.json diff --git a/okhttp/src/test/java/okhttp3/AddressTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/AddressTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/AddressTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/AddressTest.kt diff --git a/okhttp/src/test/java/okhttp3/AutobahnTester.kt b/okhttp/src/jvmTest/kotlin/okhttp3/AutobahnTester.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/AutobahnTester.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/AutobahnTester.kt diff --git a/okhttp/src/test/java/okhttp3/BouncyCastleTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/BouncyCastleTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/BouncyCastleTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/BouncyCastleTest.kt diff --git a/okhttp/src/test/java/okhttp3/CacheControlJvmTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CacheControlJvmTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CacheControlJvmTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CacheControlJvmTest.kt diff --git a/okhttp/src/test/java/okhttp3/CacheControlTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CacheControlTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CacheControlTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CacheControlTest.kt diff --git a/okhttp/src/test/java/okhttp3/CacheCorruptionTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CacheCorruptionTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CacheCorruptionTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CacheCorruptionTest.kt diff --git a/okhttp/src/test/java/okhttp3/CacheTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CacheTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CacheTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CacheTest.kt diff --git a/okhttp/src/test/java/okhttp3/CallHandshakeTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CallHandshakeTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CallHandshakeTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CallHandshakeTest.kt diff --git a/okhttp/src/test/java/okhttp3/CallKotlinTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CallKotlinTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CallKotlinTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CallKotlinTest.kt diff --git a/okhttp/src/test/java/okhttp3/CallTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CallTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CallTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CallTest.kt diff --git a/okhttp/src/test/java/okhttp3/CertificateChainCleanerTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CertificateChainCleanerTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CertificateChainCleanerTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CertificateChainCleanerTest.kt diff --git a/okhttp/src/test/java/okhttp3/CertificatePinnerKotlinTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CertificatePinnerKotlinTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CertificatePinnerKotlinTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CertificatePinnerKotlinTest.kt diff --git a/okhttp/src/test/java/okhttp3/CertificatePinnerTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CertificatePinnerTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CertificatePinnerTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CertificatePinnerTest.kt diff --git a/okhttp/src/test/java/okhttp3/ChannelSocketFactory.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ChannelSocketFactory.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ChannelSocketFactory.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ChannelSocketFactory.kt diff --git a/okhttp/src/test/java/okhttp3/CipherSuiteTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CipherSuiteTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CipherSuiteTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CipherSuiteTest.kt diff --git a/okhttp/src/test/java/okhttp3/CommonRequestBodyTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CommonRequestBodyTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CommonRequestBodyTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CommonRequestBodyTest.kt diff --git a/okhttp/src/test/java/okhttp3/ConnectionCoalescingTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ConnectionCoalescingTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ConnectionCoalescingTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ConnectionCoalescingTest.kt diff --git a/okhttp/src/test/java/okhttp3/ConnectionListenerTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ConnectionListenerTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ConnectionListenerTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ConnectionListenerTest.kt diff --git a/okhttp/src/test/java/okhttp3/ConnectionReuseTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ConnectionReuseTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ConnectionReuseTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ConnectionReuseTest.kt diff --git a/okhttp/src/test/java/okhttp3/ConnectionSpecTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ConnectionSpecTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ConnectionSpecTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ConnectionSpecTest.kt diff --git a/okhttp/src/test/java/okhttp3/ConscryptTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ConscryptTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ConscryptTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ConscryptTest.kt diff --git a/okhttp/src/test/java/okhttp3/CookieTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CookieTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CookieTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CookieTest.kt diff --git a/okhttp/src/test/java/okhttp3/CookiesTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CookiesTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CookiesTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CookiesTest.kt diff --git a/okhttp/src/test/java/okhttp3/CorrettoTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/CorrettoTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/CorrettoTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/CorrettoTest.kt diff --git a/okhttp/src/test/java/okhttp3/DispatcherCleanupTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/DispatcherCleanupTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/DispatcherCleanupTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/DispatcherCleanupTest.kt diff --git a/okhttp/src/test/java/okhttp3/DispatcherTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/DispatcherTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/DispatcherTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/DispatcherTest.kt diff --git a/okhttp/src/test/java/okhttp3/DuplexTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/DuplexTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/DuplexTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/DuplexTest.kt diff --git a/okhttp/src/test/java/okhttp3/EventListenerTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/EventListenerTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/EventListenerTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/EventListenerTest.kt diff --git a/okhttp/src/test/java/okhttp3/FakeRoutePlanner.kt b/okhttp/src/jvmTest/kotlin/okhttp3/FakeRoutePlanner.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/FakeRoutePlanner.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/FakeRoutePlanner.kt diff --git a/okhttp/src/test/java/okhttp3/FallbackTestClientSocketFactory.kt b/okhttp/src/jvmTest/kotlin/okhttp3/FallbackTestClientSocketFactory.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/FallbackTestClientSocketFactory.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/FallbackTestClientSocketFactory.kt diff --git a/okhttp/src/test/java/okhttp3/FastFallbackTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/FastFallbackTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/FastFallbackTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/FastFallbackTest.kt diff --git a/okhttp/src/test/java/okhttp3/FormBodyTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/FormBodyTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/FormBodyTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/FormBodyTest.kt diff --git a/okhttp/src/test/java/okhttp3/HandshakeTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/HandshakeTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/HandshakeTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/HandshakeTest.kt diff --git a/okhttp/src/test/java/okhttp3/HeadersChallengesTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/HeadersChallengesTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/HeadersChallengesTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/HeadersChallengesTest.kt diff --git a/okhttp/src/test/java/okhttp3/HeadersJvmTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/HeadersJvmTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/HeadersJvmTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/HeadersJvmTest.kt diff --git a/okhttp/src/test/java/okhttp3/HeadersKotlinTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/HeadersKotlinTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/HeadersKotlinTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/HeadersKotlinTest.kt diff --git a/okhttp/src/test/java/okhttp3/HeadersRequestTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/HeadersRequestTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/HeadersRequestTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/HeadersRequestTest.kt diff --git a/okhttp/src/test/java/okhttp3/HeadersTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/HeadersTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/HeadersTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/HeadersTest.kt diff --git a/okhttp/src/test/java/okhttp3/HttpUrlJvmTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/HttpUrlJvmTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/HttpUrlJvmTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/HttpUrlJvmTest.kt diff --git a/okhttp/src/test/java/okhttp3/HttpUrlTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/HttpUrlTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/HttpUrlTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/HttpUrlTest.kt diff --git a/okhttp/src/test/java/okhttp3/InsecureForHostTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/InsecureForHostTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/InsecureForHostTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/InsecureForHostTest.kt diff --git a/okhttp/src/test/java/okhttp3/InterceptorTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/InterceptorTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/InterceptorTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/InterceptorTest.kt diff --git a/okhttp/src/test/java/okhttp3/JSSETest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/JSSETest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/JSSETest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/JSSETest.kt diff --git a/okhttp/src/test/java/okhttp3/KotlinDeprecationErrorTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/KotlinDeprecationErrorTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/KotlinDeprecationErrorTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/KotlinDeprecationErrorTest.kt diff --git a/okhttp/src/test/java/okhttp3/KotlinSourceModernTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/KotlinSourceModernTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/KotlinSourceModernTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/KotlinSourceModernTest.kt diff --git a/okhttp/src/test/java/okhttp3/LoomTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/LoomTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/LoomTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/LoomTest.kt diff --git a/okhttp/src/test/java/okhttp3/MediaTypeGetTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/MediaTypeGetTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/MediaTypeGetTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/MediaTypeGetTest.kt diff --git a/okhttp/src/test/java/okhttp3/MediaTypeJvmTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/MediaTypeJvmTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/MediaTypeJvmTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/MediaTypeJvmTest.kt diff --git a/okhttp/src/test/java/okhttp3/MediaTypeTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/MediaTypeTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/MediaTypeTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/MediaTypeTest.kt diff --git a/okhttp/src/test/java/okhttp3/MultipartBodyTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/MultipartBodyTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/MultipartBodyTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/MultipartBodyTest.kt diff --git a/okhttp/src/test/java/okhttp3/MultipartReaderTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/MultipartReaderTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/MultipartReaderTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/MultipartReaderTest.kt diff --git a/okhttp/src/test/java/okhttp3/OkHttpClientTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/OkHttpClientTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/OkHttpClientTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/OkHttpClientTest.kt diff --git a/okhttp/src/test/java/okhttp3/OkHttpTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/OkHttpTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/OkHttpTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/OkHttpTest.kt diff --git a/okhttp/src/test/java/okhttp3/OpenJSSETest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/OpenJSSETest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/OpenJSSETest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/OpenJSSETest.kt diff --git a/okhttp/src/test/java/okhttp3/ProtocolTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ProtocolTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ProtocolTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ProtocolTest.kt diff --git a/okhttp/src/test/java/okhttp3/PublicInternalApiTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/PublicInternalApiTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/PublicInternalApiTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/PublicInternalApiTest.kt diff --git a/okhttp/src/test/java/okhttp3/RecordedResponse.kt b/okhttp/src/jvmTest/kotlin/okhttp3/RecordedResponse.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/RecordedResponse.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/RecordedResponse.kt diff --git a/okhttp/src/test/java/okhttp3/RecordingCallback.kt b/okhttp/src/jvmTest/kotlin/okhttp3/RecordingCallback.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/RecordingCallback.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/RecordingCallback.kt diff --git a/okhttp/src/test/java/okhttp3/RecordingExecutor.kt b/okhttp/src/jvmTest/kotlin/okhttp3/RecordingExecutor.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/RecordingExecutor.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/RecordingExecutor.kt diff --git a/okhttp/src/test/java/okhttp3/RequestBodyTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/RequestBodyTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/RequestBodyTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/RequestBodyTest.kt diff --git a/okhttp/src/test/java/okhttp3/RequestCommonTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/RequestCommonTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/RequestCommonTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/RequestCommonTest.kt diff --git a/okhttp/src/test/java/okhttp3/RequestTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/RequestTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/RequestTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/RequestTest.kt diff --git a/okhttp/src/test/java/okhttp3/ResponseBodyJvmTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ResponseBodyJvmTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ResponseBodyJvmTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ResponseBodyJvmTest.kt diff --git a/okhttp/src/test/java/okhttp3/ResponseBodyTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ResponseBodyTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ResponseBodyTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ResponseBodyTest.kt diff --git a/okhttp/src/test/java/okhttp3/ResponseCommonTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ResponseCommonTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ResponseCommonTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ResponseCommonTest.kt diff --git a/okhttp/src/test/java/okhttp3/ResponseJvmTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ResponseJvmTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ResponseJvmTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ResponseJvmTest.kt diff --git a/okhttp/src/test/java/okhttp3/RouteFailureTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/RouteFailureTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/RouteFailureTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/RouteFailureTest.kt diff --git a/okhttp/src/test/java/okhttp3/ServerTruncatesRequestTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/ServerTruncatesRequestTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/ServerTruncatesRequestTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/ServerTruncatesRequestTest.kt diff --git a/okhttp/src/test/java/okhttp3/SessionReuseTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/SessionReuseTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/SessionReuseTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/SessionReuseTest.kt diff --git a/okhttp/src/test/java/okhttp3/SocketChannelTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/SocketChannelTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/SocketChannelTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/SocketChannelTest.kt diff --git a/okhttp/src/test/java/okhttp3/SocksProxy.kt b/okhttp/src/jvmTest/kotlin/okhttp3/SocksProxy.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/SocksProxy.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/SocksProxy.kt diff --git a/okhttp/src/test/java/okhttp3/SocksProxyTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/SocksProxyTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/SocksProxyTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/SocksProxyTest.kt diff --git a/okhttp/src/test/java/okhttp3/TestLogHandler.kt b/okhttp/src/jvmTest/kotlin/okhttp3/TestLogHandler.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/TestLogHandler.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/TestLogHandler.kt diff --git a/okhttp/src/test/java/okhttp3/TestTls13Request.kt b/okhttp/src/jvmTest/kotlin/okhttp3/TestTls13Request.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/TestTls13Request.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/TestTls13Request.kt diff --git a/okhttp/src/test/java/okhttp3/URLConnectionTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/URLConnectionTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/URLConnectionTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/URLConnectionTest.kt diff --git a/okhttp/src/test/java/okhttp3/UrlComponentEncodingTester.kt b/okhttp/src/jvmTest/kotlin/okhttp3/UrlComponentEncodingTester.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/UrlComponentEncodingTester.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/UrlComponentEncodingTester.kt diff --git a/okhttp/src/test/java/okhttp3/UrlComponentEncodingTesterJvm.kt b/okhttp/src/jvmTest/kotlin/okhttp3/UrlComponentEncodingTesterJvm.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/UrlComponentEncodingTesterJvm.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/UrlComponentEncodingTesterJvm.kt diff --git a/okhttp/src/test/java/okhttp3/WebPlatformToAsciiData.kt b/okhttp/src/jvmTest/kotlin/okhttp3/WebPlatformToAsciiData.kt similarity index 93% rename from okhttp/src/test/java/okhttp3/WebPlatformToAsciiData.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/WebPlatformToAsciiData.kt index 474862b25444..1912ae0c7442 100644 --- a/okhttp/src/test/java/okhttp3/WebPlatformToAsciiData.kt +++ b/okhttp/src/jvmTest/kotlin/okhttp3/WebPlatformToAsciiData.kt @@ -34,7 +34,7 @@ class WebPlatformToAsciiData { companion object { fun load(): List { - val path = okHttpRoot / "okhttp/src/test/resources/web-platform-test-toascii.json" + val path = okHttpRoot / "okhttp/src/jvmTest/resources/web-platform-test-toascii.json" return SYSTEM_FILE_SYSTEM.read(path) { Json.decodeFromString>(readUtf8()) } diff --git a/okhttp/src/test/java/okhttp3/WebPlatformToAsciiTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/WebPlatformToAsciiTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/WebPlatformToAsciiTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/WebPlatformToAsciiTest.kt diff --git a/okhttp/src/test/java/okhttp3/WebPlatformUrlTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/WebPlatformUrlTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/WebPlatformUrlTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/WebPlatformUrlTest.kt diff --git a/okhttp/src/test/java/okhttp3/WebPlatformUrlTestData.kt b/okhttp/src/jvmTest/kotlin/okhttp3/WebPlatformUrlTestData.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/WebPlatformUrlTestData.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/WebPlatformUrlTestData.kt diff --git a/okhttp/src/test/java/okhttp3/WholeOperationTimeoutTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/WholeOperationTimeoutTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/WholeOperationTimeoutTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/WholeOperationTimeoutTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/DoubleInetAddressDns.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/DoubleInetAddressDns.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/DoubleInetAddressDns.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/DoubleInetAddressDns.kt diff --git a/okhttp/src/test/java/okhttp3/internal/HostnamesTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/HostnamesTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/HostnamesTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/HostnamesTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/RecordingAuthenticator.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/RecordingAuthenticator.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/RecordingAuthenticator.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/RecordingAuthenticator.kt diff --git a/okhttp/src/test/java/okhttp3/internal/UtilTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/UtilTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/UtilTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/UtilTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/authenticator/JavaNetAuthenticatorTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/authenticator/JavaNetAuthenticatorTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/authenticator/JavaNetAuthenticatorTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/authenticator/JavaNetAuthenticatorTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/cache/DiskLruCacheTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/cache/DiskLruCacheTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/cache/DiskLruCacheTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/cache/DiskLruCacheTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/cache2/FileOperatorTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/cache2/FileOperatorTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/cache2/FileOperatorTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/cache2/FileOperatorTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/cache2/RelayTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/cache2/RelayTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/cache2/RelayTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/cache2/RelayTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/concurrent/TaskLoggerTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/concurrent/TaskLoggerTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/concurrent/TaskLoggerTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/concurrent/TaskLoggerTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/concurrent/TaskRunnerRealBackendTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/concurrent/TaskRunnerRealBackendTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/concurrent/TaskRunnerRealBackendTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/concurrent/TaskRunnerRealBackendTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/concurrent/TaskRunnerTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/concurrent/TaskRunnerTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/concurrent/TaskRunnerTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/concurrent/TaskRunnerTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/connection/ConnectionPoolTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/connection/ConnectionPoolTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/connection/ConnectionPoolTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/connection/ConnectionPoolTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/connection/FastFallbackExchangeFinderTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/connection/FastFallbackExchangeFinderTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/connection/FastFallbackExchangeFinderTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/connection/FastFallbackExchangeFinderTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/connection/InetAddressOrderTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/connection/InetAddressOrderTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/connection/InetAddressOrderTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/connection/InetAddressOrderTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/connection/RetryConnectionTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/connection/RetryConnectionTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/connection/RetryConnectionTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/connection/RetryConnectionTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/connection/RouteSelectorTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/connection/RouteSelectorTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/connection/RouteSelectorTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/connection/RouteSelectorTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http/CancelTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http/CancelTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http/CancelTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http/CancelTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http/ExternalHttp2Example.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http/ExternalHttp2Example.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http/ExternalHttp2Example.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http/ExternalHttp2Example.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http/HttpDateTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http/HttpDateTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http/HttpDateTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http/HttpDateTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http/StatusLineTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http/StatusLineTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http/StatusLineTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http/StatusLineTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http/ThreadInterruptTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http/ThreadInterruptTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http/ThreadInterruptTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http/ThreadInterruptTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http2/BaseTestHandler.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/BaseTestHandler.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http2/BaseTestHandler.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/BaseTestHandler.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http2/FrameLogTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/FrameLogTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http2/FrameLogTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/FrameLogTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http2/HpackTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/HpackTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http2/HpackTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/HpackTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http2/Http2ConnectionTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/Http2ConnectionTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http2/Http2ConnectionTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/Http2ConnectionTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http2/Http2Test.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/Http2Test.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http2/Http2Test.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/Http2Test.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http2/HttpOverHttp2Test.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/HttpOverHttp2Test.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http2/HttpOverHttp2Test.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/HttpOverHttp2Test.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http2/HuffmanTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/HuffmanTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http2/HuffmanTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/HuffmanTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http2/MockHttp2Peer.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/MockHttp2Peer.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http2/MockHttp2Peer.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/MockHttp2Peer.kt diff --git a/okhttp/src/test/java/okhttp3/internal/http2/SettingsTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/SettingsTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/http2/SettingsTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/http2/SettingsTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/idn/IdnaMappingTableTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/idn/IdnaMappingTableTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/idn/IdnaMappingTableTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/idn/IdnaMappingTableTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/idn/PunycodeTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/idn/PunycodeTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/idn/PunycodeTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/idn/PunycodeTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/io/FaultyFileSystem.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/io/FaultyFileSystem.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/io/FaultyFileSystem.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/io/FaultyFileSystem.kt diff --git a/okhttp/src/test/java/okhttp3/internal/platform/Jdk8WithJettyBootPlatformTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/platform/Jdk8WithJettyBootPlatformTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/platform/Jdk8WithJettyBootPlatformTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/platform/Jdk8WithJettyBootPlatformTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/platform/Jdk9PlatformTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/platform/Jdk9PlatformTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/platform/Jdk9PlatformTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/platform/Jdk9PlatformTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/platform/PlatformTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/platform/PlatformTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/platform/PlatformTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/platform/PlatformTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/publicsuffix/PublicSuffixDatabaseTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/publicsuffix/PublicSuffixDatabaseTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/publicsuffix/PublicSuffixDatabaseTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/publicsuffix/PublicSuffixDatabaseTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/publicsuffix/PublicSuffixListGenerator.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/publicsuffix/PublicSuffixListGenerator.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/publicsuffix/PublicSuffixListGenerator.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/publicsuffix/PublicSuffixListGenerator.kt diff --git a/okhttp/src/test/java/okhttp3/internal/publicsuffix/ResourcePublicSuffixList.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/publicsuffix/ResourcePublicSuffixList.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/publicsuffix/ResourcePublicSuffixList.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/publicsuffix/ResourcePublicSuffixList.kt diff --git a/okhttp/src/test/java/okhttp3/internal/tls/CertificatePinnerChainValidationTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/tls/CertificatePinnerChainValidationTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/tls/CertificatePinnerChainValidationTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/tls/CertificatePinnerChainValidationTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/tls/ClientAuthTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/tls/ClientAuthTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/tls/ClientAuthTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/tls/ClientAuthTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/tls/HostnameVerifierTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/tls/HostnameVerifierTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/tls/HostnameVerifierTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/tls/HostnameVerifierTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/ws/MessageDeflaterInflaterTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/MessageDeflaterInflaterTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/ws/MessageDeflaterInflaterTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/MessageDeflaterInflaterTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/ws/RealWebSocketTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/RealWebSocketTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/ws/RealWebSocketTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/RealWebSocketTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/ws/WebSocketExtensionsTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketExtensionsTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/ws/WebSocketExtensionsTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketExtensionsTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/ws/WebSocketHttpTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketHttpTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/ws/WebSocketHttpTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketHttpTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/ws/WebSocketReaderTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketReaderTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/ws/WebSocketReaderTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketReaderTest.kt diff --git a/okhttp/src/test/java/okhttp3/internal/ws/WebSocketRecorder.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketRecorder.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/ws/WebSocketRecorder.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketRecorder.kt diff --git a/okhttp/src/test/java/okhttp3/internal/ws/WebSocketWriterTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketWriterTest.kt similarity index 100% rename from okhttp/src/test/java/okhttp3/internal/ws/WebSocketWriterTest.kt rename to okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketWriterTest.kt diff --git a/okhttp/src/test/resources/okhttp3/internal/publicsuffix/NOTICE b/okhttp/src/jvmTest/resources/okhttp3/internal/publicsuffix/NOTICE similarity index 100% rename from okhttp/src/test/resources/okhttp3/internal/publicsuffix/NOTICE rename to okhttp/src/jvmTest/resources/okhttp3/internal/publicsuffix/NOTICE diff --git a/okhttp/src/test/resources/okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz b/okhttp/src/jvmTest/resources/okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz similarity index 100% rename from okhttp/src/test/resources/okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz rename to okhttp/src/jvmTest/resources/okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz diff --git a/okhttp/src/test/resources/okhttp3/internal/publicsuffix/public_suffix_list.dat b/okhttp/src/jvmTest/resources/okhttp3/internal/publicsuffix/public_suffix_list.dat similarity index 100% rename from okhttp/src/test/resources/okhttp3/internal/publicsuffix/public_suffix_list.dat rename to okhttp/src/jvmTest/resources/okhttp3/internal/publicsuffix/public_suffix_list.dat diff --git a/okhttp/src/test/resources/web-platform-test-toascii.json b/okhttp/src/jvmTest/resources/web-platform-test-toascii.json similarity index 100% rename from okhttp/src/test/resources/web-platform-test-toascii.json rename to okhttp/src/jvmTest/resources/web-platform-test-toascii.json diff --git a/okhttp/src/test/resources/web-platform-test-urltestdata.txt b/okhttp/src/jvmTest/resources/web-platform-test-urltestdata.txt similarity index 100% rename from okhttp/src/test/resources/web-platform-test-urltestdata.txt rename to okhttp/src/jvmTest/resources/web-platform-test-urltestdata.txt diff --git a/settings.gradle.kts b/settings.gradle.kts index 0b7f1566c4f3..442c415ab5e1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -37,6 +37,7 @@ include(":okhttp-hpacktests") include(":okhttp-idna-mapping-table") include(":okhttp-java-net-cookiejar") include(":okhttp-logging-interceptor") +include(":okhttp-osgi-tests") include(":okhttp-sse") include(":okhttp-testing-support") include(":okhttp-tls") @@ -61,31 +62,10 @@ val localProperties = Properties().apply { } } val sdkDir = localProperties.getProperty("sdk.dir") -if ((androidHome != null || sdkDir != null) && !isKnownBrokenIntelliJ()) { +if (androidHome != null || sdkDir != null) { include(":okhttp-android") include(":android-test") include(":android-test-app") } enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") - -/** - * Avoid a crash in IntelliJ triggered by Android submodules. - * - * ``` - * java.lang.AssertionError: Can't find built-in class kotlin.Cloneable - * at org.jetbrains.kotlin.builtins.KotlinBuiltIns.getBuiltInClassByFqName(KotlinBuiltIns.java:217) - * at org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMapper.mapJavaToKotlin(JavaToKotlinClassMapper.kt:41) - * ... - * ``` - */ -fun isKnownBrokenIntelliJ(): Boolean { - val ideaVersionString = System.getProperty("idea.version") ?: return false - - return try { - val (major, minor, _) = ideaVersionString.split(".", limit = 3) - KotlinVersion(major.toInt(), minor.toInt()) < KotlinVersion(2023, 2) - } catch (e: Exception) { - false // Unknown version, presumably compatible. - } -} From d212391897ea46db45b31f4856f8de15d646144e Mon Sep 17 00:00:00 2001 From: Yuri Schimke Date: Sat, 28 Dec 2024 14:19:31 +0200 Subject: [PATCH 5/6] remove unneeded TODO (#8637) --- .../src/main/kotlin/okhttp3/internal/concurrent/TaskFaker.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/okhttp-testing-support/src/main/kotlin/okhttp3/internal/concurrent/TaskFaker.kt b/okhttp-testing-support/src/main/kotlin/okhttp3/internal/concurrent/TaskFaker.kt index b1b96c7f82b9..cfb099be2e0d 100644 --- a/okhttp-testing-support/src/main/kotlin/okhttp3/internal/concurrent/TaskFaker.kt +++ b/okhttp-testing-support/src/main/kotlin/okhttp3/internal/concurrent/TaskFaker.kt @@ -369,8 +369,6 @@ class TaskFaker : Closeable { val editCountBefore = editCount yieldUntil { nanoTime >= waitUntil || editCount > editCountBefore } } - // TODO report compiler bug - TODO("Can't get here") } } From 8cc665f95a6e1311691b8eb83a0ec534eac4daa6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Dec 2024 15:22:24 +0000 Subject: [PATCH 6/6] Update org.bouncycastle to v1.79 (#8441) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update org.bouncycastle to v1.79 * Handle UnsupportedOperationException – if the underlying provider does not implement the operation * Handle BC requirements on the key manager --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Yuri Schimke --- gradle/libs.versions.toml | 2 +- .../java/mockwebserver3/MockResponseSniTest.kt | 16 +++++++++++++--- .../main/kotlin/okhttp3/tls/internal/TlsUtil.kt | 6 +++++- .../kotlin/okhttp3/internal/platform/Platform.kt | 8 +++++++- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a8745321b8de..f6e3b6a8a411 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ kotlinx-serialization = "1.7.3" ksp = "2.1.0-1.0.29" lintGradle = "1.0.0-alpha03" mockserverClient = "5.15.0" -org-bouncycastle = "1.76" +org-bouncycastle = "1.79" org-conscrypt = "2.5.2" org-jetbrains-coroutines = "1.9.0" org-jetbrains-kotlin = "2.1.0" diff --git a/mockwebserver/src/test/java/mockwebserver3/MockResponseSniTest.kt b/mockwebserver/src/test/java/mockwebserver3/MockResponseSniTest.kt index 1367de61c6cc..db3e63d32880 100644 --- a/mockwebserver/src/test/java/mockwebserver3/MockResponseSniTest.kt +++ b/mockwebserver/src/test/java/mockwebserver3/MockResponseSniTest.kt @@ -77,7 +77,10 @@ class MockResponseSniTest { assertThat(response.isSuccessful).isTrue() val recordedRequest = server.takeRequest() - assertThat(recordedRequest.handshakeServerNames).containsExactly(url.host) + // https://github.com/bcgit/bc-java/issues/1773 + if (!platform.isBouncyCastle()) { + assertThat(recordedRequest.handshakeServerNames).containsExactly(url.host) + } } /** @@ -126,7 +129,11 @@ class MockResponseSniTest { val recordedRequest = server.takeRequest() assertThat(recordedRequest.requestUrl!!.host).isEqualTo("header-host") - assertThat(recordedRequest.handshakeServerNames).containsExactly("url-host.com") + + // https://github.com/bcgit/bc-java/issues/1773 + if (!platform.isBouncyCastle()) { + assertThat(recordedRequest.handshakeServerNames).containsExactly("url-host.com") + } } /** No SNI for literal IPv6 addresses. */ @@ -149,7 +156,10 @@ class MockResponseSniTest { fun regularHostname() { val recordedRequest = requestToHostnameViaProxy("cash.app") assertThat(recordedRequest.requestUrl!!.host).isEqualTo("cash.app") - assertThat(recordedRequest.handshakeServerNames).containsExactly("cash.app") + // https://github.com/bcgit/bc-java/issues/1773 + if (!platform.isBouncyCastle()) { + assertThat(recordedRequest.handshakeServerNames).containsExactly("cash.app") + } } /** diff --git a/okhttp-tls/src/main/kotlin/okhttp3/tls/internal/TlsUtil.kt b/okhttp-tls/src/main/kotlin/okhttp3/tls/internal/TlsUtil.kt index ad76e91bbf51..7b4fa57f96ec 100644 --- a/okhttp-tls/src/main/kotlin/okhttp3/tls/internal/TlsUtil.kt +++ b/okhttp-tls/src/main/kotlin/okhttp3/tls/internal/TlsUtil.kt @@ -96,7 +96,11 @@ object TlsUtil { keyStore.setKeyEntry("private", heldCertificate.keyPair.private, password, chain) } - val factory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()) + // https://github.com/bcgit/bc-java/issues/1160 + val isBouncyCastle = keyStore.provider.name == "BC" + val algorithm = if (isBouncyCastle) "PKIX" else KeyManagerFactory.getDefaultAlgorithm() + + val factory = KeyManagerFactory.getInstance(algorithm) factory.init(keyStore, password) val result = factory.keyManagers!! check(result.size == 1 && result[0] is X509KeyManager) { diff --git a/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/platform/Platform.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/platform/Platform.kt index efcfac723c4e..71065ebc75b8 100644 --- a/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/platform/Platform.kt +++ b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/platform/Platform.kt @@ -129,7 +129,13 @@ open class Platform { @IgnoreJRERequirement // This function is overridden to require API >= 24. open fun getHandshakeServerNames(sslSocket: SSLSocket): List { val session = sslSocket.session as? ExtendedSSLSession ?: return listOf() - return session.requestedServerNames.mapNotNull { (it as? SNIHostName)?.asciiName } + return try { + session.requestedServerNames.mapNotNull { (it as? SNIHostName)?.asciiName } + } catch (uoe: UnsupportedOperationException) { + // UnsupportedOperationException – if the underlying provider does not implement the operation + // https://github.com/bcgit/bc-java/issues/1773 + listOf() + } } @Throws(IOException::class)