Skip to content

Commit c8140e6

Browse files
committed
Generate compatibility methods to maintain ABI while changing API
1 parent 43d2e53 commit c8140e6

File tree

3 files changed

+73
-4
lines changed

3 files changed

+73
-4
lines changed

core/build.gradle

+20
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
buildscript {
2+
dependencies {
3+
classpath 'com.infradna.tool:bridge-method-injector:1.18'
4+
}
5+
}
6+
17
plugins {
28
id "java-library"
39
id "maven-publish"
@@ -7,13 +13,18 @@ plugins {
713
id "ru.vyarus.animalsniffer"
814
}
915

16+
import com.infradna.tool.bridge_method_injector.MethodInjector;
17+
1018
description = 'gRPC: Core'
1119

1220
evaluationDependsOn(project(':grpc-context').path)
1321
evaluationDependsOn(project(':grpc-api').path)
1422

1523
dependencies {
1624
api project(':grpc-api')
25+
compileOnlyApi ('com.infradna.tool:bridge-method-annotation:1.18') {
26+
exclude group: 'org.jenkins-ci', module: 'annotation-indexer'
27+
}
1728
implementation libraries.gson,
1829
libraries.android_annotations,
1930
libraries.animalsniffer_annotations,
@@ -58,6 +69,15 @@ plugins.withId("java") {
5869
// This project targets Java 7 (no method references)
5970
options.errorprone.check("UnnecessaryAnonymousClass", CheckSeverity.OFF)
6071
}
72+
73+
compileJava {
74+
doLast {
75+
new MethodInjector().handle(destinationDirectory.file(
76+
"io/grpc/internal/AbstractManagedChannelImplBuilder.class").get().getAsFile());
77+
new MethodInjector().handle(destinationDirectory.file(
78+
"io/grpc/internal/AbstractServerImplBuilder.class").get().getAsFile());
79+
}
80+
}
6181
}
6282

6383
task versionFile() {

core/src/main/java/io/grpc/internal/AbstractManagedChannelImplBuilder.java

+34-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.grpc.internal;
1818

1919
import com.google.common.base.MoreObjects;
20+
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
2021
import io.grpc.BinaryLog;
2122
import io.grpc.ClientInterceptor;
2223
import io.grpc.CompressorRegistry;
@@ -38,8 +39,8 @@
3839
* @param <T> The concrete type of this builder.
3940
* @see <a href="https://github.com/grpc/grpc-java/issues/7211">grpc/grpc-java#7211</a>
4041
*/
41-
public abstract class AbstractManagedChannelImplBuilder
42-
<T extends AbstractManagedChannelImplBuilder<T>> extends ManagedChannelBuilder<T> {
42+
public abstract class AbstractManagedChannelImplBuilder<T extends ManagedChannelBuilder<T>>
43+
extends ManagedChannelBuilder<T> {
4344

4445
/**
4546
* The default constructor.
@@ -66,187 +67,218 @@ public static ManagedChannelBuilder<?> forTarget(String target) {
6667
protected abstract ManagedChannelBuilder<?> delegate();
6768

6869
@Override
70+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
6971
public T directExecutor() {
7072
delegate().directExecutor();
7173
return thisT();
7274
}
7375

7476
@Override
77+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
7578
public T executor(Executor executor) {
7679
delegate().executor(executor);
7780
return thisT();
7881
}
7982

8083
@Override
84+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
8185
public T offloadExecutor(Executor executor) {
8286
delegate().offloadExecutor(executor);
8387
return thisT();
8488
}
8589

8690
@Override
91+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
8792
public T intercept(List<ClientInterceptor> interceptors) {
8893
delegate().intercept(interceptors);
8994
return thisT();
9095
}
9196

9297
@Override
98+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
9399
public T intercept(ClientInterceptor... interceptors) {
94100
delegate().intercept(interceptors);
95101
return thisT();
96102
}
97103

98104
@Override
105+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
99106
public T userAgent(String userAgent) {
100107
delegate().userAgent(userAgent);
101108
return thisT();
102109
}
103110

104111
@Override
112+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
105113
public T overrideAuthority(String authority) {
106114
delegate().overrideAuthority(authority);
107115
return thisT();
108116
}
109117

110118
@Override
119+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
111120
public T usePlaintext() {
112121
delegate().usePlaintext();
113122
return thisT();
114123
}
115124

116125
@Override
126+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
117127
public T useTransportSecurity() {
118128
delegate().useTransportSecurity();
119129
return thisT();
120130
}
121131

122132
@Deprecated
123133
@Override
134+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
124135
public T nameResolverFactory(NameResolver.Factory resolverFactory) {
125136
delegate().nameResolverFactory(resolverFactory);
126137
return thisT();
127138
}
128139

129140
@Override
141+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
130142
public T defaultLoadBalancingPolicy(String policy) {
131143
delegate().defaultLoadBalancingPolicy(policy);
132144
return thisT();
133145
}
134146

135147
@Override
148+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
136149
public T enableFullStreamDecompression() {
137150
delegate().enableFullStreamDecompression();
138151
return thisT();
139152
}
140153

141154
@Override
155+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
142156
public T decompressorRegistry(DecompressorRegistry registry) {
143157
delegate().decompressorRegistry(registry);
144158
return thisT();
145159
}
146160

147161
@Override
162+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
148163
public T compressorRegistry(CompressorRegistry registry) {
149164
delegate().compressorRegistry(registry);
150165
return thisT();
151166
}
152167

153168
@Override
169+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
154170
public T idleTimeout(long value, TimeUnit unit) {
155171
delegate().idleTimeout(value, unit);
156172
return thisT();
157173
}
158174

159175
@Override
176+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
160177
public T maxInboundMessageSize(int max) {
161178
delegate().maxInboundMessageSize(max);
162179
return thisT();
163180
}
164181

165182
@Override
183+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
166184
public T maxInboundMetadataSize(int max) {
167185
delegate().maxInboundMetadataSize(max);
168186
return thisT();
169187
}
170188

171189
@Override
190+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
172191
public T keepAliveTime(long keepAliveTime, TimeUnit timeUnit) {
173192
delegate().keepAliveTime(keepAliveTime, timeUnit);
174193
return thisT();
175194
}
176195

177196
@Override
197+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
178198
public T keepAliveTimeout(long keepAliveTimeout, TimeUnit timeUnit) {
179199
delegate().keepAliveTimeout(keepAliveTimeout, timeUnit);
180200
return thisT();
181201
}
182202

183203
@Override
204+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
184205
public T keepAliveWithoutCalls(boolean enable) {
185206
delegate().keepAliveWithoutCalls(enable);
186207
return thisT();
187208
}
188209

189210
@Override
211+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
190212
public T maxRetryAttempts(int maxRetryAttempts) {
191213
delegate().maxRetryAttempts(maxRetryAttempts);
192214
return thisT();
193215
}
194216

195217
@Override
218+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
196219
public T maxHedgedAttempts(int maxHedgedAttempts) {
197220
delegate().maxHedgedAttempts(maxHedgedAttempts);
198221
return thisT();
199222
}
200223

201224
@Override
225+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
202226
public T retryBufferSize(long bytes) {
203227
delegate().retryBufferSize(bytes);
204228
return thisT();
205229
}
206230

207231
@Override
232+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
208233
public T perRpcBufferLimit(long bytes) {
209234
delegate().perRpcBufferLimit(bytes);
210235
return thisT();
211236
}
212237

213238
@Override
239+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
214240
public T disableRetry() {
215241
delegate().disableRetry();
216242
return thisT();
217243
}
218244

219245
@Override
246+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
220247
public T enableRetry() {
221248
delegate().enableRetry();
222249
return thisT();
223250
}
224251

225252
@Override
253+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
226254
public T setBinaryLog(BinaryLog binaryLog) {
227255
delegate().setBinaryLog(binaryLog);
228256
return thisT();
229257
}
230258

231259
@Override
260+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
232261
public T maxTraceEvents(int maxTraceEvents) {
233262
delegate().maxTraceEvents(maxTraceEvents);
234263
return thisT();
235264
}
236265

237266
@Override
267+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
238268
public T proxyDetector(ProxyDetector proxyDetector) {
239269
delegate().proxyDetector(proxyDetector);
240270
return thisT();
241271
}
242272

243273
@Override
274+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
244275
public T defaultServiceConfig(@Nullable Map<String, ?> serviceConfig) {
245276
delegate().defaultServiceConfig(serviceConfig);
246277
return thisT();
247278
}
248279

249280
@Override
281+
@WithBridgeMethods(value=AbstractManagedChannelImplBuilder.class, castRequired=true)
250282
public T disableServiceConfigLookUp() {
251283
delegate().disableServiceConfigLookUp();
252284
return thisT();

0 commit comments

Comments
 (0)