diff --git a/compiler/fir/analysis-tests/testData/loadCompiledKotlin/prop/Constants.txt b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/prop/Constants.txt index cac7b3ea9cf..264aad18b4d 100644 --- a/compiler/fir/analysis-tests/testData/loadCompiledKotlin/prop/Constants.txt +++ b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/prop/Constants.txt @@ -40,6 +40,6 @@ public final const val s: R|kotlin/Short| = Short(20000) public final const val s1: R|kotlin/Short| = Short(1) public get(): R|kotlin/Short| -public final const val str: R|kotlin/String| +public final const val str: R|kotlin/String| = String(:)) public get(): R|kotlin/String| diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirConstDeserializer.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirConstDeserializer.kt index dc994ab8749..1e67995070e 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirConstDeserializer.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirConstDeserializer.kt @@ -20,24 +20,21 @@ import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerial class FirConstDeserializer( val session: FirSession, - private val partSource: KotlinJvmBinaryClass? = null, - private val facadeSource: KotlinJvmBinaryClass? = null + private val binaryClass: KotlinJvmBinaryClass? = null ) { - companion object { - private val constantCache = mutableMapOf() - } + private val constantCache = mutableMapOf() fun loadConstant(propertyProto: ProtoBuf.Property, callableId: CallableId, nameResolver: NameResolver): FirExpression? { if (!Flags.HAS_CONSTANT.get(propertyProto.flags)) return null constantCache[callableId]?.let { return it } - if (facadeSource == null && partSource == null) { + if (binaryClass == null) { val value = propertyProto.getExtensionOrNull(BuiltInSerializerProtocol.compileTimeValue) ?: return null return buildFirConstant(value, null, value.type.name, nameResolver)?.apply { constantCache[callableId] = this } } - (facadeSource ?: partSource)!!.visitMembers(object : KotlinJvmBinaryClass.MemberVisitor { + binaryClass.visitMembers(object : KotlinJvmBinaryClass.MemberVisitor { override fun visitMethod(name: Name, desc: String): KotlinJvmBinaryClass.MethodAnnotationVisitor? = null override fun visitField(name: Name, desc: String, initializer: Any?): KotlinJvmBinaryClass.AnnotationVisitor? { @@ -60,11 +57,11 @@ class FirConstDeserializer( "CHAR", "C" -> buildConstExpression(null, FirConstKind.Char, ((protoValue?.intValue ?: sourceValue) as Number).toChar()) "SHORT", "S" -> buildConstExpression(null, FirConstKind.Short, ((protoValue?.intValue ?: sourceValue) as Number).toShort()) "INT", "I" -> buildConstExpression(null, FirConstKind.Int, protoValue?.intValue?.toInt() ?: sourceValue as Int) - "LONG", "J" -> buildConstExpression(null, FirConstKind.Long, (protoValue?.intValue ?: sourceValue) as Long) - "FLOAT", "F" -> buildConstExpression(null, FirConstKind.Float, (protoValue?.floatValue ?: sourceValue) as Float) - "DOUBLE", "D" -> buildConstExpression(null, FirConstKind.Double, (protoValue?.doubleValue ?: sourceValue) as Double) + "LONG", "J" -> buildConstExpression(null, FirConstKind.Long, protoValue?.intValue ?: sourceValue as Long) + "FLOAT", "F" -> buildConstExpression(null, FirConstKind.Float, protoValue?.floatValue ?: sourceValue as Float) + "DOUBLE", "D" -> buildConstExpression(null, FirConstKind.Double, protoValue?.doubleValue ?: sourceValue as Double) "BOOLEAN", "Z" -> buildConstExpression(null, FirConstKind.Boolean, (protoValue?.intValue?.toInt() ?: sourceValue) != 0) - "STRING", "Ljava/lang/String" -> buildConstExpression( + "STRING", "Ljava/lang/String;" -> buildConstExpression( null, FirConstKind.String, protoValue?.stringValue?.let { nameResolver.getString(it) } ?: sourceValue as String ) else -> null diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index 4262004f450..a39091afe37 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -205,9 +205,6 @@ class FirElementSerializer private constructor( var hasGetter = false var hasSetter = false - //val compileTimeConstant = property.compileTimeInitializer - val hasConstant = false // TODO: compileTimeConstant != null && compileTimeConstant !is NullValue - val hasAnnotations = property.nonSourceAnnotations(session).isNotEmpty() // TODO: hasAnnotations(descriptor) || hasAnnotations(descriptor.backingField) || hasAnnotations(descriptor.delegateField) @@ -247,6 +244,7 @@ class FirElementSerializer private constructor( } } + val hasConstant = property.isConst // TODO: this is only correct with LanguageFeature.NoConstantValueAttributeForNonConstVals val flags = Flags.getPropertyFlags( hasAnnotations, ProtoEnumFlags.visibility(normalizeVisibility(property)), diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt index eb799242de0..ae5fb02ad68 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt @@ -126,7 +126,7 @@ class KotlinDeserializedJvmSymbolsProvider( FirDeserializationContext.createForPackage( packageFqName, packageProto, nameResolver, session, JvmBinaryAnnotationDeserializer(session, kotlinJvmBinaryClass, byteContent), - FirConstDeserializer(session, kotlinJvmBinaryClass, facadeBinaryClass), + FirConstDeserializer(session, facadeBinaryClass ?: kotlinJvmBinaryClass), source ), source, diff --git a/compiler/testData/compileKotlinAgainstKotlin/callsToMultifileClassFromOtherPackage.kt b/compiler/testData/compileKotlinAgainstKotlin/callsToMultifileClassFromOtherPackage.kt index f90154a952e..3c6332d89bb 100644 --- a/compiler/testData/compileKotlinAgainstKotlin/callsToMultifileClassFromOtherPackage.kt +++ b/compiler/testData/compileKotlinAgainstKotlin/callsToMultifileClassFromOtherPackage.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: A.kt diff --git a/compiler/testData/compileKotlinAgainstKotlin/constPropertyReferenceFromMultifileClass.kt b/compiler/testData/compileKotlinAgainstKotlin/constPropertyReferenceFromMultifileClass.kt index daae4e93d3e..e72e0a12217 100644 --- a/compiler/testData/compileKotlinAgainstKotlin/constPropertyReferenceFromMultifileClass.kt +++ b/compiler/testData/compileKotlinAgainstKotlin/constPropertyReferenceFromMultifileClass.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: A.kt diff --git a/compiler/testData/compileKotlinAgainstKotlin/inlinedConstants.kt b/compiler/testData/compileKotlinAgainstKotlin/inlinedConstants.kt index 635a2b19e4b..51cb24fd65a 100644 --- a/compiler/testData/compileKotlinAgainstKotlin/inlinedConstants.kt +++ b/compiler/testData/compileKotlinAgainstKotlin/inlinedConstants.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: A.kt diff --git a/compiler/testData/compileKotlinAgainstKotlin/kotlinPropertyAsAnnotationParameter.kt b/compiler/testData/compileKotlinAgainstKotlin/kotlinPropertyAsAnnotationParameter.kt index a677160e645..a43165004f0 100644 --- a/compiler/testData/compileKotlinAgainstKotlin/kotlinPropertyAsAnnotationParameter.kt +++ b/compiler/testData/compileKotlinAgainstKotlin/kotlinPropertyAsAnnotationParameter.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: A.kt