Analysis API: introduce KtInitializerValue for initializer of KtPropertySymbol
This commit is contained in:
+6
-2
@@ -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 {
|
||||
|
||||
+4
-2
@@ -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 }
|
||||
|
||||
+4
-2
@@ -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 }
|
||||
|
||||
+31
-3
@@ -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)
|
||||
}
|
||||
+10
-18
@@ -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 +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.
|
||||
|
||||
+3
-2
@@ -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 ->
|
||||
|
||||
+4
-2
@@ -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()
|
||||
+27
@@ -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(
|
||||
|
||||
+12
-1
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
-218
@@ -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
-8
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+3
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user