Make compileProtoPath variant selection criteria tighter #489
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #391
The existing
compileProtoPath
, which is used to resolve dependencies inherited fromcompileOnly
andimplementation
, accept dependencies with any Usage attribute. This could lead to ambiguous variant selection problem if the dependency exposes more than one variants with the same LibraryElements compatible with "resources" (specified by compileProtoPath) but with different Usages. It doesn't matter which variant is selected, as long as the variant has "resources" element. Since compileProtoPath inherits from compileOnly and implementation, it won't go wrong if we just select what compileOnly/implementation would select.This doesn't seem to be a unbeatable solution that completely prevents ambiguous variant selection problem, as there are still other attributes (e.g., dependency with variants targeting on different JVM version/environment may still cause problem). Extracting protos from dependencies resolved by
compileClasspath
may improve it, if that doesn't have unknown consequences that make this Java-specific.