summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorweijiaxu <weijiaxu@google.com>2018-04-18 16:22:33 -0700
committerCopybara-Service <copybara-piper@google.com>2018-04-18 16:51:04 -0700
commit560eb125b437fef71e624327a024853dd9bc06ea (patch)
tree07e3197d0a4f8759eff7de0f528829c13d9dfc07
parentad11c3f4f2063d216422f2405ce92639afebf071 (diff)
Add support for adding module in the same class annotated with @DialerRootComponent.
Test: local test. PiperOrigin-RevId: 193435828 Change-Id: Ieb2be7c7d3e2861c0d2f32f1461535e439dbcb1a
-rw-r--r--java/com/android/dialer/inject/demo/DemoDaggerApplication.java2
-rw-r--r--java/com/android/dialer/inject/demo/DemoModule.java4
-rw-r--r--java/com/android/dialer/inject/demo/DemoObject.java16
-rw-r--r--java/com/android/dialer/inject/demo/DemoSubcomponent.java3
-rw-r--r--java/com/android/dialer/rootcomponentgenerator/RootComponentGeneratingStep.java22
5 files changed, 33 insertions, 14 deletions
diff --git a/java/com/android/dialer/inject/demo/DemoDaggerApplication.java b/java/com/android/dialer/inject/demo/DemoDaggerApplication.java
index 0c13dbb48..ab40eca1b 100644
--- a/java/com/android/dialer/inject/demo/DemoDaggerApplication.java
+++ b/java/com/android/dialer/inject/demo/DemoDaggerApplication.java
@@ -50,6 +50,6 @@ public final class DemoDaggerApplication extends Application implements HasRootC
public void onCreate() {
super.onCreate();
- DemoSubcomponent.get(this).demoObject();
+ DemoSubcomponent.get(this).demoObjects();
}
}
diff --git a/java/com/android/dialer/inject/demo/DemoModule.java b/java/com/android/dialer/inject/demo/DemoModule.java
index 40cd6fea1..9917c7dbd 100644
--- a/java/com/android/dialer/inject/demo/DemoModule.java
+++ b/java/com/android/dialer/inject/demo/DemoModule.java
@@ -20,6 +20,7 @@ import com.android.dialer.inject.DialerVariant;
import com.android.dialer.inject.InstallIn;
import dagger.Module;
import dagger.Provides;
+import dagger.multibindings.IntoSet;
/** Module for demo dagger application. */
@Module
@@ -29,7 +30,8 @@ public final class DemoModule {
private DemoModule() {}
@Provides
+ @IntoSet
static DemoObject provide() {
- return new DemoObject("prod");
+ return DemoObject.create("prod");
}
}
diff --git a/java/com/android/dialer/inject/demo/DemoObject.java b/java/com/android/dialer/inject/demo/DemoObject.java
index c6d48a14d..3c3862124 100644
--- a/java/com/android/dialer/inject/demo/DemoObject.java
+++ b/java/com/android/dialer/inject/demo/DemoObject.java
@@ -16,17 +16,15 @@
package com.android.dialer.inject.demo;
-/** Object used to demonstrate dagger bindings. */
-class DemoObject {
+import com.google.auto.value.AutoValue;
- private final String value;
+/** Object used to demonstrate dagger bindings. */
+@AutoValue
+abstract class DemoObject {
- DemoObject(String value) {
- this.value = value;
- }
+ abstract String value();
- @Override
- public String toString() {
- return value;
+ static DemoObject create(String value) {
+ return new AutoValue_DemoObject(value);
}
}
diff --git a/java/com/android/dialer/inject/demo/DemoSubcomponent.java b/java/com/android/dialer/inject/demo/DemoSubcomponent.java
index ff000aaa9..3e4dd66bb 100644
--- a/java/com/android/dialer/inject/demo/DemoSubcomponent.java
+++ b/java/com/android/dialer/inject/demo/DemoSubcomponent.java
@@ -20,12 +20,13 @@ import android.content.Context;
import com.android.dialer.inject.HasRootComponent;
import com.android.dialer.inject.IncludeInDialerRoot;
import dagger.Subcomponent;
+import java.util.Set;
/** Subcomponent for the demo dagger application. */
@Subcomponent
public abstract class DemoSubcomponent {
- abstract DemoObject demoObject();
+ abstract Set<DemoObject> demoObjects();
public static DemoSubcomponent get(Context context) {
return ((HasComponent) ((HasRootComponent) context.getApplicationContext()).component())
diff --git a/java/com/android/dialer/rootcomponentgenerator/RootComponentGeneratingStep.java b/java/com/android/dialer/rootcomponentgenerator/RootComponentGeneratingStep.java
index 61c326a3c..4c4e6ee8d 100644
--- a/java/com/android/dialer/rootcomponentgenerator/RootComponentGeneratingStep.java
+++ b/java/com/android/dialer/rootcomponentgenerator/RootComponentGeneratingStep.java
@@ -19,6 +19,7 @@ package com.android.dialer.rootcomponentgenerator;
import static com.google.auto.common.AnnotationMirrors.getAnnotationValue;
import static com.google.auto.common.MoreElements.getAnnotationMirror;
import static com.google.auto.common.MoreElements.isAnnotationPresent;
+import static javax.tools.Diagnostic.Kind.ERROR;
import com.android.dialer.inject.DialerRootComponent;
import com.android.dialer.inject.DialerVariant;
@@ -61,14 +62,22 @@ final class RootComponentGeneratingStep implements ProcessingStep {
@Override
public Set<? extends Class<? extends Annotation>> annotations() {
- return ImmutableSet.of(DialerRootComponent.class);
+ return ImmutableSet.of(DialerRootComponent.class, InstallIn.class, IncludeInDialerRoot.class);
}
@Override
public Set<? extends Element> process(
SetMultimap<Class<? extends Annotation>, Element> elementsByAnnotation) {
for (Element element : elementsByAnnotation.get(DialerRootComponent.class)) {
- generateRootComponent(MoreElements.asType(element));
+ // defer root components to the next round in case where the current build target contains
+ // elements annotated with @InstallIn. Annotation processor cannot detect metadata files
+ // generated in the same round and the metadata is accessible in the next round.
+ if (elementsByAnnotation.containsKey(InstallIn.class)
+ || elementsByAnnotation.containsKey(IncludeInDialerRoot.class)) {
+ return elementsByAnnotation.get(DialerRootComponent.class);
+ } else {
+ generateRootComponent(MoreElements.asType(element));
+ }
}
return Collections.emptySet();
}
@@ -124,6 +133,15 @@ final class RootComponentGeneratingStep implements ProcessingStep {
Class<? extends Annotation> annotation, MetadataProcessor metadataProcessor) {
PackageElement cachePackage =
processingEnv.getElementUtils().getPackageElement(RootComponentUtils.METADATA_PACKAGE_NAME);
+ if (cachePackage == null) {
+ processingEnv
+ .getMessager()
+ .printMessage(
+ ERROR,
+ "Metadata haven't been generated! do you forget to add modules "
+ + "or components in dependency of dialer root?");
+ return;
+ }
for (Element element : cachePackage.getEnclosedElements()) {
Optional<AnnotationMirror> metadataAnnotation =
getAnnotationMirror(element, RootComponentGeneratorMetadata.class);