in intellij-plugin-structure/structure-fleet/src/main/kotlin/com/jetbrains/plugin/structure/fleet/FleetPluginDescriptor.kt [32:174]
fun validate(): List<PluginProblem> {
val problems = mutableListOf<PluginProblem>()
when {
id.isNullOrBlank() -> {
problems.add(PropertyNotSpecified(FleetDescriptorSpec.ID_FIELD_NAME))
}
!ID_REGEX.matches(id) -> {
problems.add(InvalidPluginIDProblem(id))
}
}
if (version.isNullOrBlank()) {
problems.add(PropertyNotSpecified(FleetDescriptorSpec.VERSION_FIELD_NAME))
}
val metaSpec = FleetDescriptorSpec.Meta
if (meta?.description.isNullOrBlank()) {
problems.add(PropertyNotSpecified(metaSpec.relativeFieldPath(metaSpec.DESCRIPTION_FIELD_NAME)))
}
if (meta?.vendor.isNullOrBlank()) {
problems.add(PropertyNotSpecified(metaSpec.relativeFieldPath(metaSpec.VENDOR_FIELD_NAME)))
}
val supportedProducts = meta?.getSupportedProductCodes() ?: emptySet()
val products = supportedProducts.mapNotNull { FleetProduct.fromProductCode(it) }.toSet()
if (products.size != supportedProducts.size) {
problems.add(
InvalidSupportedProductsListProblem(
constraint = "must contain only product codes from ${
FleetProduct.values().map { it.productCode }
}, got: $supportedProducts"
)
)
}
val (isLegacyVersioning, isUnifiedVersioning) = products.partition { it.legacyVersioning }
.let { (legacy, unified) ->
Pair(legacy.isNotEmpty(), unified.isNotEmpty())
}
if (isLegacyVersioning && isUnifiedVersioning) {
problems.add(
InvalidSupportedProductsListProblem(
constraint = "must contain either only legacy or only unified versioning products"
)
)
}
val shipVersionSpec = FleetDescriptorSpec.CompatibleShipVersion
if (id != SHIP_PLUGIN_ID) {
when {
compatibleShipVersionRange == null -> {
problems.add(PropertyNotSpecified(shipVersionSpec.NAME))
}
compatibleShipVersionRange.from.isNullOrBlank() -> {
problems.add(PropertyNotSpecified(shipVersionSpec.relativeFieldPath(shipVersionSpec.FROM_FIELD_NAME)))
}
compatibleShipVersionRange.to.isNullOrBlank() -> {
problems.add(PropertyNotSpecified(shipVersionSpec.relativeFieldPath(shipVersionSpec.TO_FIELD_NAME)))
}
else -> {
val fromSemver = parseVersionOrNull(compatibleShipVersionRange.from)
val toSemver = parseVersionOrNull(compatibleShipVersionRange.to)
when {
fromSemver == null -> {
problems.add(
InvalidSemverFormat(
descriptorPath = FleetDescriptorSpec.DESCRIPTOR_FILE_NAME,
versionName = shipVersionSpec.relativeFieldPath(shipVersionSpec.FROM_FIELD_NAME),
version = compatibleShipVersionRange.from
)
)
}
toSemver == null -> {
problems.add(
InvalidSemverFormat(
descriptorPath = FleetDescriptorSpec.DESCRIPTOR_FILE_NAME,
versionName = shipVersionSpec.relativeFieldPath(shipVersionSpec.TO_FIELD_NAME),
version = compatibleShipVersionRange.to
)
)
}
fromSemver.isGreaterThan(toSemver) -> {
problems.add(
InvalidVersionRange(
descriptorPath = FleetDescriptorSpec.DESCRIPTOR_FILE_NAME,
since = compatibleShipVersionRange.from,
until = compatibleShipVersionRange.to
)
)
}
else -> {
val fromVersionProblems = validateVersion(
fieldName = shipVersionSpec.relativeFieldPath(shipVersionSpec.FROM_FIELD_NAME),
semver = fromSemver,
isLegacy = isLegacyVersioning
)
problems.addAll(fromVersionProblems)
if (fromVersionProblems.isEmpty()) {
problems.addAll(
validateVersion(
fieldName = shipVersionSpec.relativeFieldPath(shipVersionSpec.TO_FIELD_NAME),
semver = toSemver,
isLegacy = isLegacyVersioning
)
)
}
}
}
}
}
}
val readableName = meta?.name
when {
readableName.isNullOrBlank() -> {
problems.add(PropertyNotSpecified(metaSpec.relativeFieldPath(metaSpec.NAME_FIELD_NAME)))
}
else -> {
validatePropertyLength(
descriptor = FleetDescriptorSpec.DESCRIPTOR_FILE_NAME,
propertyName = metaSpec.relativeFieldPath(metaSpec.NAME_FIELD_NAME),
propertyValue = readableName,
maxLength = MAX_NAME_LENGTH,
problems = problems
)
validatePluginNameIsCorrect(
descriptor = FleetDescriptorSpec.DESCRIPTOR_FILE_NAME,
name = readableName,
problems = problems
)
}
}
return problems
}