Skip to content

Commit b34d2e6

Browse files
committed
Remove all remaining references to jsr305 annotations and migrate to the checker framework's annotations.
Fixes https://github.com/google/dagger/issue/880 Closes #882 RELNOTES=Fix JPMS issue with javax.annotation types ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=178799529
1 parent 8d85bcd commit b34d2e6

11 files changed

+64
-45
lines changed

WORKSPACE

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,3 +208,9 @@ http_archive(
208208
load("//tools:jarjar.bzl", "jarjar_deps")
209209

210210
jarjar_deps()
211+
212+
maven_jar(
213+
name = "org_checkerframework_checker_compat_qual",
214+
artifact = "org.checkerframework:checker-compat-qual:2.3.0",
215+
sha1 = "69cb4fea55a9d89b8827d107f17c985cc1a76052",
216+
)

java/dagger/grpc/server/processor/GrpcServiceModel.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package dagger.grpc.server.processor;
1818

1919
import static com.google.auto.common.AnnotationMirrors.getAnnotationValue;
20+
import static com.google.auto.common.GeneratedAnnotationSpecs.generatedAnnotationSpec;
2021
import static com.google.auto.common.MoreElements.getAnnotationMirror;
2122
import static com.google.common.base.CaseFormat.LOWER_CAMEL;
2223
import static com.google.common.base.CaseFormat.UPPER_CAMEL;
@@ -28,7 +29,7 @@
2829
import dagger.grpc.server.ForGrpcService;
2930
import dagger.grpc.server.GrpcService;
3031
import dagger.grpc.server.processor.SourceGenerator.IoGrpc;
31-
import javax.annotation.Generated;
32+
import java.util.Optional;
3233
import javax.annotation.processing.Messager;
3334
import javax.annotation.processing.ProcessingEnvironment;
3435
import javax.lang.model.element.AnnotationMirror;
@@ -108,18 +109,16 @@ protected final TypeElement grpcClass() {
108109
}
109110

110111
/**
111-
* Returns the annotation spec for the {@link Generated @Generated} annotation to add to any
112+
* Returns the annotation spec for the {@code @Generated} annotation to add to any
112113
* type generated by this processor.
113114
*/
114-
protected final AnnotationSpec generatedAnnotation() {
115-
return AnnotationSpec.builder(Generated.class)
116-
.addMember(
117-
"value",
118-
"$S",
119-
String.format(
120-
"@%s annotation on %s",
121-
GrpcService.class.getCanonicalName(), serviceImplementationClassName))
122-
.build();
115+
protected final Optional<AnnotationSpec> generatedAnnotation() {
116+
return generatedAnnotationSpec(
117+
elements,
118+
GrpcService.class,
119+
String.format(
120+
"@%s annotation on %s",
121+
GrpcService.class.getCanonicalName(), serviceImplementationClassName));
123122
}
124123

125124
/**

java/dagger/grpc/server/processor/GrpcServiceModuleGenerator.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,16 @@ final class GrpcServiceModuleGenerator extends SourceGenerator {
5050

5151
@Override
5252
protected TypeSpec createType() {
53-
return classBuilder(grpcServiceModel.serviceModuleName)
54-
.addJavadoc(
55-
"Install this module in the {@link $T @Singleton} server component\n",
56-
JavaxInject.singleton().type)
57-
.addJavadoc(
58-
"or in the subcomponent that implements {@link $T}.\n",
59-
grpcServiceModel.serviceDefinitionTypeName)
60-
.addAnnotation(grpcServiceModel.generatedAnnotation())
53+
TypeSpec.Builder serviceModule =
54+
classBuilder(grpcServiceModel.serviceModuleName)
55+
.addJavadoc(
56+
"Install this module in the {@link $T @Singleton} server component\n",
57+
JavaxInject.singleton().type)
58+
.addJavadoc(
59+
"or in the subcomponent that implements {@link $T}.\n",
60+
grpcServiceModel.serviceDefinitionTypeName);
61+
grpcServiceModel.generatedAnnotation().ifPresent(serviceModule::addAnnotation);
62+
return serviceModule
6163
.addAnnotation(Dagger.module())
6264
.addModifiers(PUBLIC, FINAL)
6365
.addMethod(provideServiceDefinition())

java/dagger/grpc/server/processor/ProxyModuleGenerator.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,14 @@ final class ProxyModuleGenerator extends SourceGenerator {
5757

5858
@Override
5959
protected TypeSpec createType() {
60-
return classBuilder(grpcServiceModel.proxyModuleName)
61-
.addModifiers(PUBLIC, FINAL)
62-
.addJavadoc(
63-
"Install this module in the {@link $T @Singleton} server component.\n",
64-
JavaxInject.singleton().type)
65-
.addAnnotation(grpcServiceModel.generatedAnnotation())
60+
TypeSpec.Builder proxyModule =
61+
classBuilder(grpcServiceModel.proxyModuleName)
62+
.addModifiers(PUBLIC, FINAL)
63+
.addJavadoc(
64+
"Install this module in the {@link $T @Singleton} server component.\n",
65+
JavaxInject.singleton().type);
66+
grpcServiceModel.generatedAnnotation().ifPresent(proxyModule::addAnnotation);
67+
return proxyModule
6668
.addAnnotation(Dagger.module())
6769
.addMethod(provideServiceDefinitionContribution())
6870
.addMethod(provideServiceDefinitionFactory())

java/dagger/grpc/server/processor/ServiceDefinitionTypeGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ protected TypeSpec createType() {
4343
TypeSpec.Builder type =
4444
interfaceBuilder(grpcServiceModel.serviceDefinitionTypeName.simpleName())
4545
.addJavadoc("A component must implement this interface.\n")
46-
.addAnnotation(grpcServiceModel.generatedAnnotation())
4746
.addModifiers(PUBLIC);
47+
grpcServiceModel.generatedAnnotation().ifPresent(type::addAnnotation);
4848
type.addType(
4949
interfaceBuilder(grpcServiceModel.serviceDefinitionTypeFactoryName.simpleName())
5050
.addModifiers(PUBLIC, STATIC)

java/dagger/grpc/server/processor/UnscopedGrpcServiceModuleGenerator.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,15 @@ protected TypeSpec createType() {
4949
ClassName unscopedComponentFactory =
5050
grpcServiceModel.unscopedServiceModuleName.nestedClass(
5151
grpcServiceModel.serviceImplementationClassName.simpleName() + "ComponentFactory");
52-
return classBuilder(grpcServiceModel.unscopedServiceModuleName)
53-
.addJavadoc(
54-
"Install this module in the {@link $T @Singleton} server component\n",
55-
JavaxInject.singleton().type)
56-
.addJavadoc("if it implements {@link $T}.\n", grpcServiceModel.serviceDefinitionTypeName)
57-
.addAnnotation(grpcServiceModel.generatedAnnotation())
52+
TypeSpec.Builder unscopedServiceModule =
53+
classBuilder(grpcServiceModel.unscopedServiceModuleName)
54+
.addJavadoc(
55+
"Install this module in the {@link $T @Singleton} server component\n",
56+
JavaxInject.singleton().type)
57+
.addJavadoc(
58+
"if it implements {@link $T}.\n", grpcServiceModel.serviceDefinitionTypeName);
59+
grpcServiceModel.generatedAnnotation().ifPresent(unscopedServiceModule::addAnnotation);
60+
return unscopedServiceModule
5861
.addAnnotation(
5962
Dagger.module(grpcServiceModel.proxyModuleName, grpcServiceModel.serviceModuleName))
6063
.addModifiers(PUBLIC, ABSTRACT)

java/dagger/producers/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ java_library(
4343
],
4444
deps = [
4545
"//java/dagger:core",
46+
"//third_party:checker_framework_annotations",
4647
"//third_party:error_prone_annotations",
4748
"//third_party:guava",
48-
"//third_party:jsr305_annotations",
4949
"//third_party:jsr330_inject",
5050
],
5151
)

java/dagger/producers/Produced.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import com.google.errorprone.annotations.CheckReturnValue;
2323
import dagger.internal.Beta;
2424
import java.util.concurrent.ExecutionException;
25-
import javax.annotation.Nullable;
25+
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
2626

2727
/**
2828
* An interface that represents the result of a {@linkplain Producer production} of type {@code T},
@@ -66,7 +66,7 @@ public abstract class Produced<T> {
6666
public abstract int hashCode();
6767

6868
/** Returns a successful {@code Produced}, whose {@link #get} will return the given value. */
69-
public static <T> Produced<T> successful(@Nullable T value) {
69+
public static <T> Produced<T> successful(@NullableDecl T value) {
7070
return new Successful<T>(value);
7171
}
7272

@@ -79,13 +79,15 @@ public static <T> Produced<T> failed(Throwable throwable) {
7979
}
8080

8181
private static final class Successful<T> extends Produced<T> {
82-
@Nullable private final T value;
82+
@NullableDecl private final T value;
8383

84-
private Successful(@Nullable T value) {
84+
private Successful(@NullableDecl T value) {
8585
this.value = value;
8686
}
8787

88-
@Override public T get() {
88+
@Override
89+
@NullableDecl
90+
public T get() {
8991
return value;
9092
}
9193

java/dagger/producers/internal/AbstractProducer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
import dagger.producers.monitoring.ProducerToken;
2525
import dagger.producers.monitoring.ProductionComponentMonitor;
2626
import dagger.producers.monitoring.internal.Monitors;
27-
import javax.annotation.Nullable;
2827
import javax.inject.Provider;
28+
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
2929

3030
/**
3131
* An abstract {@link Producer} implementation that memoizes the result of its compute method.
@@ -35,7 +35,7 @@
3535
*/
3636
public abstract class AbstractProducer<T> implements Producer<T> {
3737
private final Provider<ProductionComponentMonitor> monitorProvider;
38-
@Nullable private final ProducerToken token;
38+
@NullableDecl private final ProducerToken token;
3939
private volatile ListenableFuture<T> instance = null;
4040
protected volatile ProducerMonitor monitor = null;
4141

@@ -44,7 +44,7 @@ protected AbstractProducer() {
4444
}
4545

4646
protected AbstractProducer(
47-
Provider<ProductionComponentMonitor> monitorProvider, @Nullable ProducerToken token) {
47+
Provider<ProductionComponentMonitor> monitorProvider, @NullableDecl ProducerToken token) {
4848
this.monitorProvider = checkNotNull(monitorProvider);
4949
this.token = token;
5050
}

java/dagger/producers/monitoring/ProducerToken.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020

2121
import dagger.producers.Produces;
2222
import java.util.Objects;
23-
import javax.annotation.Nullable;
23+
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
2424

2525
/** A token that represents an individual {@linkplain Produces producer method}. */
2626
public final class ProducerToken {
27-
@Nullable private final Class<?> classToken;
28-
@Nullable private final String methodName;
27+
@NullableDecl private final Class<?> classToken;
28+
@NullableDecl private final String methodName;
2929

30-
private ProducerToken(@Nullable Class<?> classToken, @Nullable String methodName) {
30+
private ProducerToken(@NullableDecl Class<?> classToken, @NullableDecl String methodName) {
3131
this.classToken = classToken;
3232
this.methodName = methodName;
3333
}

third_party/BUILD

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,11 @@ java_library(
234234
],
235235
)
236236

237+
java_library(
238+
name = "checker_framework_annotations",
239+
exports = ["@org_checkerframework_checker_compat_qual//jar"],
240+
)
241+
237242
# A _deploy.jar consisting of the java_librarys in https://github.com/google/kythe needed to build a
238243
# Kythe plugin
239244
# TODO(ronshapiro): replace this with a http_archive of the next release in

0 commit comments

Comments
 (0)