[kotlin] Added Gson utilities and reduced code duplication

Follow-up to KTIJ-15746

GitOrigin-RevId: cf77b9d8f6b911741a944828e060c4dca080d030
This commit is contained in:
Frederik Haselmeier
2023-06-23 22:50:53 +02:00
committed by intellij-monorepo-bot
parent 579e81d436
commit 3bc44958d6
5 changed files with 44 additions and 34 deletions

View File

@@ -10,19 +10,18 @@ internal object GradleCompatibilityDataParser : IdeVersionedDataParser<GradleCom
}
override fun parseJson(data: JsonObject): GradleCompatibilityState? {
val supportedJavaVersionsArr = data["supportedJavaVersions"]?.takeIf { it.isJsonArray }?.asJsonArray ?: return null
val supportedGradleVersionsArr = data["supportedGradleVersions"]?.takeIf { it.isJsonArray }?.asJsonArray ?: return null
val compatibilityArr = data["compatibility"]?.takeIf { it.isJsonArray }?.asJsonArray ?: return null
val supportedJavaVersionsArr = data["supportedJavaVersions"]?.asSafeJsonArray ?: return null
val supportedGradleVersionsArr = data["supportedGradleVersions"]?.asSafeJsonArray ?: return null
val compatibilityArr = data["compatibility"]?.asSafeJsonArray ?: return null
val supportedJavaVersions = supportedJavaVersionsArr.parseVersions()
val supportedGradleVersions = supportedGradleVersionsArr.parseVersions()
val versionMappings = compatibilityArr
.filter { it.isJsonObject }
.mapNotNull { element ->
val obj = element.asJsonObject
val obj = element.asSafeJsonObject ?: return@mapNotNull null
val versionMapping = VersionMapping()
versionMapping.javaVersionInfo = obj["java"]?.takeIf { it.isJsonPrimitive }?.asString ?: return null
versionMapping.gradleVersionInfo = obj["gradle"]?.takeIf { it.isJsonPrimitive }?.asString ?: return null
versionMapping.javaVersionInfo = obj["java"]?.asSafeString ?: return@mapNotNull null
versionMapping.gradleVersionInfo = obj["gradle"]?.asSafeString ?: return@mapNotNull null
versionMapping
}

View File

@@ -0,0 +1,17 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.plugins.gradle.jvmcompat
import com.google.gson.JsonArray
import com.google.gson.JsonElement
import com.google.gson.JsonObject
// Gson utility functions that return null if an element is not the correct type, rather than throwing an exception
val JsonElement.asSafeJsonObject: JsonObject?
get() = takeIf { it.isJsonObject }?.asJsonObject
val JsonElement.asSafeJsonArray: JsonArray?
get() = takeIf { it.isJsonArray }?.asJsonArray
val JsonElement.asSafeString: String?
get() = runCatching { asString }.getOrNull()

View File

@@ -5,9 +5,7 @@ import com.google.gson.JsonObject
import com.intellij.openapi.components.State
import com.intellij.openapi.components.Storage
import com.intellij.openapi.components.service
import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataParser
import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataState
import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataStorage
import org.jetbrains.plugins.gradle.jvmcompat.*
class DependencyVersionState() : IdeVersionedDataState() {
constructor(versions: Map<String, String>) : this() {
@@ -23,11 +21,11 @@ class DependencyVersionState() : IdeVersionedDataState() {
internal object DependencyVersionParser : IdeVersionedDataParser<DependencyVersionState>() {
override fun parseJson(data: JsonObject): DependencyVersionState? {
val obj = data.takeIf { it.isJsonObject }?.asJsonObject ?: return null
val obj = data.asSafeJsonObject ?: return null
val versions = obj.asMap().mapNotNull { (key, value) ->
if (key == "ideVersion") return@mapNotNull null
val version = value.takeIf { value.isJsonPrimitive }?.asString ?: return@mapNotNull null
val version = value.asSafeString ?: return@mapNotNull null
key to version
}.toMap()

View File

@@ -9,9 +9,7 @@ import com.intellij.openapi.components.service
import com.intellij.openapi.util.Version
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.idea.compiler.configuration.IdeKotlinVersion
import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataParser
import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataState
import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataStorage
import org.jetbrains.plugins.gradle.jvmcompat.*
import org.jetbrains.plugins.gradle.util.Ranges
class KotlinGradleVersionMapping() : BaseState() {
@@ -42,19 +40,19 @@ class KotlinGradleCompatibilityState() : IdeVersionedDataState() {
internal object KotlinGradleCompatibilityParser : IdeVersionedDataParser<KotlinGradleCompatibilityState>() {
override fun parseJson(data: JsonObject): KotlinGradleCompatibilityState? {
val kotlinVersionsArr = data["kotlinVersions"]?.takeIf { it.isJsonArray }?.asJsonArray ?: return null
val kotlinVersionsArr = data["kotlinVersions"]?.asSafeJsonArray ?: return null
val kotlinVersions = kotlinVersionsArr.mapNotNull { entry ->
val str = entry.takeIf { it.isJsonPrimitive }?.asString ?: return@mapNotNull null
val str = entry.asSafeString ?: return@mapNotNull null
Version.parseVersion(str)?.toString()
}
val compatibilityArr = data["compatibility"]?.takeIf { it.isJsonArray }?.asJsonArray ?: return null
val compatibilityArr = data["compatibility"]?.asSafeJsonArray ?: return null
val compatibility = compatibilityArr.mapNotNull { entry ->
val obj = entry.takeIf { it.isJsonObject }?.asJsonObject ?: return@mapNotNull null
val kotlin = obj["kotlin"]?.takeIf { it.isJsonPrimitive }?.asString ?: return@mapNotNull null
val gradle = obj["gradle"]?.takeIf { it.isJsonPrimitive }?.asString ?: return@mapNotNull null
val comment = obj["comment"]?.takeIf { it.isJsonPrimitive }?.asString
val obj = entry.asSafeJsonObject ?: return@mapNotNull null
val kotlin = obj["kotlin"]?.asSafeString ?: return@mapNotNull null
val gradle = obj["gradle"]?.asSafeString ?: return@mapNotNull null
val comment = obj["comment"]?.asSafeString
KotlinGradleVersionMapping(kotlin, gradle, comment)
}

View File

@@ -5,24 +5,22 @@ import com.google.gson.JsonObject
import com.intellij.openapi.components.State
import com.intellij.openapi.components.Storage
import com.intellij.openapi.components.service
import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataParser
import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataState
import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataStorage
import org.jetbrains.plugins.gradle.jvmcompat.*
internal object KotlinWizardVersionParser : IdeVersionedDataParser<KotlinWizardVersionState>() {
override fun parseJson(data: JsonObject): KotlinWizardVersionState? {
val obj = data.takeIf { it.isJsonObject }?.asJsonObject ?: return null
val obj = data.asSafeJsonObject ?: return null
val versionData = KotlinWizardVersionState()
versionData.kotlinPluginVersion = obj["kotlinVersion"]?.takeIf { it.isJsonPrimitive }?.asString ?: return null
versionData.kotlinForComposeVersion = obj["kotlinForComposeVersion"]?.takeIf { it.isJsonPrimitive }?.asString ?: return null
versionData.composeCompilerExtension = obj["composeCompilerExtension"]?.takeIf { it.isJsonPrimitive }?.asString ?: return null
versionData.minGradleFoojayVersion = obj["minGradleFoojayVersion"]?.takeIf { it.isJsonPrimitive }?.asString ?: return null
versionData.gradleAndroidVersion = obj["gradleAndroidVersion"]?.takeIf { it.isJsonPrimitive }?.asString ?: return null
versionData.foojayVersion = obj["foojayVersion"]?.takeIf { it.isJsonPrimitive }?.asString ?: return null
versionData.failsafeVersion = obj["failsafeVersion"]?.takeIf { it.isJsonPrimitive }?.asString ?: return null
versionData.surefireVersion = obj["surefireVersion"]?.takeIf { it.isJsonPrimitive }?.asString ?: return null
versionData.kotlinPluginVersion = obj["kotlinVersion"]?.asSafeString ?: return null
versionData.kotlinForComposeVersion = obj["kotlinForComposeVersion"]?.asSafeString ?: return null
versionData.composeCompilerExtension = obj["composeCompilerExtension"]?.asSafeString ?: return null
versionData.minGradleFoojayVersion = obj["minGradleFoojayVersion"]?.asSafeString ?: return null
versionData.gradleAndroidVersion = obj["gradleAndroidVersion"]?.asSafeString ?: return null
versionData.foojayVersion = obj["foojayVersion"]?.asSafeString ?: return null
versionData.failsafeVersion = obj["failsafeVersion"]?.asSafeString ?: return null
versionData.surefireVersion = obj["surefireVersion"]?.asSafeString ?: return null
return versionData
}