diff options
Diffstat (limited to 'java/dagger/hilt/processor/internal/root/RootMetadata.java')
-rw-r--r-- | java/dagger/hilt/processor/internal/root/RootMetadata.java | 29 |
1 files changed, 3 insertions, 26 deletions
diff --git a/java/dagger/hilt/processor/internal/root/RootMetadata.java b/java/dagger/hilt/processor/internal/root/RootMetadata.java index 8166d668e..55f6e9c4e 100644 --- a/java/dagger/hilt/processor/internal/root/RootMetadata.java +++ b/java/dagger/hilt/processor/internal/root/RootMetadata.java @@ -21,7 +21,6 @@ import static com.google.common.base.Suppliers.memoize; import static dagger.internal.codegen.extension.DaggerStreams.toImmutableSet; import androidx.room.compiler.processing.XConstructorElement; -import androidx.room.compiler.processing.XMethodElement; import androidx.room.compiler.processing.XProcessingEnv; import androidx.room.compiler.processing.XTypeElement; import com.google.common.base.Supplier; @@ -40,6 +39,7 @@ import javax.tools.Diagnostic; /** Contains metadata about the given hilt root. */ public final class RootMetadata { + private static final ClassName APPLICATION_CONTEXT_MODULE = ClassName.get("dagger.hilt.android.internal.modules", "ApplicationContextModule"); @@ -195,33 +195,10 @@ public final class RootMetadata { } private static boolean daggerCanConstruct(XTypeElement type) { - if (type.isKotlinObject()) { - // Treat Kotlin object modules as if Dagger can construct them (it technically can't, but it - // doesn't need to as it can use them since all their provision methods are static). + if (!Processors.requiresModuleInstance(type)) { return true; } - - return !isInnerClass(type) - && !hasNonDaggerAbstractMethod(type) - && (hasOnlyStaticProvides(type) || hasVisibleEmptyConstructor(type)); - } - - private static boolean isInnerClass(XTypeElement type) { - return type.isNested() && !type.isStatic(); - } - - private static boolean hasNonDaggerAbstractMethod(XTypeElement type) { - // TODO(erichang): Actually this isn't really supported b/28989613 - return type.getDeclaredMethods().stream() - .filter(XMethodElement::isAbstract) - .anyMatch(method -> !Processors.hasDaggerAbstractMethodAnnotation(method)); - } - - private static boolean hasOnlyStaticProvides(XTypeElement type) { - // TODO(erichang): Check for @Produces too when we have a producers story - return type.getDeclaredMethods().stream() - .filter(method -> method.hasAnnotation(ClassNames.PROVIDES)) - .allMatch(XMethodElement::isStatic); + return hasVisibleEmptyConstructor(type) && (!type.isNested() || type.isStatic()); } private static boolean hasVisibleEmptyConstructor(XTypeElement type) { |