K2: correct FirJavaField usages taking imported variant into account

Related to KT-59140
This commit is contained in:
Mikhail Glukhikh
2023-06-20 12:38:06 +02:00
committed by Space Team
parent 8983e3a218
commit 668684ca13
2 changed files with 5 additions and 5 deletions
@@ -11,15 +11,16 @@ import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.containingClassLookupTag import org.jetbrains.kotlin.fir.containingClassLookupTag
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
import org.jetbrains.kotlin.fir.declarations.FirField
import org.jetbrains.kotlin.fir.declarations.utils.isConst import org.jetbrains.kotlin.fir.declarations.utils.isConst
import org.jetbrains.kotlin.fir.declarations.utils.isFinal import org.jetbrains.kotlin.fir.declarations.utils.isFinal
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirArrayOfCallTransformer import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirArrayOfCallTransformer
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirArrayOfCallTransformer.Companion.isArrayOfCall import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirArrayOfCallTransformer.Companion.isArrayOfCall
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.types.coneTypeUnsafe import org.jetbrains.kotlin.fir.types.coneTypeUnsafe
@@ -141,7 +142,7 @@ internal abstract class FirToConstantValueTransformer(
if (symbol.fir.isConst) symbol.fir.initializer?.toConstantValue(data) else null if (symbol.fir.isConst) symbol.fir.initializer?.toConstantValue(data) else null
} }
fir is FirJavaField -> { fir is FirField -> {
if (fir.isFinal) { if (fir.isFinal) {
fir.initializer?.toConstantValue(data) fir.initializer?.toConstantValue(data)
} else { } else {
@@ -265,14 +266,13 @@ internal object FirToConstantValueChecker : FirDefaultVisitor<Boolean, FirSessio
override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: FirSession): Boolean { override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: FirSession): Boolean {
val symbol = qualifiedAccessExpression.toResolvedCallableSymbol() ?: return false val symbol = qualifiedAccessExpression.toResolvedCallableSymbol() ?: return false
val fir = symbol.fir
return when { return when {
symbol.fir is FirEnumEntry -> symbol.callableId.classId != null symbol.fir is FirEnumEntry -> symbol.callableId.classId != null
symbol is FirPropertySymbol -> symbol.fir.isConst symbol is FirPropertySymbol -> symbol.fir.isConst
fir is FirJavaField -> symbol.fir.isFinal symbol is FirFieldSymbol -> symbol.fir.isFinal
symbol is FirConstructorSymbol -> { symbol is FirConstructorSymbol -> {
symbol.containingClassLookupTag()?.toFirRegularClassSymbol(data)?.classKind == ClassKind.ANNOTATION_CLASS symbol.containingClassLookupTag()?.toFirRegularClassSymbol(data)?.classKind == ClassKind.ANNOTATION_CLASS
@@ -35,7 +35,7 @@ class FirJvmMangleComputer(
private inner class JvmVisitor : Visitor() { private inner class JvmVisitor : Visitor() {
override fun visitField(field: FirField) { override fun visitField(field: FirField) {
if (field is FirJavaField) { if (field is FirJavaField || field.origin == FirDeclarationOrigin.ImportedFromObjectOrStatic) {
field.mangleSimpleDeclaration(field.name.asString()) field.mangleSimpleDeclaration(field.name.asString())
} else { } else {
visitVariable(field) visitVariable(field)