From ca8f234f28caf080241b7fbf89ff1dbac410853b Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Wed, 23 Nov 2022 11:58:12 +0300 Subject: [PATCH] Improve performance of KAPT on JDK 17 Getting canonical path is expensive on JDK 17, thus check, whether file is belongs to some folder becomes expensive. In this commit implementation was replaced to a new one based on File.getParent. It gives profit 49seconds-> 500 ms/100k files. Note! Now if there are present two files which are actually links of the same file, they are treated as two different files. #KT-54579 Fixed --- .../kotlin/gradle/tasks/configuration/KaptConfig.kt | 4 ++-- plugins/kapt3/kapt3-base/test/KaptPathsTest.kt | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptConfig.kt index 3f375d38e9d..38a84686673 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptConfig.kt @@ -143,8 +143,8 @@ internal open class KaptConfig( //Have to avoid using FileUtil because it is required system property reading that is not allowed for configuration cache private fun isAncestor(dir: File, file: File): Boolean { - val path = file.canonicalPath - val prefix = dir.canonicalPath + val path = file.normalize().absolutePath + val prefix = dir.normalize().absolutePath val pathLength = path.length val prefixLength = prefix.length val caseSensitive = true diff --git a/plugins/kapt3/kapt3-base/test/KaptPathsTest.kt b/plugins/kapt3/kapt3-base/test/KaptPathsTest.kt index 02b52f7fe6b..16f5782056b 100644 --- a/plugins/kapt3/kapt3-base/test/KaptPathsTest.kt +++ b/plugins/kapt3/kapt3-base/test/KaptPathsTest.kt @@ -35,9 +35,8 @@ class KaptPathsTest { val symlinkToOtherJava = Files.createSymbolicLink(File(tempDir, "Other.java").toPath(), otherJava.toPath()).toFile() val symlinkToNotJava = Files.createSymbolicLink(File(tempDir, "NotJava.java").toPath(), notJava.toPath()).toFile() - val symlinkToJavaRootDir = Files.createSymbolicLink(File(tempDir, "java2").toPath(), javaRootDir.toPath()).toFile() - val javaRoots = listOf(simpleJava, symlinkToOtherJava, symlinkToNotJava, symlinkToJavaRootDir, javaRootDir) + val javaRoots = listOf(simpleJava, symlinkToOtherJava, symlinkToNotJava, javaRootDir) val paths = KaptOptions.Builder().apply { javaSourceRoots.addAll(javaRoots) @@ -53,7 +52,7 @@ class KaptPathsTest { assertTrue(javaSourceFiles.any { it.toRelativeString(tempDir) == path }) { "Can't find path $path\nAvailable: $available" } } - assertEquals(4, javaSourceFiles.size) + assertEquals(4, javaSourceFiles.size, "Actual content: ${javaSourceFiles}") assertContains("Simple.java") assertContains("Other.java") assertContains("NotJava.java")