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/BindingMethodProcessingStep.java b/java/dagger/internal/codegen/BindingMethodProcessingStep.java
index 50c2081..e6c4f8e 100644
--- a/java/dagger/internal/codegen/BindingMethodProcessingStep.java
+++ b/java/dagger/internal/codegen/BindingMethodProcessingStep.java
@@ -17,20 +17,17 @@
package dagger.internal.codegen;
import static com.google.common.base.Preconditions.checkArgument;
-import static javax.lang.model.util.ElementFilter.methodsIn;
-import com.google.auto.common.BasicAnnotationProcessor.ProcessingStep;
+import com.google.auto.common.MoreElements;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.SetMultimap;
import java.lang.annotation.Annotation;
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;
/** A step that validates all binding methods that were not validated while processing modules. */
-final class BindingMethodProcessingStep implements ProcessingStep {
+final class BindingMethodProcessingStep extends TypeCheckingProcessingStep<ExecutableElement> {
private final Messager messager;
private final AnyBindingMethodValidator anyBindingMethodValidator;
@@ -38,6 +35,7 @@
@Inject
BindingMethodProcessingStep(
Messager messager, AnyBindingMethodValidator anyBindingMethodValidator) {
+ super(MoreElements::asExecutable);
this.messager = messager;
this.anyBindingMethodValidator = anyBindingMethodValidator;
}
@@ -48,18 +46,15 @@
}
@Override
- public Set<Element> process(
- SetMultimap<Class<? extends Annotation>, Element> elementsByAnnotation) {
- for (ExecutableElement method : methodsIn(elementsByAnnotation.values())) {
- checkArgument(
- anyBindingMethodValidator.isBindingMethod(method),
- "%s is not annotated with any of %s",
- method,
- annotations());
- if (!anyBindingMethodValidator.wasAlreadyValidated(method)) {
- anyBindingMethodValidator.validate(method).printMessagesTo(messager);
- }
+ protected void process(
+ ExecutableElement method, ImmutableSet<Class<? extends Annotation>> annotations) {
+ checkArgument(
+ anyBindingMethodValidator.isBindingMethod(method),
+ "%s is not annotated with any of %s",
+ method,
+ annotations());
+ if (!anyBindingMethodValidator.wasAlreadyValidated(method)) {
+ anyBindingMethodValidator.validate(method).printMessagesTo(messager);
}
- return ImmutableSet.of();
}
}