diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt index 55abfb10145..0c45b8f7416 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.light.classes.symbol.* +import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.psi.* @@ -287,7 +288,8 @@ internal fun FirLightClassBase.createField( property.modality == Modality.ABSTRACT -> false property.isHiddenOrSynthetic(project) -> false property.isLateInit -> true - //TODO Fix it when KtFirConstructorValueParameterSymbol be ready + property.isDelegatedProperty -> true + property.isFromPrimaryConstructor -> true property.psi.let { it == null || it is KtParameter } -> true property.hasJvmSyntheticAnnotation(AnnotationUseSiteTarget.FIELD) -> false else -> property.hasBackingField @@ -296,10 +298,15 @@ internal fun FirLightClassBase.createField( if (!hasBackingField(declaration)) return + val isDelegated = (declaration as? KtKotlinPropertySymbol)?.isDelegatedProperty == true + val fieldName = nameGenerator.generateUniqueFieldName( + declaration.name.asString() + (if (isDelegated) JvmAbi.DELEGATED_PROPERTY_NAME_SUFFIX else "") + ) + result.add( FirLightFieldForPropertySymbol( propertySymbol = declaration, - fieldName = nameGenerator.generateUniqueFieldName(declaration.name.asString()), + fieldName = fieldName, containingClass = this, lightMemberOrigin = null, isTopLevel = isTopLevel, diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldForPropertySymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldForPropertySymbol.kt index 58fc96c1b63..e5584d595d3 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldForPropertySymbol.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldForPropertySymbol.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol import org.jetbrains.kotlin.analysis.api.symbols.markers.KtLiteralConstantValue import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtProperty internal class FirLightFieldForPropertySymbol( private val propertySymbol: KtPropertySymbol, @@ -29,9 +30,16 @@ internal class FirLightFieldForPropertySymbol( private val _returnedType: PsiType by lazyPub { analyzeWithSymbolAsContext(propertySymbol) { - propertySymbol.annotatedType.type.asPsiType(this@FirLightFieldForPropertySymbol) - ?: this@FirLightFieldForPropertySymbol.nonExistentType() - } + val isDelegated = (propertySymbol as? KtKotlinPropertySymbol)?.isDelegatedProperty == true + when { + isDelegated -> + (kotlinOrigin as? KtProperty)?.delegateExpression?.let { + it.getKtType()?.asPsiType(this@FirLightFieldForPropertySymbol) + } + else -> + propertySymbol.annotatedType.type.asPsiType(this@FirLightFieldForPropertySymbol) + } + } ?: nonExistentType() } private val _isDeprecated: Boolean by lazyPub {