mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
icons.gant: check that all fallback icons are replaced with stub.png
This commit is contained in:
+30
-6
@@ -24,6 +24,8 @@ import java.io.File
|
||||
import java.util.*
|
||||
|
||||
abstract class ImageSanityCheckerBase(val projectHome: File, val ignoreSkipTag: Boolean) {
|
||||
private val STUB_PNG_MD5 = "5a87124746c39b00aad480e92672eca0" // /actions/stub.svg - 16x16
|
||||
|
||||
fun check(module: JpsModule) {
|
||||
val allImages = ImageCollector(projectHome, false, ignoreSkipTag).collect(module)
|
||||
|
||||
@@ -34,7 +36,8 @@ abstract class ImageSanityCheckerBase(val projectHome: File, val ignoreSkipTag:
|
||||
checkHaveCompleteIconSet(images, module)
|
||||
checkHaveValidSize(images, module)
|
||||
checkAreNotAmbiguous(images, module)
|
||||
checkSvgIconsFallbackVersions(images, module)
|
||||
checkSvgFallbackVersionsAreStubIcons(images, module)
|
||||
checkOverridingFallbackVersionsAreStubIcons(images, module)
|
||||
}
|
||||
|
||||
private fun checkHaveRetinaVersion(images: List<ImagePaths>, module: JpsModule) {
|
||||
@@ -83,14 +86,35 @@ abstract class ImageSanityCheckerBase(val projectHome: File, val ignoreSkipTag:
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkSvgIconsFallbackVersions(images: List<ImagePaths>, module: JpsModule) {
|
||||
process(images, WARNING, "svg image with non-fallback legacy version", module) { image ->
|
||||
val extensions = image.files.map { ImageExtension.fromFile(it) }
|
||||
if (SVG !in extensions) return@process true
|
||||
return@process image.files.filter { ImageExtension.fromFile(it) != SVG }.filter { ImageType.fromFile(it) != BASIC }.isEmpty()
|
||||
private fun checkSvgFallbackVersionsAreStubIcons(images: List<ImagePaths>, module: JpsModule) {
|
||||
process(images, WARNING, "SVG icons should use stub.png as fallback", module) { image ->
|
||||
if (image.files.none { ImageExtension.fromFile(it) == SVG }) return@process true
|
||||
|
||||
val legacyFiles = image.files.filter { ImageExtension.fromFile(it) != SVG }
|
||||
return@process isStubFallbackVersion(legacyFiles)
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkOverridingFallbackVersionsAreStubIcons(images: List<ImagePaths>, module: JpsModule) {
|
||||
process(images, WARNING, "Overridden icons should be replaced with stub.png as fallback", module) { image ->
|
||||
if (image.deprecationReplacement == null) return@process true
|
||||
|
||||
return@process isStubFallbackVersion(image.files)
|
||||
}
|
||||
}
|
||||
|
||||
private fun isStubFallbackVersion(files: List<File>): Boolean {
|
||||
if (files.isEmpty()) return true
|
||||
if (files.size > 1) return false
|
||||
|
||||
val file = files.single()
|
||||
if (ImageType.fromFile(file) != BASIC) return false
|
||||
|
||||
val md5 = md5(file)
|
||||
return md5 == STUB_PNG_MD5
|
||||
}
|
||||
|
||||
|
||||
private fun process(images: List<ImagePaths>, severity: Severity, message: String, module: JpsModule,
|
||||
processor: (ImagePaths) -> Boolean) {
|
||||
val result = ArrayList<ImagePaths>()
|
||||
|
||||
@@ -20,6 +20,8 @@ import com.intellij.util.SVGLoader
|
||||
import java.awt.Dimension
|
||||
import java.awt.Image
|
||||
import java.io.File
|
||||
import java.math.BigInteger
|
||||
import java.security.MessageDigest
|
||||
import javax.imageio.ImageIO
|
||||
|
||||
internal val File.children: List<File> get() = if (isDirectory) listFiles().toList() else emptyList()
|
||||
@@ -63,6 +65,13 @@ internal fun loadImage(file: File): Image? {
|
||||
}
|
||||
}
|
||||
|
||||
internal fun md5(file: File): String {
|
||||
val md5 = MessageDigest.getInstance("MD5")
|
||||
val bytes = file.inputStream().readBytes()
|
||||
val hash = md5.digest(bytes)
|
||||
return BigInteger(hash).abs().toString(16)
|
||||
}
|
||||
|
||||
internal enum class ImageType(private val suffix: String) {
|
||||
BASIC(""), RETINA("@2x"), DARCULA("_dark"), RETINA_DARCULA("@2x_dark");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user