From 32c3b0cd58725f13cb3f61c6edcc01dc74fb7feb Mon Sep 17 00:00:00 2001 From: Egor Kulikov Date: Fri, 10 Feb 2023 10:02:39 +0000 Subject: [PATCH] [FIR] Use stubs for creating lazy bodies of backing field initializer Ninth step for ^KT-52615 Merge-request: KT-MR-8756 Merged-by: Egor Kulikov --- .../org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt | 2 +- .../psi/src/org/jetbrains/kotlin/psi/KtBackingField.java | 8 ++++++++ .../org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt | 2 +- .../src/org/jetbrains/kotlin/psi/stubs/StubInterfaces.kt | 4 +++- .../psi/stubs/elements/KtBackingFieldElementType.java | 9 ++++++--- .../psi/stubs/impl/KotlinBackingFieldStubImpl.java | 9 ++++++++- 6 files changed, 27 insertions(+), 7 deletions(-) diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index aa3a67223e3..24631cca367 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -1705,7 +1705,7 @@ open class RawFirBuilder( private fun KtDeclarationWithInitializer.toInitializerExpression() = runIf(hasInitializer()) { - buildOrLazyExpression(initializer?.toFirSourceElement()) { + buildOrLazyExpression(null) { initializer.toFirExpression("Should have initializer") } } diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KtBackingField.java b/compiler/psi/src/org/jetbrains/kotlin/psi/KtBackingField.java index 5ca3da2e18e..d8362725767 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KtBackingField.java +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KtBackingField.java @@ -62,11 +62,19 @@ public class KtBackingField extends KtDeclarationStub @Nullable @Override public KtExpression getInitializer() { + KotlinBackingFieldStub stub = getStub(); + if (stub != null && !stub.hasInitializer()) { + return null; + } return PsiTreeUtil.getNextSiblingOfType(getEqualsToken(), KtExpression.class); } @Override public boolean hasInitializer() { + KotlinBackingFieldStub stub = getStub(); + if (stub != null) { + return stub.hasInitializer(); + } return getInitializer() != null; } diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt index 2ed683ac757..403be28635f 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt @@ -23,7 +23,7 @@ object KotlinStubVersions { // Though only kotlin declarations (no code in the bodies) are stubbed, please do increase this version // if you are not 100% sure it can be avoided. // Increasing this version will lead to reindexing of all kotlin source files on the first IDE startup with the new version. - const val SOURCE_STUB_VERSION = 145 + const val SOURCE_STUB_VERSION = 146 // Binary stub version should be increased if stub format (org.jetbrains.kotlin.psi.stubs.impl) is changed // or changes are made to the core stub building code (org.jetbrains.kotlin.idea.decompiler.stubBuilder). diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/StubInterfaces.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/StubInterfaces.kt index 8f286e03832..725bdc8986e 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/StubInterfaces.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/StubInterfaces.kt @@ -127,7 +127,9 @@ interface KotlinPropertyAccessorStub : StubElement { fun hasBlockBody(): Boolean } -interface KotlinBackingFieldStub : StubElement +interface KotlinBackingFieldStub : StubElement { + fun hasInitializer(): Boolean +} interface KotlinPropertyStub : KotlinCallableStubBase { fun isVar(): Boolean diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/KtBackingFieldElementType.java b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/KtBackingFieldElementType.java index 8c274d0f4e7..7716a79c96e 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/KtBackingFieldElementType.java +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/KtBackingFieldElementType.java @@ -34,15 +34,18 @@ public class KtBackingFieldElementType extends KtStubElementType implements KotlinBackingFieldStub { - public KotlinBackingFieldStubImpl(StubElement parent) { + private final boolean hasInitializer; + public KotlinBackingFieldStubImpl(StubElement parent, boolean hasInitializer) { super(parent, KtStubElementTypes.BACKING_FIELD); + this.hasInitializer = hasInitializer; + } + + @Override + public boolean hasInitializer() { + return hasInitializer; } }