From 6fb371be0fa1d392c42e61d5de933e77d1166bb0 Mon Sep 17 00:00:00 2001 From: Alexey Belkov Date: Thu, 14 Mar 2024 15:36:53 +0400 Subject: [PATCH] [kotlin] J2K tests: optimize `getFileTextWithErrors` Don't analyze the actual file for errors if the expected testdata doesn't have errors. GitOrigin-RevId: a5150153d30bf66197b8314ca5b0c4941e211cc7 --- .../j2k/AbstractJavaToKotlinConverterMultiFileTest.kt | 11 ++++++++++- .../AbstractJavaToKotlinConverterSingleFileTest.kt | 7 +++++-- .../tests/test/org/jetbrains/kotlin/j2k/testUtils.kt | 4 +++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterMultiFileTest.kt b/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterMultiFileTest.kt index f94923198124..8e5fef7b5935 100644 --- a/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterMultiFileTest.kt +++ b/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterMultiFileTest.kt @@ -83,7 +83,16 @@ abstract class AbstractJavaToKotlinConverterMultiFileTest : AbstractJavaToKotlin } for ((i, kotlinFile) in resultFiles.withIndex()) { - KotlinTestUtils.assertEqualsToFile(expectedResultFile(i), kotlinFile.getFileTextWithErrors()) + val expectedFile = expectedResultFile(i) + val shouldCheckForErrors = expectedFile.readText().contains(ERROR_HEADER) + val actualText = if (shouldCheckForErrors) { + // Optimization: K2 `getFileTextWithErrors` is expensive + kotlinFile.getFileTextWithErrors() + } else { + kotlinFile.text + } + + KotlinTestUtils.assertEqualsToFile(expectedFile, actualText) } for ((externalFile, externalPsiFile) in externalFiles.zip(externalPsiFiles)) { diff --git a/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterSingleFileTest.kt b/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterSingleFileTest.kt index 28dee1ec98c2..a4c1c8e276f5 100644 --- a/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterSingleFileTest.kt +++ b/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterSingleFileTest.kt @@ -49,13 +49,16 @@ abstract class AbstractJavaToKotlinConverterSingleFileTest : AbstractJavaToKotli val directives = KotlinTestUtils.parseDirectives(javaCode) val settings = configureSettings(directives) val convertedText = convertJavaToKotlin(prefix, javaCode, settings) + val expectedFile = File(javaFile.path.replace(".java", ".kt")) + val shouldCheckForErrors = expectedFile.readText().contains(ERROR_HEADER) - val actualText = if (prefix == "file") { + val actualText = if (prefix == "file" && shouldCheckForErrors) { + // Optimization: K2 `getFileTextWithErrors` is expensive createKotlinFile(convertedText).getFileTextWithErrors() } else { convertedText } - val expectedFile = File(javaFile.path.replace(".java", ".kt")) + KotlinTestUtils.assertEqualsToFile(expectedFile, actualText) } diff --git a/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/testUtils.kt b/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/testUtils.kt index b69001bcf288..dd6bd0216d4d 100644 --- a/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/testUtils.kt +++ b/plugins/kotlin/j2k/shared/tests/test/org/jetbrains/kotlin/j2k/testUtils.kt @@ -17,9 +17,11 @@ val J2K_PROJECT_DESCRIPTOR: KotlinWithJdkAndRuntimeLightProjectDescriptor = override fun getSdk(): Sdk = IdeaTestUtil.getMockJdk21() } -val J2K_FULL_JDK_PROJECT_DESCRIPTOR: KotlinWithJdkAndRuntimeLightProjectDescriptor = +internal val J2K_FULL_JDK_PROJECT_DESCRIPTOR: KotlinWithJdkAndRuntimeLightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.getInstanceFullJdk() +internal const val ERROR_HEADER: String = "// ERROR" + // TODO: adapted from `org.jetbrains.kotlin.idea.test.TestUtilsKt.dumpTextWithErrors` @OptIn(KtAllowAnalysisOnEdt::class) internal fun getK2FileTextWithErrors(file: KtFile): String {