Delegate kotlin.* classes to parent in RecipeClassLoader#7695
Merged
Conversation
When both the parent and a recipe jar ship kotlin-stdlib, types like kotlin.jvm.functions.Function1 get defined by both loaders. Jackson (parent-loaded) interacting with jackson-module-kotlin from the recipe jar then trips a LinkageError on loader-constraint violations. Mirror the existing slf4j/jackson rule and delegate kotlin.* to the parent, with the existing fallback to the child when the parent lacks the class. See moderneinc/customer-requests#2372.
nmck257
approved these changes
May 15, 2026
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
When both the parent and a recipe jar ship kotlin-stdlib, types like
kotlin.jvm.functions.Function1get defined by both loaders, and Jackson (parent-loaded) interacting withjackson-module-kotlinfrom the recipe jar trips aLinkageErroron loader-constraint violations. Mirror the existing slf4j/jackson rule and delegatekotlin.*to the parent, with the existing fallback to the child when the parent lacks the class.Test plan
kotlinClassesShouldDelegateToParenttest: parent and child both definekotlin.jvm.functions.Function1; asserts the parent's copy wins.kotlinClassesFallBackToChildWhenParentLacksThemtest: parent has no kotlin classes; the recipe loader still resolves the class from the child../gradlew :rewrite-core:test --tests RecipeClassLoaderTestis green.