From 6b0333d74ceecfd0f507f5f003e0159a0af88215 Mon Sep 17 00:00:00 2001 From: Marco Pennekamp Date: Thu, 31 Aug 2023 22:09:55 +0200 Subject: [PATCH] [FIR] Avoid AST loading in `KtPrimaryConstructor.toFirConstructor` - `getConstructorKeyword` forces an AST load due to a child search. In most cases, we don't need to check the constructor keyword in primary constructors at all (e.g. `class ABC()` with an implicit primary constructor). The keyword check is only needed when there are primary constructor modifiers (e.g. `class ABC constructor()`). Thanks to Dima Gridin for the suggested fix. ^KT-61635 fixed --- .../src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt index 0bac56305e3..c38967c62ac 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt @@ -1083,9 +1083,9 @@ open class PsiRawFirBuilder( isFromSealedClass = owner.hasModifier(SEALED_KEYWORD) && explicitVisibility !== Visibilities.Private isFromEnumClass = owner.hasModifier(ENUM_KEYWORD) } - val hasConstructorKeyword = this@toFirConstructor?.getConstructorKeyword() != null + val builder = when { - this?.modifierList != null && !hasConstructorKeyword -> createErrorConstructorBuilder(ConeMissingConstructorKeyword) + this?.modifierList != null && getConstructorKeyword() == null -> createErrorConstructorBuilder(ConeMissingConstructorKeyword) isErrorConstructor -> createErrorConstructorBuilder(ConeNoConstructorError) else -> FirPrimaryConstructorBuilder() }