Improve error message when Dagger compiler not run over module - #5245
Improve error message when Dagger compiler not run over module#5245arimu1 wants to merge 1 commit into
Conversation
When a @module from a dependency is missing its generated *Factory types (because dagger-compiler/KSP was not applied to that library), report a clear error instead of letting javac fail with a vague "does not exist" message on the generated component. Modules being compiled in the current compilation are skipped, since their factories are generated in-round by ModuleProcessingStep and may not yet be visible via findTypeElement. Fixes google#5146
| */ | ||
| public boolean isModuleFromCurrentCompilation(XTypeElement module) { | ||
| return knownModules.contains(module) || knownModuleNames.contains(module.getQualifiedName()); | ||
| } |
There was a problem hiding this comment.
Why do you need to check both knownModules and knowModuleNames?
|
@bcorso Thanks for the review.
If you prefer a single source of truth, I can drop the |
Thanks, yeah, I noticed this too while reviewing your change and started a fix to switch over to
Yes, but you can leave it as is since I'll be submitting a separate change to fix the Also, just a heads up, GitHub is not Dagger's source of truth so we can't submit this PR directly. I will need to copy it into Google's repo and then merge the changes into GitHub in a separate PR (though I will attribute the change to you so you get credit). |
Summary
When a
@Modulelives in a dependency that was compiled without the Dagger annotation processor / KSP plugin, generated component code references missing*Factorytypes and the user only sees a vague javac "does not exist" error.This PR detects that situation during component validation and reports a clear diagnostic:
Approach (aligned with option 1 from #5146, using the existing
knownModulesset so it works for both Javac and KSP):ModuleValidator.addKnownModules(as before).@Provides/@Producesfactory exists on the classpath.ModuleProcessingStepand may not yet be visible viafindTypeElement.@Binds-only modules do not require factories and are unaffected.Fixes #5146
Test plan
bazel test //javatests/dagger/internal/codegen:ModuleMissingFactoryErrorTestbazel test //javatests/dagger/internal/codegen:AssistedFactoryTestbazel test //javatests/dagger/internal/codegen:ModuleValidationTest