From a4de85da1363594aad8264fa523195e9a3b1cd55 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 5 Aug 2020 18:15:36 +0300 Subject: [PATCH] [Gradle, JS] Right wildcard range ^KT-41054 fixed --- .../gradle/targets/js/npm/NpmRangeVisitor.kt | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmRangeVisitor.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmRangeVisitor.kt index dcff285fb01..8a853362290 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmRangeVisitor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmRangeVisitor.kt @@ -9,6 +9,7 @@ import com.github.gundy.semver4j.generated.grammar.NodeSemverExpressionBaseVisit import com.github.gundy.semver4j.generated.grammar.NodeSemverExpressionParser import com.github.gundy.semver4j.model.Version import org.antlr.v4.runtime.tree.TerminalNode +import org.gradle.api.GradleException import org.jetbrains.kotlin.gradle.utils.toListOrEmpty class NpmRangeVisitor : NodeSemverExpressionBaseVisitor>() { @@ -18,9 +19,24 @@ class NpmRangeVisitor : NodeSemverExpressionBaseVisitor>() { override fun visitWildcard(ctx: NodeSemverExpressionParser.WildcardContext): List = listOf(NpmRange()) - // TODO check it - override fun visitWildcardRange(ctx: NodeSemverExpressionParser.WildcardRangeContext): List = - listOf(eq(ctx.partialWildcardSemver().text)) + override fun visitWildcardRange(ctx: NodeSemverExpressionParser.WildcardRangeContext): List { + val partialWildcardSemver = ctx.partialWildcardSemver() + val versionText = partialWildcardSemver.text + val version = versionText + .replace(".x", "") + .replace(".X", "") + .replace(".*", "") + .let { Version.fromString(it) } + + val nextVersion = when { + partialWildcardSemver.minor == null -> version.incrementMajor() + partialWildcardSemver.patch == null -> version.incrementMinor() + else -> throw GradleException("Incorrect version pattern $versionText") + } + + return (gteq(version) intersect lt(nextVersion)) + .toListOrEmpty() + } override fun visitOperator(ctx: NodeSemverExpressionParser.OperatorContext): List { val eq: TerminalNode? = ctx.unaryOperator().EQ()