diff --git a/platform/build-scripts/icons/src/com/intellij/build/scripts/IconsClassGenerator.kt b/platform/build-scripts/icons/src/com/intellij/build/scripts/IconsClassGenerator.kt index 0c34915c4971..2a7c74dfc0da 100644 --- a/platform/build-scripts/icons/src/com/intellij/build/scripts/IconsClassGenerator.kt +++ b/platform/build-scripts/icons/src/com/intellij/build/scripts/IconsClassGenerator.kt @@ -23,11 +23,9 @@ import org.jetbrains.jps.model.java.JavaSourceRootProperties import org.jetbrains.jps.model.java.JavaSourceRootType import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.util.JpsPathUtil -import java.io.BufferedReader import java.io.File -import java.io.StringReader import java.util.* -import java.util.function.Function +import kotlin.comparisons.compareBy class IconsClassGenerator(val projectHome: File, val util: JpsModule) { private var processedClasses = 0 @@ -81,8 +79,8 @@ class IconsClassGenerator(val projectHome: File, val util: JpsModule) { val text = generate(module, className, packageName, customLoad, copyrightComment) if (text != null) { processedClasses++ - - if (!outFile.exists() || !sameLines(outFile.readText(), text)) { + + if (!outFile.exists() || outFile.readText().lines() != text.lines()) { outFile.parentFile.mkdirs() outFile.writeText(text) println("Updated icons class: ${outFile.name}") @@ -91,7 +89,7 @@ class IconsClassGenerator(val projectHome: File, val util: JpsModule) { } fun printStats() { - println("") + println() println("Generated classes: $processedClasses. Processed icons: $processedIcons") } @@ -114,18 +112,6 @@ class IconsClassGenerator(val projectHome: File, val util: JpsModule) { return if (comment.trim().endsWith("*/")) comment else "" } - private fun sameLines(a: String, b: String): Boolean { - val ra = BufferedReader(StringReader(a)) - val rb = BufferedReader(StringReader(b)) - - while (true) { - val la = ra.readLine() - val lb = rb.readLine() - if (la != lb) return false - if (la == null) return true - } - } - private fun generate(module: JpsModule, className: String, packageName: String, customLoad: Boolean, copyrightComment: String): String? { val answer = StringBuilder() answer.append(copyrightComment) @@ -302,5 +288,5 @@ class IconsClassGenerator(val projectHome: File, val util: JpsModule) { } // legacy ordering - private val NAME_COMPARATOR: Comparator = Comparator.comparing(Function { it.toLowerCase() + "." }) + private val NAME_COMPARATOR: Comparator = compareBy { it.toLowerCase() + "." } } diff --git a/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageCollector.kt b/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageCollector.kt index 7b3ad9825f20..42a3fd7f0ed0 100644 --- a/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageCollector.kt +++ b/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageCollector.kt @@ -18,7 +18,6 @@ package com.intellij.build.scripts import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtilRt import com.intellij.openapi.util.text.StringUtil -import com.intellij.util.containers.ContainerUtil import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.model.module.JpsModuleSourceRoot @@ -74,7 +73,7 @@ internal class ImageCollector(val projectHome: File, val iconsOnly: Boolean = tr if (file.isDirectory) { val root = sourceRoot.file val childRobotData = robotData.fork(file, root) - val childPrefix = ContainerUtil.append(prefix, file.name) + val childPrefix = prefix + file.name processDirectory(file, sourceRoot, childRobotData, childPrefix) } else if (isImage(file, iconsOnly)) { @@ -94,7 +93,7 @@ internal class ImageCollector(val projectHome: File, val iconsOnly: Boolean = tr if (skipped) return val iconPaths = result.computeIfAbsent(id, { ImagePaths(id, sourceRoot, used, deprecated) }) - if (iconPaths.files[type] == null) { + if (type !in iconPaths.files) { iconPaths.files[type] = file } else { @@ -103,7 +102,7 @@ internal class ImageCollector(val projectHome: File, val iconsOnly: Boolean = tr } private fun upToProjectHome(dir: File): IconRobotsData { - if (dir == projectHome) return IconRobotsData() + if (FileUtil.filesEqual(dir, projectHome)) return IconRobotsData() val parent = dir.parentFile ?: return IconRobotsData() return upToProjectHome(parent).fork(parent, projectHome) } @@ -126,39 +125,14 @@ internal class ImageCollector(val projectHome: File, val iconsOnly: Boolean = tr return childCommon } else if (isImage(file, iconsOnly)) { - return getCommonAncestor(common, file) + if (common == null) return file + return FileUtil.findAncestor(common, file) } else { return common } } - private fun getCommonAncestor(file1: File?, file2: File?): File? { - if (file1 == null) return file2 - if (file2 == null) return file1 - - val c1 = pathComponents(file1) - val c2 = pathComponents(file2) - - val size = Math.min(c1.size, c2.size) - var cur: File? = null - for (i in 0..size - 1) { - if (c1[i] != c2[i]) break - cur = c1[i] - } - return cur - } - - private fun pathComponents(file: File): List { - val answer = ArrayList() - var cur: File? = file - while (cur != null) { - answer.add(cur) - cur = cur.parentFile - } - return answer.reversed() - } - private inner class IconRobotsData(private val parent: IconRobotsData? = null) { private val skip: MutableSet = HashSet() private val used: MutableSet = HashSet() diff --git a/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageSanityChecker.kt b/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageSanityChecker.kt index 442bcceb27cf..c57a0062dedf 100644 --- a/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageSanityChecker.kt +++ b/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageSanityChecker.kt @@ -38,17 +38,17 @@ abstract class ImageSanityCheckerBase(val projectHome: File, val ignoreSkipTag: private fun checkHaveRetinaVersion(images: List, module: JpsModule) { process(images, Severity.INFO, "image without retina version", module) { image -> - val hasRetina = image.files[RETINA] != null - val hasRetinaDarcula = image.files[RETINA_DARCULA] != null + val hasRetina = RETINA in image.files + val hasRetinaDarcula = RETINA_DARCULA in image.files return@process hasRetina || hasRetinaDarcula } } private fun checkHaveCompleteIconSet(images: List, module: JpsModule) { process(images, WARNING, "image without complete set of additional icons", module) { image -> - val hasRetina = image.files[RETINA] != null - val hasDarcula = image.files[DARCULA] != null - val hasRetinaDarcula = image.files[RETINA_DARCULA] != null + val hasRetina = RETINA in image.files + val hasDarcula = DARCULA in image.files + val hasRetinaDarcula = RETINA_DARCULA in image.files if (hasRetinaDarcula) { return@process hasRetina && hasDarcula @@ -109,14 +109,14 @@ class ImageSanityChecker(projectHome: File) : ImageSanityCheckerBase(projectHome fun printInfo() { if (infos.isNotEmpty()) { - println("") + println() println(infos) } } fun printWarnings() { if (warnings.isNotEmpty()) { - println("") + println() println(warnings) } } diff --git a/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageSizeOptimizer.kt b/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageSizeOptimizer.kt index 0864d3b8e649..e2e85f30c976 100644 --- a/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageSizeOptimizer.kt +++ b/platform/build-scripts/icons/src/com/intellij/build/scripts/ImageSizeOptimizer.kt @@ -47,7 +47,7 @@ class ImageSizeOptimizer(val projectHome: File) { } fun printStats() { - println("") + println() println("PNG size optimization: $optimizedTotal bytes in total") } diff --git a/platform/build-scripts/icons/src/com/intellij/build/scripts/util.kt b/platform/build-scripts/icons/src/com/intellij/build/scripts/util.kt index bed460913060..5c3eabe36324 100644 --- a/platform/build-scripts/icons/src/com/intellij/build/scripts/util.kt +++ b/platform/build-scripts/icons/src/com/intellij/build/scripts/util.kt @@ -19,7 +19,7 @@ import com.intellij.openapi.util.text.StringUtil import java.awt.* import java.io.File -internal val File.children: List get() = if (this.isDirectory) this.listFiles().toList() else emptyList() +internal val File.children: List get() = if (isDirectory) listFiles().toList() else emptyList() internal fun isImage(file: File, iconsOnly: Boolean): Boolean { if (!isImage(file.name)) return false @@ -71,7 +71,7 @@ internal enum class ImageType(private val suffix: String) { fun stripSuffix(name: String): String { val type = fromName(name) - return StringUtil.trimEnd(name, type.suffix) + return name.removeSuffix(type.suffix) } } } \ No newline at end of file