Make sure all processing steps defer elements if TypeNotPresentException is thrown.
Fixes https://github.com/google/dagger/issues/1311
RELNOTES=Make sure all processing steps defer elements if `TypeNotPresentException` is thrown.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=223400457
diff --git a/java/dagger/internal/codegen/MultibindingAnnotationsProcessingStep.java b/java/dagger/internal/codegen/MultibindingAnnotationsProcessingStep.java
index 3afa469..0535062 100644
--- a/java/dagger/internal/codegen/MultibindingAnnotationsProcessingStep.java
+++ b/java/dagger/internal/codegen/MultibindingAnnotationsProcessingStep.java
@@ -17,12 +17,10 @@
package dagger.internal.codegen;
import static dagger.internal.codegen.DaggerElements.getAnnotationMirror;
-import static javax.lang.model.util.ElementFilter.methodsIn;
+import static javax.tools.Diagnostic.Kind.ERROR;
-import com.google.auto.common.BasicAnnotationProcessor.ProcessingStep;
+import com.google.auto.common.MoreElements;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Multimaps;
-import com.google.common.collect.SetMultimap;
import dagger.multibindings.ElementsIntoSet;
import dagger.multibindings.IntoMap;
import dagger.multibindings.IntoSet;
@@ -30,21 +28,21 @@
import java.util.Set;
import javax.annotation.processing.Messager;
import javax.inject.Inject;
-import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
-import javax.tools.Diagnostic.Kind;
/**
* Processing step that verifies that {@link IntoSet}, {@link ElementsIntoSet} and {@link IntoMap}
* are not present on non-binding methods.
*/
-final class MultibindingAnnotationsProcessingStep implements ProcessingStep {
+final class MultibindingAnnotationsProcessingStep
+ extends TypeCheckingProcessingStep<ExecutableElement> {
private final AnyBindingMethodValidator anyBindingMethodValidator;
private final Messager messager;
@Inject
MultibindingAnnotationsProcessingStep(
AnyBindingMethodValidator anyBindingMethodValidator, Messager messager) {
+ super(MoreElements::asExecutable);
this.anyBindingMethodValidator = anyBindingMethodValidator;
this.messager = messager;
}
@@ -55,22 +53,16 @@
}
@Override
- public Set<Element> process(
- SetMultimap<Class<? extends Annotation>, Element> elementsByAnnotation) {
- Multimaps.asMap(elementsByAnnotation)
- .forEach(
- (annotation, elements) -> {
- for (ExecutableElement method : methodsIn(elements)) {
- if (!anyBindingMethodValidator.isBindingMethod(method)) {
- messager.printMessage(
- Kind.ERROR,
- "Multibinding annotations may only be on "
- + "@Provides, @Produces, or @Binds methods",
- method,
- getAnnotationMirror(method, annotation).get());
- }
- }
- });
- return ImmutableSet.of();
+ protected void process(
+ ExecutableElement method, ImmutableSet<Class<? extends Annotation>> annotations) {
+ if (!anyBindingMethodValidator.isBindingMethod(method)) {
+ annotations.forEach(
+ annotation ->
+ messager.printMessage(
+ ERROR,
+ "Multibinding annotations may only be on @Provides, @Produces, or @Binds methods",
+ method,
+ getAnnotationMirror(method, annotation).get()));
+ }
}
}