in build-systems/src/commonMain/kotlin/org/jetbrains/packagesearch/maven/PomResolver.kt [45:107]
public fun defaultPomProvider(
repositories: List<MavenUrlBuilder> = listOf(GoogleMavenCentralMirror),
xml: XML = defaultXml(),
httpClient: HttpClient = HttpClientMavenPomProvider.defaultHttpClient(xml),
): MavenPomProvider =
HttpClientMavenPomProvider(
mirrors = repositories,
httpClient = httpClient,
xml = xml,
)
/**
* Regular expression used for pattern matching and extraction.
* This regex pattern is used to match and extract substrings in the format `${...}` from a string.
* It is used in the `String.resolve()` function to resolve property references.
*
* Regex pattern: `\$\{(.*?)\}`
*/
private val PROPERTY_REFERENCE_REGEX = Regex("""\$\{(.+?)}""")
}
/**
* Retrieves the Project Object Model (POM) for the specified groupId, artifactId, and version.
*
* @param groupId The groupId of the project.
* @param artifactId The artifactId of the project.
* @param version The version of the project.
* @return The retrieved ProjectObjectModel or null if it doesn't exist.
*/
public suspend fun getPom(
groupId: String,
artifactId: String,
version: String,
): ProjectObjectModel? =
pomProvider
.getPomFromMultipleRepositories(groupId, artifactId, version)
.firstOrNull()
?.let { resolve(it) }
/**
* Retrieves the Project Object Model (POM) for the specified parent.
*
* @param parent The Parent object containing the groupId, artifactId, version, and optional relativePath.
* @return The retrieved ProjectObjectModel or null if it doesn't exist.
*/
private suspend fun getPom(parent: Parent) = getPom(parent.groupId, parent.artifactId, parent.version)
/**
* Resolves the Project Object Model (POM) using the provided POM text.
*
* @param pomText The POM text to be resolved.
* @return The resolved ProjectObjectModel.
*/
public suspend fun resolve(pomText: String): ProjectObjectModel =
resolve(xml.decodeFromString<ProjectObjectModel>(POM_XML_NAMESPACE, pomText))
/**
* Resolves the provided Project Object Model (POM) by merging it with its parent POMs and resolving the property values.
*
* @param model The Project Object Model to be resolved.
* @return The resolved Project Object Model.
*/
public suspend fun resolve(model: ProjectObjectModel): ProjectObjectModel {