diff options
Diffstat (limited to 'java/dagger/internal/codegen/componentgenerator/ComponentGeneratorModule.java')
-rw-r--r-- | java/dagger/internal/codegen/componentgenerator/ComponentGeneratorModule.java | 28 |
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); + } } |