Analysis API: introduce KtInitializerValue for initializer of KtPropertySymbol

This commit is contained in:
Ilya Kirillov
2021-11-19 17:22:14 +01:00
parent 02adb1924b
commit ba918d45a2
27 changed files with 176 additions and 281 deletions
@@ -5,6 +5,9 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
@@ -22,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
@@ -66,8 +70,8 @@ internal class KtFe10DescKotlinPropertySymbol(
override val callableIdIfNonLocal: CallableId?
get() = withValidityAssertion { descriptor.callableIdIfNotLocal }
override val initializer: KtConstantValue?
get() = withValidityAssertion { descriptor.compileTimeInitializer?.toKtConstantValue() }
override val initializer: KtInitializerValue?
get() = withValidityAssertion { createKtInitializerValue(source as? KtProperty, descriptor, analysisContext) }
override val getter: KtPropertyGetterSymbol
get() = withValidityAssertion {
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
@@ -17,6 +18,7 @@ import org.jetbrains.kotlin.analysis.api.withValidityAssertion
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
@@ -71,8 +73,8 @@ internal class KtFe10DescSyntheticJavaPropertySymbol(
KtFe10DescPropertySetterSymbol(setter, analysisContext)
}
override val initializer: KtConstantValue?
get() = withValidityAssertion { descriptor.compileTimeInitializer?.toKtConstantValue() }
override val initializer: KtInitializerValue?
get() = withValidityAssertion { createKtInitializerValue(source as? KtProperty, descriptor, analysisContext) }
override val callableIdIfNonLocal: CallableId?
get() = withValidityAssertion { descriptor.callableIdIfNotLocal }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
@@ -18,6 +19,7 @@ import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.load.java.descriptors.JavaForKotlinOverridePropertyDescriptor
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
@@ -71,8 +73,8 @@ internal class KtFe10DescSyntheticJavaPropertySymbolForOverride(
KtFe10DescPropertySetterSymbol(setter, analysisContext)
}
override val initializer: KtConstantValue?
get() = withValidityAssertion { descriptor.compileTimeInitializer?.toKtConstantValue() }
override val initializer: KtInitializerValue?
get() = withValidityAssertion { createKtInitializerValue(source as? KtProperty, descriptor, analysisContext) }
override val callableIdIfNonLocal: CallableId?
get() = withValidityAssertion { descriptor.callableIdIfNotLocal }
@@ -5,9 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base
import org.jetbrains.kotlin.analysis.api.KtStarProjectionTypeArgument
import org.jetbrains.kotlin.analysis.api.KtTypeArgument
import org.jetbrains.kotlin.analysis.api.KtTypeArgumentWithVariance
import org.jetbrains.kotlin.analysis.api.*
import org.jetbrains.kotlin.analysis.api.annotations.KtNamedConstantValue
import org.jetbrains.kotlin.analysis.api.components.KtDeclarationRendererOptions
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
@@ -33,9 +31,12 @@ import org.jetbrains.kotlin.load.kotlin.toSourceElement
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.calls.inference.CapturedType
import org.jetbrains.kotlin.resolve.constants.*
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import org.jetbrains.kotlin.resolve.sam.SamConstructorDescriptor
@@ -393,3 +394,30 @@ internal fun DeclarationDescriptor.render(analysisContext: Fe10AnalysisContext,
internal fun CallableMemberDescriptor.getSymbolPointerSignature(analysisContext: Fe10AnalysisContext): String {
return render(analysisContext, KtDeclarationRendererOptions.DEFAULT)
}
internal fun createKtInitializerValue(
ktProperty: KtProperty?,
propertyDescriptor: PropertyDescriptor?,
analysisContext: Fe10AnalysisContext,
): KtInitializerValue? {
require(ktProperty != null || propertyDescriptor != null)
if (ktProperty?.initializer == null && propertyDescriptor?.compileTimeInitializer == null) {
return null
}
val initializer = ktProperty?.initializer
val compileTimeInitializer = propertyDescriptor?.compileTimeInitializer
if (compileTimeInitializer != null) {
return KtConstantInitializerValue(compileTimeInitializer.toKtConstantValue(), initializer)
}
if (initializer != null) {
val bindingContext = analysisContext.analyze(initializer)
val constantValue = ConstantExpressionEvaluator.getConstant(initializer, bindingContext)
if (constantValue != null) {
val evaluated = constantValue.toConstantValue(propertyDescriptor?.type ?: TypeUtils.NO_EXPECTED_TYPE).toKtConstantValue()
return KtConstantInitializerValue(evaluated, initializer)
}
}
return KtNonConstantInitializerValue(initializer)
}
@@ -5,14 +5,21 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.KtNonConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.createKtInitializerValue
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktModality
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtConstantValue
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktModality
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktSymbolKind
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktVisibility
import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyGetterSymbol
@@ -95,23 +102,8 @@ internal class KtFe10PsiKotlinPropertySymbol(
override val isStatic: Boolean
get() = withValidityAssertion { false }
override val initializer: KtConstantValue?
get() = withValidityAssertion {
val initializer = psi.initializer ?: return null
val compileTimeInitializer = descriptor?.compileTimeInitializer
if (compileTimeInitializer != null) {
return compileTimeInitializer.toKtConstantValue()
}
val bindingContext = analysisContext.analyze(initializer)
val constantValue = ConstantExpressionEvaluator.getConstant(initializer, bindingContext)
if (constantValue != null) {
return constantValue.toConstantValue(descriptor?.type ?: TypeUtils.NO_EXPECTED_TYPE).toKtConstantValue()
}
return KtUnsupportedConstantValue
}
override val initializer: KtInitializerValue?
get() = withValidityAssertion { createKtInitializerValue(psi, descriptor, analysisContext) }
override val isVal: Boolean
get() = withValidityAssertion { !psi.isVar }
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir.evaluate
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtConstantValue
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
@@ -36,6 +37,11 @@ internal object FirCompileTimeConstantEvaluator {
else -> null
}
fun evaluateAsKtConstantExpression(expression: FirExpression): KtConstantValue? {
val evaluated = evaluate(expression) ?: return null
return KtFirConstantValueConverter.toConstantValue(evaluated)
}
// TODO: Rework to handle nested expressions
// This is no longer used during FIR2IR where an inner expression is recursively rewritten to ConstExpression if possible.
// Maybe rewrite this to a recursive version with caching either here or in provider.
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.api.fir.evaluate.KtFirConstantValueConverte
import org.jetbrains.kotlin.analysis.api.fir.findPsi
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirMemberPropertySymbolPointer
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.createSignature
import org.jetbrains.kotlin.analysis.api.fir.utils.asKtInitializerValue
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
import org.jetbrains.kotlin.analysis.api.fir.utils.firRef
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
@@ -68,8 +69,8 @@ internal class KtFirKotlinPropertySymbol(
}
override val isExtension: Boolean get() = firRef.withFir { it.receiverTypeRef != null }
override val initializer: KtConstantValue? by firRef.withFirAndCache(FirResolvePhase.BODY_RESOLVE) { fir ->
fir.initializer?.let { KtFirConstantValueConverter.toConstantValue(it, resolveState.rootModuleSession) }
override val initializer by firRef.withFirAndCache(FirResolvePhase.BODY_RESOLVE) { fir ->
fir.initializer?.asKtInitializerValue()
}
override val symbolKind: KtSymbolKind
get() = firRef.withFir { fir ->
@@ -6,12 +6,14 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
import org.jetbrains.kotlin.analysis.api.fir.evaluate.KtFirConstantValueConverter
import org.jetbrains.kotlin.analysis.api.fir.findPsi
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirJavaSyntheticPropertySymbolPointer
import org.jetbrains.kotlin.analysis.api.fir.utils.asKtInitializerValue
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
import org.jetbrains.kotlin.analysis.api.fir.utils.firRef
import org.jetbrains.kotlin.analysis.api.symbols.*
@@ -54,8 +56,8 @@ internal class KtFirSyntheticJavaPropertySymbol(
firRef.receiverType(builder)
}
override val isExtension: Boolean get() = firRef.withFir { it.receiverTypeRef != null }
override val initializer: KtConstantValue? by firRef.withFirAndCache(FirResolvePhase.BODY_RESOLVE) { fir ->
fir.initializer?.let { KtFirConstantValueConverter.toConstantValue(it, resolveState.rootModuleSession) }
override val initializer: KtInitializerValue? by firRef.withFirAndCache(FirResolvePhase.BODY_RESOLVE) { fir ->
fir.initializer?.asKtInitializerValue()
}
override val modality: Modality get() = getModality()
@@ -5,6 +5,10 @@
package org.jetbrains.kotlin.analysis.api.fir.utils
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.KtNonConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirCompileTimeConstantEvaluator
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.checkers.classKind
@@ -22,6 +26,8 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.withFirDeclaration
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.ResolveType
import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.*
@@ -83,3 +89,11 @@ internal fun FirCallableSymbol<*>.computeImportableName(useSiteSession: FirSessi
return if (canBeImported) callableId.asSingleFqName() else null
}
internal fun FirExpression.asKtInitializerValue(): KtInitializerValue {
val ktExpression = psi as? KtExpression
return when (val evaluated = FirCompileTimeConstantEvaluator.evaluateAsKtConstantExpression(this)) {
null -> KtNonConstantInitializerValue(ktExpression)
else -> KtConstantInitializerValue(evaluated, ktExpression)
}
}
@@ -0,0 +1,22 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.analysis.api
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtConstantValue
import org.jetbrains.kotlin.psi.KtExpression
public sealed class KtInitializerValue {
public abstract val initializerPsi: KtExpression?
}
public class KtConstantInitializerValue(
public val constant: KtConstantValue,
override val initializerPsi: KtExpression?
) : KtInitializerValue()
public class KtNonConstantInitializerValue(
override val initializerPsi: KtExpression?
) : KtInitializerValue()
@@ -5,8 +5,12 @@
package org.jetbrains.kotlin.analysis.api.symbols
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.KtNonConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.annotations.KtNamedConstantValue
@@ -173,6 +177,7 @@ public object DebugSymbolRenderer {
is KtType -> renderType(value)
is KtConstantValue -> renderConstantValue(value)
is KtNamedConstantValue -> renderNamedConstantValue(value)
is KtInitializerValue -> renderKtInitializerValue(value)
is KtAnnotationApplication -> renderAnnotationApplication(value)
is KtAnnotationsList -> renderAnnotationsList(value)
// Other custom values
@@ -193,6 +198,21 @@ public object DebugSymbolRenderer {
}
}
private fun Block.renderKtInitializerValue(value: KtInitializerValue) {
when (value) {
is KtConstantInitializerValue -> {
append("KtConstantInitializerValue(")
renderConstantValue(value.constant)
append(")")
}
is KtNonConstantInitializerValue -> {
append("KtNonConstantInitializerValue(")
append(value.initializerPsi?.firstLineOfPsi() ?: "NO_PSI")
append(")")
}
}
}
private fun Block.renderAnnotationsList(value: KtAnnotationsList) {
renderList(value.annotations)
}
@@ -209,6 +229,13 @@ public object DebugSymbolRenderer {
}
}
private fun PsiElement.firstLineOfPsi(): String {
val text = text
val lines = text.lines()
return if (lines.count() <= 1) text
else lines.first() + " ..."
}
private val ignoredPropertyNames = setOf("psi", "token")
private val symbolImplementationPackageNames = listOf(
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.symbols
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.*
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.analysis.api.symbols.markers.*
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
@@ -13,6 +14,7 @@ import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtExpression
public sealed class KtVariableLikeSymbol : KtCallableSymbol(), KtNamedSymbol, KtSymbolWithKind {
abstract override fun createPointer(): KtSymbolPointer<KtVariableLikeSymbol>
@@ -97,7 +99,16 @@ public sealed class KtPropertySymbol : KtVariableSymbol(),
public abstract val isOverride: Boolean
public abstract val isStatic: Boolean
public abstract val initializer: KtConstantValue?
/**
* Value which is provided for as property initializer.
*
* Possible values:
* - `null` - no initializer was provided
* - [KtConstantInitializerValue] - initializer value was provided, and it is a compile-time constant
* - [KtNonConstantInitializerValue] - initializer value was provided, and it is not a compile-time constant. In case of declaration from source it would include correponding [KtExpression]
*
*/
public abstract val initializer: KtInitializerValue?
abstract override fun createPointer(): KtSymbolPointer<KtPropertySymbol>
}
@@ -38,7 +38,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -29,7 +29,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 123
initializer: KtConstantInitializerValue(123)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -73,7 +73,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
initializer: KtNonConstantInitializerValue(object : Runnable { ...)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -29,7 +29,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 123
initializer: KtConstantInitializerValue(123)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -73,7 +73,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
initializer: KtNonConstantInitializerValue(object : Runnable { ...)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 10
initializer: KtConstantInitializerValue(10)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -1,218 +0,0 @@
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
hasDefaultValue: false
isExtension: false
isVararg: false
name: x
origin: SOURCE
receiverType: null
symbolKind: LOCAL
type: kotlin/Int
deprecationStatus: null
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
hasDefaultValue: false
isExtension: false
isVararg: false
name: y
origin: SOURCE
receiverType: null
symbolKind: LOCAL
type: kotlin/Int
deprecationStatus: null
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
hasDefaultValue: false
isExtension: false
isVararg: false
name: z
origin: SOURCE
receiverType: null
symbolKind: LOCAL
type: kotlin/Int
deprecationStatus: null
KtConstructorSymbol:
annotationsList: []
callableIdIfNonLocal: null
containingClassIdIfNonLocal: MyColor
hasStableParameterNames: true
isExtension: false
isPrimary: true
origin: SOURCE
receiverType: null
symbolKind: CLASS_MEMBER
type: MyColor
typeParameters: []
valueParameters: [
KtValueParameterSymbol(x)
KtValueParameterSymbol(y)
KtValueParameterSymbol(z)
]
visibility: Public
deprecationStatus: null
KtNamedClassOrObjectSymbol:
annotationsList: []
classIdIfNonLocal: MyColor
classKind: CLASS
companionObject: null
isData: false
isExternal: false
isFun: false
isInline: false
isInner: false
modality: FINAL
name: MyColor
origin: SOURCE
superTypes: [
kotlin/Any
]
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
deprecationStatus: null
KtAnonymousFunctionSymbol:
callableIdIfNonLocal: null
hasStableParameterNames: true
isExtension: false
origin: SOURCE
receiverType: null
symbolKind: LOCAL
type: MyColor
valueParameters: []
deprecationStatus: null
KtKotlinPropertySymbol:
annotationsList: []
callableIdIfNonLocal: /Some.delegate
getter: KtPropertyGetterSymbol(<getter>)
hasBackingField: false
hasGetter: true
hasSetter: false
initializer: null
isConst: false
isDelegatedProperty: true
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
isVal: true
modality: FINAL
name: delegate
origin: SOURCE
receiverType: null
setter: null
symbolKind: CLASS_MEMBER
type: MyColor
typeParameters: []
visibility: Public
getDispatchReceiver(): Some
deprecationStatus: null
getterDeprecationStatus: null
javaGetterName: getDelegate
javaSetterName: null
setterDeprecationStatus: null
KtAnonymousFunctionSymbol:
callableIdIfNonLocal: null
hasStableParameterNames: true
isExtension: false
origin: SOURCE
receiverType: null
symbolKind: LOCAL
type: MyColor
valueParameters: []
deprecationStatus: null
KtKotlinPropertySymbol:
annotationsList: []
callableIdIfNonLocal: /Some.lambda
getter: KtPropertyGetterSymbol(<getter>)
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
isConst: false
isDelegatedProperty: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
isVal: true
modality: FINAL
name: lambda
origin: SOURCE
receiverType: null
setter: null
symbolKind: CLASS_MEMBER
type: kotlin/Lazy<MyColor>
typeParameters: []
visibility: Public
getDispatchReceiver(): Some
deprecationStatus: null
getterDeprecationStatus: null
javaGetterName: getLambda
javaSetterName: null
setterDeprecationStatus: null
KtKotlinPropertySymbol:
annotationsList: []
callableIdIfNonLocal: /Some.nonLazy
getter: KtPropertyGetterSymbol(<getter>)
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
isConst: false
isDelegatedProperty: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
isVal: true
modality: FINAL
name: nonLazy
origin: SOURCE
receiverType: null
setter: null
symbolKind: CLASS_MEMBER
type: MyColor
typeParameters: []
visibility: Public
getDispatchReceiver(): Some
deprecationStatus: null
getterDeprecationStatus: null
javaGetterName: getNonLazy
javaSetterName: null
setterDeprecationStatus: null
KtNamedClassOrObjectSymbol:
annotationsList: []
classIdIfNonLocal: Some
classKind: CLASS
companionObject: null
isData: false
isExternal: false
isFun: false
isInline: false
isInner: false
modality: FINAL
name: Some
origin: SOURCE
superTypes: [
kotlin/Any
]
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
deprecationStatus: null
@@ -139,7 +139,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: null
initializer: KtNonConstantInitializerValue(lazy { MyColor(1, 2, 3) })
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -171,7 +171,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: null
initializer: KtNonConstantInitializerValue(MyColor(1, 2, 3))
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -8,7 +8,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -39,7 +39,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -70,7 +70,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: true
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -101,7 +101,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: true
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -185,7 +185,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -268,7 +268,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -302,7 +302,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -333,7 +333,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -8,7 +8,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -39,7 +39,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -70,7 +70,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: true
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -101,7 +101,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: true
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -185,7 +185,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -268,7 +268,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -302,7 +302,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -336,7 +336,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 10
initializer: KtConstantInitializerValue(10)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 10
initializer: KtConstantInitializerValue(10)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 10
initializer: KtConstantInitializerValue(10)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 10
initializer: KtConstantInitializerValue(10)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -167,7 +167,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
initializer: KtNonConstantInitializerValue(this)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -167,7 +167,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
initializer: KtNonConstantInitializerValue(this)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.light.classes.symbol
import com.intellij.psi.*
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
@@ -111,7 +112,8 @@ internal class FirLightFieldForPropertySymbol(
if (propertySymbol !is KtKotlinPropertySymbol) return@lazyPub null
if (!propertySymbol.isConst) return@lazyPub null
if (!propertySymbol.isVal) return@lazyPub null
(propertySymbol.initializer as? KtLiteralConstantValue<*>)?.createPsiLiteral(this)
val constInitializer = propertySymbol.initializer as? KtConstantInitializerValue ?: return@lazyPub null
(constInitializer.constant as? KtLiteralConstantValue<*>)?.createPsiLiteral(this)
}
override fun getInitializer(): PsiExpression? = _initializer