From 4d2c3aac0ef7d35ac363ef328f1005366758cf94 Mon Sep 17 00:00:00 2001 From: sanjaypujare Date: Wed, 28 Jun 2023 18:28:30 -0700 Subject: [PATCH] context, all: move Context classes to grpc-api (#10313) * context, all: move Context classes to grpc-api clean up grpc-context since it has no source code: only add dep on grpc-api add exclusion for all transitive deps of grpc-api - only guava exclude grpc-context as a dependency from grpc-alts because all context code is in grpc-api now api: 1.7 as target Java version for Context source-set of grpc-api * core, census: fix the issues with android project pulling in old grpc-context version * api,context: make changes to bazel build files to account for context code moving from context to api --- api/BUILD.bazel | 2 ++ api/build.gradle | 27 ++++++++++++++--- .../src/context}/java/io/grpc/Context.java | 0 .../src/context}/java/io/grpc/Deadline.java | 0 .../grpc/PersistentHashArrayMappedTrie.java | 0 .../io/grpc/ThreadLocalContextStorage.java | 0 .../java/io/grpc/AttachDetachBenchmark.java | 0 .../src/jmh/java/io/grpc/ReadBenchmark.java | 0 .../src/jmh/java/io/grpc/WriteBenchmark.java | 0 .../src/test/java/io/grpc/ContextTest.java | 0 .../src/test/java/io/grpc/DeadlineTest.java | 0 .../PersistentHashArrayMappedTrieTest.java | 0 .../grpc/ThreadLocalContextStorageTest.java | 0 .../io/grpc/StaticTestingClassLoader.java | 0 .../java/io/grpc/testing/DeadlineSubject.java | 0 census/build.gradle | 3 +- context/BUILD.bazel | 3 -- context/build.gradle | 29 ++++--------------- core/build.gradle | 5 ++-- gcp-observability/build.gradle | 2 +- interop-testing/build.gradle | 3 +- istio-interop-testing/build.gradle | 3 +- testing/build.gradle | 2 +- 23 files changed, 40 insertions(+), 39 deletions(-) rename {context/src/main => api/src/context}/java/io/grpc/Context.java (100%) rename {context/src/main => api/src/context}/java/io/grpc/Deadline.java (100%) rename {context/src/main => api/src/context}/java/io/grpc/PersistentHashArrayMappedTrie.java (100%) rename {context/src/main => api/src/context}/java/io/grpc/ThreadLocalContextStorage.java (100%) rename {context => api}/src/jmh/java/io/grpc/AttachDetachBenchmark.java (100%) rename {context => api}/src/jmh/java/io/grpc/ReadBenchmark.java (100%) rename {context => api}/src/jmh/java/io/grpc/WriteBenchmark.java (100%) rename {context => api}/src/test/java/io/grpc/ContextTest.java (100%) rename {context => api}/src/test/java/io/grpc/DeadlineTest.java (100%) rename {context => api}/src/test/java/io/grpc/PersistentHashArrayMappedTrieTest.java (100%) rename {context => api}/src/test/java/io/grpc/ThreadLocalContextStorageTest.java (100%) rename {context => api}/src/testFixtures/java/io/grpc/StaticTestingClassLoader.java (100%) rename {context => api}/src/testFixtures/java/io/grpc/testing/DeadlineSubject.java (100%) diff --git a/api/BUILD.bazel b/api/BUILD.bazel index 4b74e6a836..b513bc1205 100644 --- a/api/BUILD.bazel +++ b/api/BUILD.bazel @@ -2,6 +2,7 @@ java_library( name = "api", srcs = glob([ "src/main/java/**/*.java", + "src/context/java/**/*.java", ]), javacopts = ["-Xep:DoNotCall:OFF"], # Remove once requiring Bazel 3.4.0+; allows non-final visibility = ["//visibility:public"], @@ -13,4 +14,5 @@ java_library( "@com_google_guava_guava//jar", "@com_google_j2objc_j2objc_annotations//jar", ], + exports = ["//context"], ) diff --git a/api/build.gradle b/api/build.gradle index 3d19e39490..6906a2ae0d 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -9,17 +9,31 @@ plugins { description = 'gRPC: API' +sourceSets { + context + main { + output.classesDirs.from(sourceSets.context.output.classesDirs) + } +} + +compileContextJava { + sourceCompatibility = 1.7 + targetCompatibility = 1.7 +} + + dependencies { - api project(':grpc-context'), - libraries.jsr305, + compileOnly sourceSets.context.output + api libraries.jsr305, libraries.errorprone.annotations implementation libraries.guava + testFixturesApi libraries.truth + testFixturesImplementation libraries.jsr305 testFixturesImplementation libraries.guava, libraries.junit, libraries.mockito.core - testImplementation testFixtures(project(':grpc-context')), - project(':grpc-testing'), + testImplementation project(':grpc-testing'), project(':grpc-grpclb') testImplementation libraries.guava.testlib jmh project(':grpc-core') @@ -29,9 +43,14 @@ dependencies { } tasks.named("javadoc").configure { + source sourceSets.context.allSource // We want io.grpc.Internal, but not io.grpc.Internal* exclude 'io/grpc/Internal?*.java' } +tasks.named("sourcesJar").configure { + from sourceSets.context.allSource +} + components.java.withVariantsFromConfiguration(configurations.testFixturesApiElements) { skip() } components.java.withVariantsFromConfiguration(configurations.testFixturesRuntimeElements) { skip() } diff --git a/context/src/main/java/io/grpc/Context.java b/api/src/context/java/io/grpc/Context.java similarity index 100% rename from context/src/main/java/io/grpc/Context.java rename to api/src/context/java/io/grpc/Context.java diff --git a/context/src/main/java/io/grpc/Deadline.java b/api/src/context/java/io/grpc/Deadline.java similarity index 100% rename from context/src/main/java/io/grpc/Deadline.java rename to api/src/context/java/io/grpc/Deadline.java diff --git a/context/src/main/java/io/grpc/PersistentHashArrayMappedTrie.java b/api/src/context/java/io/grpc/PersistentHashArrayMappedTrie.java similarity index 100% rename from context/src/main/java/io/grpc/PersistentHashArrayMappedTrie.java rename to api/src/context/java/io/grpc/PersistentHashArrayMappedTrie.java diff --git a/context/src/main/java/io/grpc/ThreadLocalContextStorage.java b/api/src/context/java/io/grpc/ThreadLocalContextStorage.java similarity index 100% rename from context/src/main/java/io/grpc/ThreadLocalContextStorage.java rename to api/src/context/java/io/grpc/ThreadLocalContextStorage.java diff --git a/context/src/jmh/java/io/grpc/AttachDetachBenchmark.java b/api/src/jmh/java/io/grpc/AttachDetachBenchmark.java similarity index 100% rename from context/src/jmh/java/io/grpc/AttachDetachBenchmark.java rename to api/src/jmh/java/io/grpc/AttachDetachBenchmark.java diff --git a/context/src/jmh/java/io/grpc/ReadBenchmark.java b/api/src/jmh/java/io/grpc/ReadBenchmark.java similarity index 100% rename from context/src/jmh/java/io/grpc/ReadBenchmark.java rename to api/src/jmh/java/io/grpc/ReadBenchmark.java diff --git a/context/src/jmh/java/io/grpc/WriteBenchmark.java b/api/src/jmh/java/io/grpc/WriteBenchmark.java similarity index 100% rename from context/src/jmh/java/io/grpc/WriteBenchmark.java rename to api/src/jmh/java/io/grpc/WriteBenchmark.java diff --git a/context/src/test/java/io/grpc/ContextTest.java b/api/src/test/java/io/grpc/ContextTest.java similarity index 100% rename from context/src/test/java/io/grpc/ContextTest.java rename to api/src/test/java/io/grpc/ContextTest.java diff --git a/context/src/test/java/io/grpc/DeadlineTest.java b/api/src/test/java/io/grpc/DeadlineTest.java similarity index 100% rename from context/src/test/java/io/grpc/DeadlineTest.java rename to api/src/test/java/io/grpc/DeadlineTest.java diff --git a/context/src/test/java/io/grpc/PersistentHashArrayMappedTrieTest.java b/api/src/test/java/io/grpc/PersistentHashArrayMappedTrieTest.java similarity index 100% rename from context/src/test/java/io/grpc/PersistentHashArrayMappedTrieTest.java rename to api/src/test/java/io/grpc/PersistentHashArrayMappedTrieTest.java diff --git a/context/src/test/java/io/grpc/ThreadLocalContextStorageTest.java b/api/src/test/java/io/grpc/ThreadLocalContextStorageTest.java similarity index 100% rename from context/src/test/java/io/grpc/ThreadLocalContextStorageTest.java rename to api/src/test/java/io/grpc/ThreadLocalContextStorageTest.java diff --git a/context/src/testFixtures/java/io/grpc/StaticTestingClassLoader.java b/api/src/testFixtures/java/io/grpc/StaticTestingClassLoader.java similarity index 100% rename from context/src/testFixtures/java/io/grpc/StaticTestingClassLoader.java rename to api/src/testFixtures/java/io/grpc/StaticTestingClassLoader.java diff --git a/context/src/testFixtures/java/io/grpc/testing/DeadlineSubject.java b/api/src/testFixtures/java/io/grpc/testing/DeadlineSubject.java similarity index 100% rename from context/src/testFixtures/java/io/grpc/testing/DeadlineSubject.java rename to api/src/testFixtures/java/io/grpc/testing/DeadlineSubject.java diff --git a/census/build.gradle b/census/build.gradle index 25948f17f6..6c9a727857 100644 --- a/census/build.gradle +++ b/census/build.gradle @@ -9,12 +9,13 @@ description = 'gRPC: Census' dependencies { api project(':grpc-api') + // force dependent jars to depend on latest grpc-context + runtimeOnly project(":grpc-context") implementation libraries.guava, libraries.opencensus.api, libraries.opencensus.contrib.grpc.metrics testImplementation testFixtures(project(':grpc-api')), - testFixtures(project(':grpc-context')), testFixtures(project(':grpc-core')), project(':grpc-testing'), libraries.opencensus.impl diff --git a/context/BUILD.bazel b/context/BUILD.bazel index a59da4ae7e..a5289a1fff 100644 --- a/context/BUILD.bazel +++ b/context/BUILD.bazel @@ -1,7 +1,4 @@ java_library( name = "context", - srcs = glob([ - "src/main/java/**/*.java", - ]), visibility = ["//visibility:public"], ) diff --git a/context/build.gradle b/context/build.gradle index a788261cbd..46d3d852f4 100644 --- a/context/build.gradle +++ b/context/build.gradle @@ -1,31 +1,14 @@ plugins { - id "java" - id "java-test-fixtures" + id "java-library" id "maven-publish" - - id "me.champeau.gradle.japicmp" - id "me.champeau.jmh" - id "ru.vyarus.animalsniffer" } description = 'gRPC: Context' -sourceCompatibility = 1.7 -targetCompatibility = 1.7 - dependencies { - testFixturesApi libraries.truth - // Explicitly choose the guava version to stay Java 7-compatible. - testFixturesImplementation 'com.google.guava:guava:30.1.1-android' - testFixturesImplementation libraries.jsr305 - testImplementation libraries.jsr305 - // Explicitly choose the guava version to stay Java 7-compatible. The rest of gRPC can move - // forward to Java 8-requiring versions. This is also only used for testing, so is unlikely to - // cause problems. - testImplementation 'com.google.guava:guava-testlib:30.1.1-android' - signature "org.codehaus.mojo.signature:java17:1.0@signature" - signature "net.sf.androidscents.signature:android-api-level-14:4.0_r4@signature" + runtimeOnly (project(":grpc-api")) { + exclude group: "com.google.guava", module: "guava" + exclude group: "com.google.code.findbugs", module: "jsr305" + exclude group: "com.google.errorprone", module: "error_prone_annotations" + } } - -components.java.withVariantsFromConfiguration(configurations.testFixturesApiElements) { skip() } -components.java.withVariantsFromConfiguration(configurations.testFixturesRuntimeElements) { skip() } diff --git a/core/build.gradle b/core/build.gradle index 932c8778eb..c2e87127c7 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -22,6 +22,8 @@ description = 'gRPC: Core' dependencies { api project(':grpc-api') + // force dependent jars to depend on latest grpc-context + runtimeOnly project(":grpc-context") implementation libraries.gson, libraries.android.annotations, libraries.animalsniffer.annotations, @@ -33,8 +35,7 @@ dependencies { libraries.mockito.core, libraries.truth, project(':grpc-testing') - testImplementation testFixtures(project(':grpc-context')), - testFixtures(project(':grpc-api')), + testImplementation testFixtures(project(':grpc-api')), project(':grpc-testing'), project(':grpc-grpclb') testImplementation libraries.guava.testlib diff --git a/gcp-observability/build.gradle b/gcp-observability/build.gradle index 9cef17fcd8..38fb3d0fcd 100644 --- a/gcp-observability/build.gradle +++ b/gcp-observability/build.gradle @@ -63,7 +63,7 @@ dependencies { libraries.checker.qual, // Explicit dependency to keep in step with version used by guava libraries.j2objc.annotations // Explicit dependency to keep in step with version used by guava - testImplementation testFixtures(project(':grpc-context')), + testImplementation testFixtures(project(':grpc-api')), project(':grpc-testing'), project(':grpc-testing-proto') testImplementation (libraries.guava.testlib) { diff --git a/interop-testing/build.gradle b/interop-testing/build.gradle index 96d4ca3614..a1ae639b2e 100644 --- a/interop-testing/build.gradle +++ b/interop-testing/build.gradle @@ -45,8 +45,7 @@ dependencies { libraries.netty.tcnative.classes, project(':grpc-grpclb'), project(':grpc-rls') - testImplementation testFixtures(project(':grpc-context')), - testFixtures(project(':grpc-api')), + testImplementation testFixtures(project(':grpc-api')), testFixtures(project(':grpc-core')), libraries.mockito.core, libraries.okhttp diff --git a/istio-interop-testing/build.gradle b/istio-interop-testing/build.gradle index b4495002af..204996ca9d 100644 --- a/istio-interop-testing/build.gradle +++ b/istio-interop-testing/build.gradle @@ -26,8 +26,7 @@ dependencies { runtimeOnly libraries.netty.tcnative, libraries.netty.tcnative.classes - testImplementation testFixtures(project(':grpc-context')), - testFixtures(project(':grpc-api')), + testImplementation testFixtures(project(':grpc-api')), testFixtures(project(':grpc-core')), libraries.mockito.core, libraries.junit, diff --git a/testing/build.gradle b/testing/build.gradle index a2887eac3c..0c08381a77 100644 --- a/testing/build.gradle +++ b/testing/build.gradle @@ -14,7 +14,7 @@ dependencies { libraries.junit // Only io.grpc.internal.testing.StatsTestUtils depends on opencensus_api, for internal use. compileOnly libraries.opencensus.api - runtimeOnly project(":grpc-context") // Pull in newer version than census-api + runtimeOnly project(":grpc-api") // Pull in newer version than census-api testImplementation libraries.mockito.core