aboutsummaryrefslogtreecommitdiff
path: root/java/dagger/internal/codegen/componentgenerator/ComponentGeneratorModule.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/dagger/internal/codegen/componentgenerator/ComponentGeneratorModule.java')
-rw-r--r--java/dagger/internal/codegen/componentgenerator/ComponentGeneratorModule.java28
1 files changed, 20 insertions, 8 deletions
diff --git a/java/dagger/internal/codegen/componentgenerator/ComponentGeneratorModule.java b/java/dagger/internal/codegen/componentgenerator/ComponentGeneratorModule.java
index 179c411e4..a071eaeb2 100644
--- a/java/dagger/internal/codegen/componentgenerator/ComponentGeneratorModule.java
+++ b/java/dagger/internal/codegen/componentgenerator/ComponentGeneratorModule.java
@@ -16,9 +16,12 @@
package dagger.internal.codegen.componentgenerator;
+import androidx.room.compiler.processing.XProcessingEnv;
import dagger.Binds;
import dagger.Module;
+import dagger.Provides;
import dagger.internal.codegen.base.SourceFileGenerator;
+import dagger.internal.codegen.base.SourceFileHjarGenerator;
import dagger.internal.codegen.binding.BindingGraph;
import dagger.internal.codegen.binding.ComponentDescriptor;
@@ -29,14 +32,23 @@ public interface ComponentGeneratorModule {
@Binds
abstract SourceFileGenerator<BindingGraph> componentGenerator(ComponentGenerator generator);
- // The HjarSourceFileGenerator wrapper first generates the entire TypeSpec before stripping out
+ // The SourceFileHjarGenerator wrapper first generates the entire TypeSpec before stripping out
// things that aren't needed for the hjar. However, this can be really expensive for the component
// because it is usually the most expensive file to generate, and most of its content is not
- // needed in the hjar. Thus, instead of wrapping the ComponentGenerator in HjarSourceFileGenerator
- // we provide a completely separate processing step, ComponentHjarProcessingStep, and generator,
- // ComponentHjarGenerator, for when generating hjars for components, which can avoid generating
- // the parts of the component that would have been stripped out by the HjarSourceFileGenerator.
- @Binds
- abstract SourceFileGenerator<ComponentDescriptor> componentHjarGenerator(
- ComponentHjarGenerator hjarGenerator);
+ // needed in the hjar. Thus, we provide a completely separate processing step,
+ // ComponentHjarProcessingStep and ComponentHjarGenerator, for when generating hjars for
+ // components, which can avoid generating the parts of the component that would have been stripped
+ // out by the HjarSourceFileGenerator anyway. Note that we still wrap ComponentHjarGenerator in
+ // SourceFileHjarGenerator because it adds in constructor and method bodies that are needed for
+ // Javac to compile correctly, e.g. super(...) calls in the constructor and return statements in
+ // methods.
+ @Provides
+ static SourceFileGenerator<ComponentDescriptor> componentHjarGenerator(
+ XProcessingEnv processingEnv,
+ ComponentHjarGenerator hjarGenerator) {
+ // Note: technically the ComponentHjarGenerator is already in hjar form, but the
+ // SourceFileHjarGenerator wrapper adds in proper method bodies, e.g. constructors that require
+ // super() calls or methods that require return statements.
+ return SourceFileHjarGenerator.wrap(hjarGenerator, processingEnv);
+ }
}