Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import org.openrewrite.toml.tree.Space
import org.openrewrite.toml.tree.Toml
import pl.allegro.tech.allwrite.recipes.toml.Builders.kv
import pl.allegro.tech.allwrite.recipes.toml.Builders.literal
import pl.allegro.tech.allwrite.recipes.toml.asString
import pl.allegro.tech.allwrite.recipes.toml.name
import pl.allegro.tech.allwrite.recipes.toml.stringKey
import pl.allegro.tech.allwrite.recipes.toml.stringValue
Expand Down Expand Up @@ -33,10 +34,25 @@ internal class TomlVersionCatalogDependencyRewriter(
VERSION_CATALOG_TABLE_LIBS -> rewriteLibraryEntry(table, keyValue)
VERSION_CATALOG_TABLE_VERSIONS -> rewriteVersionEntry(keyValue)
VERSION_CATALOG_TABLE_PLUGINS -> rewritePluginEntry(keyValue)
else -> keyValue
else -> super.visitKeyValue(keyValue, p)
}
}

override fun visitLiteral(literal: Toml.Literal, p: ExecutionContext): Toml.Literal {
val visited = super.visitLiteral(literal, p)
val table = cursor.firstEnclosing(Toml.Table::class.java) ?: return visited
if (table.name() != VERSION_CATALOG_TABLE_BUNDLES) return visited
val replacement = plan.bundleAliasReplacements[visited.asString()] ?: return visited
return Toml.Literal(
visited.id,
visited.prefix,
visited.markers,
visited.type,
"\"$replacement\"",
replacement,
)
}

override fun visitTable(table: Toml.Table, p: ExecutionContext): Toml.Table {
val visited = super.visitTable(table, p)
if (visited.name() != VERSION_CATALOG_TABLE_VERSIONS) return visited
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ internal data class TomlVersionCatalogRewritePlan(
val versionRefOverrides: Map<String, String>,
val versionRefUpdates: Map<String, String>,
val versionEntriesToAdd: Map<String, String>,
val bundleAliasReplacements: Map<String, String>,
)

internal class TomlVersionCatalogRewritePlanner(
Expand All @@ -49,6 +50,7 @@ internal class TomlVersionCatalogRewritePlanner(
val versionRefOverrides = mutableMapOf<String, String>()
val versionRefUpdates = mutableMapOf<String, String>()
val versionEntriesToAdd = mutableMapOf<String, String>()
val bundleAliasReplacements = mutableMapOf<String, String>()

catalog.libraries
.filter { entry ->
Expand All @@ -62,6 +64,9 @@ internal class TomlVersionCatalogRewritePlanner(
.forEach { entry ->
val entryName = entry.keyValue.stringKey() ?: return@forEach
val library = entry.library
target.targetEntryName(entryName)
.takeIf { it != entryName }
?.let { bundleAliasReplacements[entryName] = it }
val versionRef = (library.version as? VersionRef)?.ref ?: return@forEach
val version = target.newVersion ?: return@forEach
val targetRef = target.targetVersionRef(entryName)
Expand Down Expand Up @@ -100,6 +105,7 @@ internal class TomlVersionCatalogRewritePlanner(
versionRefOverrides,
versionRefUpdates,
versionEntriesToAdd,
bundleAliasReplacements,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,92 @@ class SpringBoot4_0Test : RewriteTest {
)
}

@Test
fun `should upgrade Testcontainers module aliases in version catalog bundles`() {
rewriteRun(
toml(
before = """
[libraries]
junit-jupiter = { group = "org.testcontainers", name = "junit-jupiter" }

[bundles]
testcontainers = [
"junit-jupiter"
]
""".trimIndent(),
after = """
[libraries]
testcontainers-junit-jupiter = { group = "org.testcontainers", name = "testcontainers-junit-jupiter" }

[bundles]
testcontainers = [
"testcontainers-junit-jupiter"
]
""".trimIndent(),
) { path("gradle/libs.versions.toml") },
)
}

@Test
fun `should upgrade Testcontainers module aliases in every bundle`() {
rewriteRun(
toml(
before = """
[libraries]
junit-jupiter = { module = "org.testcontainers:junit-jupiter" }

[bundles]
testcontainers = [
"junit-jupiter",
"unrelated-library",
]
integration = [
"junit-jupiter",
]
""".trimIndent(),
after = """
[libraries]
testcontainers-junit-jupiter = { group = "org.testcontainers", name = "testcontainers-junit-jupiter" }

[bundles]
testcontainers = [
"testcontainers-junit-jupiter",
"unrelated-library",
]
integration = [
"testcontainers-junit-jupiter",
]
""".trimIndent(),
) { path("gradle/libs.versions.toml") },
)
}

@Test
fun `should preserve custom Testcontainers library aliases in bundles`() {
rewriteRun(
toml(
before = """
[libraries]
testcontainers-junit = { group = "org.testcontainers", name = "junit-jupiter" }

[bundles]
testcontainers = [
"testcontainers-junit",
]
""".trimIndent(),
after = """
[libraries]
testcontainers-junit = { group = "org.testcontainers", name = "testcontainers-junit-jupiter" }

[bundles]
testcontainers = [
"testcontainers-junit",
]
""".trimIndent(),
) { path("gradle/libs.versions.toml") },
)
}

@Test
fun `should add Any bounds to Spring Data repository type parameters`() {
rewriteRun(
Expand Down
Loading