From 560eb125b437fef71e624327a024853dd9bc06ea Mon Sep 17 00:00:00 2001 From: weijiaxu Date: Wed, 18 Apr 2018 16:22:33 -0700 Subject: Add support for adding module in the same class annotated with @DialerRootComponent. Test: local test. PiperOrigin-RevId: 193435828 Change-Id: Ieb2be7c7d3e2861c0d2f32f1461535e439dbcb1a --- .../RootComponentGeneratingStep.java | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'java/com/android/dialer/rootcomponentgenerator') 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> annotations() { - return ImmutableSet.of(DialerRootComponent.class); + return ImmutableSet.of(DialerRootComponent.class, InstallIn.class, IncludeInDialerRoot.class); } @Override public Set process( SetMultimap, 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 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 metadataAnnotation = getAnnotationMirror(element, RootComponentGeneratorMetadata.class); -- cgit v1.2.3