Skip to content

Commit

Permalink
Improve parser
Browse files Browse the repository at this point in the history
  • Loading branch information
fthomas committed Jan 11, 2025
1 parent 094188a commit a191d73
Showing 1 changed file with 15 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,30 +34,26 @@ object gradleParser {
(dependencies, plugins)
}

private def collectEntries[A: Ordering](table: TomlTable, f: TomlTable => Option[A]): List[A] =
table
.entrySet()
.asScala
.map(_.getValue)
.flatMap {
case t: TomlTable => f(t)
case _ => None
}
.toList
.sorted
private def collectEntries[A: Ordering](table: TomlTable, f: TomlTable => Option[A]): List[A] = {
val aSet = table.entrySet().asScala.map(_.getValue).flatMap {
case t: TomlTable => f(t)
case _ => None
}
aSet.toList.sorted
}

private def parseDependency(lib: TomlTable, versions: TomlTable): Option[Dependency] =
parseVersion(lib, versions).flatMap { version =>
parseSimpleLib(lib, version).orElse(parseModuleLib(lib, version))
parseModuleObj(lib, version).orElse(parseModuleString(lib, version))
}

private def parseSimpleLib(lib: TomlTable, version: Version): Option[Dependency] =
private def parseModuleObj(lib: TomlTable, version: Version): Option[Dependency] =
for {
groupId <- getStringSafe(lib, "group").map(GroupId(_))
artifactId <- getStringSafe(lib, "name").map(ArtifactId(_))
} yield Dependency(groupId, artifactId, version)

private def parseModuleLib(lib: TomlTable, version: Version): Option[Dependency] =
private def parseModuleString(lib: TomlTable, version: Version): Option[Dependency] =
for {
module <- getStringSafe(lib, "module")
(groupId, artifactId) <- module.split(':') match {
Expand All @@ -74,14 +70,11 @@ object gradleParser {
version <- parseVersion(plugin, versions)
} yield Dependency(groupId, artifactId, version)

private def parseVersion(table: TomlTable, versions: TomlTable): Option[Version] =
parseVersionString(table).orElse(parseVersionRef(table, versions)).map(Version.apply)

private def parseVersionString(table: TomlTable): Option[String] =
getStringSafe(table, "version")

private def parseVersionRef(table: TomlTable, versions: TomlTable): Option[String] =
getStringSafe(table, "version.ref").flatMap(ref => getStringSafe(versions, ref))
private def parseVersion(table: TomlTable, versions: TomlTable): Option[Version] = {
def versionString = getStringSafe(table, "version")
def versionRef = getStringSafe(table, "version.ref").flatMap(getStringSafe(versions, _))
versionString.orElse(versionRef).map(Version.apply)
}

private def getStringSafe(table: TomlTable, key: String): Option[String] =
Option.when(table.contains(key) && table.isString(key))(table.getString(key))
Expand Down

0 comments on commit a191d73

Please sign in to comment.