From 20661d1f95e355051a5da493778a2e93e3b9db84 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 25 Apr 2023 12:13:39 +0200 Subject: [PATCH] [cls] more compact representation for contract stubs distinguish boolean parameters --- .../kotlin/psi/stubs/KotlinStubVersions.kt | 4 ++-- .../impl/KotlinContractEffectStubImpl.kt | 21 +++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) 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 22b30ca02c6..f3f43e3f5d5 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt @@ -23,12 +23,12 @@ 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 = 150 + const val SOURCE_STUB_VERSION = 151 // 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). // Increasing this version will lead to reindexing of all binary files that are potentially kotlin binaries (including all class files). - private const val BINARY_STUB_VERSION = 86 + private const val BINARY_STUB_VERSION = 87 // Classfile stub version should be increased if changes are made to classfile stub building subsystem (org.jetbrains.kotlin.idea.decompiler.classFile) // Increasing this version will lead to reindexing of all classfiles. diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/impl/KotlinContractEffectStubImpl.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/impl/KotlinContractEffectStubImpl.kt index ae05fe82fda..b1134121d8e 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/impl/KotlinContractEffectStubImpl.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/impl/KotlinContractEffectStubImpl.kt @@ -79,6 +79,11 @@ enum class KotlinContractEffectType { return KtValueParameterReference(dataStream.readInt(), IGNORE_REFERENCE_PARAMETER_NAME) } }, + BOOLEAN_PARAMETER_REFERENCE { + override fun deserialize(dataStream: StubInputStream): KtValueParameterReference { + return KtBooleanValueParameterReference(dataStream.readInt(), IGNORE_REFERENCE_PARAMETER_NAME) + } + }, CONSTANT { override fun deserialize(dataStream: StubInputStream): KtContractDescriptionElement { return when (val str = dataStream.readNameString()!!) { @@ -112,12 +117,12 @@ class KotlinContractSerializationVisitor(val dataStream: StubOutputStream) : override fun visitReturnsEffectDeclaration(returnsEffect: KtReturnsEffectDeclaration, data: Nothing?) { dataStream.writeInt(KotlinContractEffectType.RETURNS.ordinal) - returnsEffect.value.accept(this, data) + dataStream.writeName(returnsEffect.value.name) } override fun visitCallsEffectDeclaration(callsEffect: KtCallsEffectDeclaration, data: Nothing?) { dataStream.writeInt(KotlinContractEffectType.CALLS.ordinal) - callsEffect.valueParameterReference.accept(this, data) + dataStream.writeInt(callsEffect.valueParameterReference.parameterIndex) dataStream.writeInt(callsEffect.kind.ordinal) } @@ -138,14 +143,14 @@ class KotlinContractSerializationVisitor(val dataStream: StubOutputStream) : override fun visitIsInstancePredicate(isInstancePredicate: KtIsInstancePredicate, data: Nothing?) { dataStream.writeInt(KotlinContractEffectType.IS_INSTANCE.ordinal) - isInstancePredicate.arg.accept(this, data) + dataStream.writeInt(isInstancePredicate.arg.parameterIndex) serializeType(dataStream, isInstancePredicate.type) dataStream.writeBoolean(isInstancePredicate.isNegated) } override fun visitIsNullPredicate(isNullPredicate: KtIsNullPredicate, data: Nothing?) { dataStream.writeInt(KotlinContractEffectType.IS_NULL.ordinal) - isNullPredicate.arg.accept(this, data) + dataStream.writeInt(isNullPredicate.arg.parameterIndex) dataStream.writeBoolean(isNullPredicate.isNegated) } @@ -159,6 +164,14 @@ class KotlinContractSerializationVisitor(val dataStream: StubOutputStream) : dataStream.writeInt(KotlinContractEffectType.PARAMETER_REFERENCE.ordinal) dataStream.writeInt(valueParameterReference.parameterIndex) } + + override fun visitBooleanValueParameterReference( + booleanValueParameterReference: KtBooleanValueParameterReference, + data: Nothing? + ) { + dataStream.writeInt(KotlinContractEffectType.BOOLEAN_PARAMETER_REFERENCE.ordinal) + dataStream.writeInt(booleanValueParameterReference.parameterIndex) + } } object KotlinContractConstantValues {