Skip to content

Commit

Permalink
Add extra debug information for GitHub issues #4137 and #4138.
Browse files Browse the repository at this point in the history
See

  * #4138
  * #4137

RELNOTES=N/A
PiperOrigin-RevId: 583068885
  • Loading branch information
bcorso authored and Dagger Team committed Nov 17, 2023
1 parent 244b171 commit 492baa4
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import dagger.internal.codegen.base.ComponentCreatorKind;
import dagger.internal.codegen.javapoet.TypeNames;
import dagger.internal.codegen.model.DependencyRequest;
import dagger.internal.codegen.xprocessing.XElements;
import java.util.List;

/**
Expand Down Expand Up @@ -161,7 +162,12 @@ public static ComponentCreatorDescriptor create(
for (XMethodElement method : getAllUnimplementedMethods(creator)) {
XMethodType resolvedMethodType = method.asMemberOf(creator.getType());
if (isSubtype(componentType, resolvedMethodType.getReturnType())) {
verify(factoryMethod == null); // validation should have ensured there's only 1.
verify(
factoryMethod == null,
"Expected a single factory method for %s but found multiple: [%s, %s]",
XElements.toStableString(creator),
XElements.toStableString(factoryMethod),
XElements.toStableString(method));
factoryMethod = method;
} else {
XExecutableParameterElement parameter = getOnlyElement(method.getParameters());
Expand All @@ -171,7 +177,10 @@ public static ComponentCreatorDescriptor create(
method);
}
}
verify(factoryMethod != null); // validation should have ensured this.
verify(
factoryMethod != null,
"Expected a single factory method for %s but found none.",
XElements.toStableString(creator));

ImmutableSetMultimap.Builder<ComponentRequirement, XExecutableParameterElement>
factoryParameters = ImmutableSetMultimap.builder();
Expand Down
19 changes: 15 additions & 4 deletions java/dagger/internal/codegen/binding/InjectionAnnotations.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,13 @@
import static androidx.room.compiler.processing.XElementKt.isMethodParameter;
import static androidx.room.compiler.processing.XElementKt.isTypeElement;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.Iterables.getOnlyElement;
import static dagger.internal.codegen.binding.SourceFiles.factoryNameForElement;
import static dagger.internal.codegen.binding.SourceFiles.memberInjectedFieldSignatureForVariable;
import static dagger.internal.codegen.binding.SourceFiles.membersInjectorNameForType;
import static dagger.internal.codegen.extension.DaggerCollectors.onlyElement;
import static dagger.internal.codegen.extension.DaggerCollectors.toOptional;
import static dagger.internal.codegen.extension.DaggerStreams.toImmutableList;
import static dagger.internal.codegen.extension.DaggerStreams.toImmutableSet;
import static dagger.internal.codegen.xprocessing.XElements.asField;
import static dagger.internal.codegen.xprocessing.XElements.asMethod;
Expand All @@ -42,14 +43,17 @@
import androidx.room.compiler.processing.XFieldElement;
import androidx.room.compiler.processing.XProcessingEnv;
import androidx.room.compiler.processing.XTypeElement;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.squareup.javapoet.ClassName;
import dagger.internal.codegen.base.DaggerSuperficialValidation;
import dagger.internal.codegen.base.ElementFormatter;
import dagger.internal.codegen.compileroption.CompilerOptions;
import dagger.internal.codegen.javapoet.TypeNames;
import dagger.internal.codegen.kotlin.KotlinMetadataUtil;
import dagger.internal.codegen.model.DaggerAnnotation;
import dagger.internal.codegen.model.Scope;
import dagger.internal.codegen.xprocessing.XAnnotations;
import java.util.Optional;
import java.util.stream.Stream;
import javax.inject.Inject;
Expand Down Expand Up @@ -129,13 +133,20 @@ private Optional<ImmutableSet<Scope>> getScopesWithMetadata(XElement element) {
if (scopeName.isEmpty()) {
return Optional.of(ImmutableSet.of());
}
XAnnotation scopeAnnotation =
ImmutableList<XAnnotation> scopeAnnotations =
element.getAllAnnotations().stream()
.filter(
annotation ->
scopeName.contentEquals(
annotation.getType().getTypeElement().getQualifiedName()))
.collect(onlyElement());
.collect(toImmutableList());
checkState(
scopeAnnotations.size() == 1,
"Expected %s to have a scope annotation for %s but found: %s",
ElementFormatter.elementToString(element),
scopeName,
scopeAnnotations.stream().map(XAnnotations::toStableString).collect(toImmutableList()));
XAnnotation scopeAnnotation = getOnlyElement(scopeAnnotations);
// Do superficial validation before we convert to a Scope, otherwise the @Scope annotation may
// appear to be missing from the annotation if it's no longer on the classpath.
superficialValidation.validateAnnotationTypeOf(element, scopeAnnotation);
Expand Down Expand Up @@ -170,7 +181,7 @@ private Optional<ClassName> getGeneratedNameForScopeMetadata(XElement element) {
return Optional.empty();
}

/*
/**
* Returns the qualifier on the given element if it exists.
*
* <p>The {@code QualifierMetadata} is used to avoid superficial validation on unnecessary
Expand Down

0 comments on commit 492baa4

Please sign in to comment.