Pass resolvers to JS/Python RPC so PrepareRecipe callbacks can resolve Maven recipes#6742
Merged
jkschneider merged 6 commits intomainfrom Feb 18, 2026
Merged
Conversation
When the PrepareRecipe handler finds a recipe in the marketplace but listing.prepare() throws because no resolver matches the bundle's ecosystem (e.g., a "maven"-bundled recipe when only a "runtime" resolver is available), the handler now catches the exception and falls through to RecipeLoader. This allows recipes that are already on the classpath to be loaded by class name instead of failing outright. This fixes recipe runs on Node.js repositories where JS recipes use preconditions like usesType() or usesMethod() that call back to the Java side to prepare Java recipes. Without a Maven resolver wired into the RPC endpoint, these callbacks previously failed with "No available resolver for 'maven' ecosystem".
Both RPC classes were calling the 2-arg RewriteRpc constructor which passes emptyList() for resolvers. When a JS/Python recipe's preconditions reference Java recipes bundled under the "maven" ecosystem, the PrepareRecipe callback fails with "No available resolver for 'maven' ecosystem". Add a resolvers field to both Builders (defaulting to emptyList() for backward compatibility) and pass them through to the 3-arg super constructor.
shanman190
reviewed
Feb 13, 2026
c93359d to
0b9cc6e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
UsesType,UsesMethod), the RPC process calls back to Java viaPrepareRecipe. These Java recipes are bundled under the"maven"ecosystem, butJavaScriptRewriteRpcandPythonRewriteRpcwere calling the 2-argRewriteRpcconstructor which passesemptyList()for resolvers — causingIllegalStateException("No available resolver for 'maven' ecosystem").resolversfield to bothJavaScriptRewriteRpc.BuilderandPythonRewriteRpc.Builder(defaulting toemptyList()for backward compatibility) and pass through to the 3-arg super constructor.RewriteRpc.PrepareRecipehandler: iflisting.prepare()throwsIllegalStateException(resolver missing), fall through toRecipeLoaderfor recipes already on the classpath.Test plan
RewriteRpcTestpassesprepareRecipeFallsBackToRecipeLoaderWhenResolverMissingverifies the fallback