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
|
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.Fe10AnalysisContext
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
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.descriptors.impl.PropertyDescriptorImpl
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
import org.jetbrains.kotlin.name.CallableId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.psi.KtProperty
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||||
@@ -66,8 +70,8 @@ internal class KtFe10DescKotlinPropertySymbol(
|
|||||||
override val callableIdIfNonLocal: CallableId?
|
override val callableIdIfNonLocal: CallableId?
|
||||||
get() = withValidityAssertion { descriptor.callableIdIfNotLocal }
|
get() = withValidityAssertion { descriptor.callableIdIfNotLocal }
|
||||||
|
|
||||||
override val initializer: KtConstantValue?
|
override val initializer: KtInitializerValue?
|
||||||
get() = withValidityAssertion { descriptor.compileTimeInitializer?.toKtConstantValue() }
|
get() = withValidityAssertion { createKtInitializerValue(source as? KtProperty, descriptor, analysisContext) }
|
||||||
|
|
||||||
override val getter: KtPropertyGetterSymbol
|
override val getter: KtPropertyGetterSymbol
|
||||||
get() = withValidityAssertion {
|
get() = withValidityAssertion {
|
||||||
|
|||||||
+4
-2
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
|
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.Fe10AnalysisContext
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
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.descriptors.ConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
import org.jetbrains.kotlin.name.CallableId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.psi.KtProperty
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||||
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
||||||
@@ -71,8 +73,8 @@ internal class KtFe10DescSyntheticJavaPropertySymbol(
|
|||||||
KtFe10DescPropertySetterSymbol(setter, analysisContext)
|
KtFe10DescPropertySetterSymbol(setter, analysisContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val initializer: KtConstantValue?
|
override val initializer: KtInitializerValue?
|
||||||
get() = withValidityAssertion { descriptor.compileTimeInitializer?.toKtConstantValue() }
|
get() = withValidityAssertion { createKtInitializerValue(source as? KtProperty, descriptor, analysisContext) }
|
||||||
|
|
||||||
override val callableIdIfNonLocal: CallableId?
|
override val callableIdIfNonLocal: CallableId?
|
||||||
get() = withValidityAssertion { descriptor.callableIdIfNotLocal }
|
get() = withValidityAssertion { descriptor.callableIdIfNotLocal }
|
||||||
|
|||||||
+4
-2
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
|
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.Fe10AnalysisContext
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
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.load.java.descriptors.JavaForKotlinOverridePropertyDescriptor
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
import org.jetbrains.kotlin.name.CallableId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.psi.KtProperty
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||||
|
|
||||||
@@ -71,8 +73,8 @@ internal class KtFe10DescSyntheticJavaPropertySymbolForOverride(
|
|||||||
KtFe10DescPropertySetterSymbol(setter, analysisContext)
|
KtFe10DescPropertySetterSymbol(setter, analysisContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val initializer: KtConstantValue?
|
override val initializer: KtInitializerValue?
|
||||||
get() = withValidityAssertion { descriptor.compileTimeInitializer?.toKtConstantValue() }
|
get() = withValidityAssertion { createKtInitializerValue(source as? KtProperty, descriptor, analysisContext) }
|
||||||
|
|
||||||
override val callableIdIfNonLocal: CallableId?
|
override val callableIdIfNonLocal: CallableId?
|
||||||
get() = withValidityAssertion { descriptor.callableIdIfNotLocal }
|
get() = withValidityAssertion { descriptor.callableIdIfNotLocal }
|
||||||
|
|||||||
+31
-3
@@ -5,9 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base
|
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.KtStarProjectionTypeArgument
|
import org.jetbrains.kotlin.analysis.api.*
|
||||||
import org.jetbrains.kotlin.analysis.api.KtTypeArgument
|
|
||||||
import org.jetbrains.kotlin.analysis.api.KtTypeArgumentWithVariance
|
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtNamedConstantValue
|
import org.jetbrains.kotlin.analysis.api.annotations.KtNamedConstantValue
|
||||||
import org.jetbrains.kotlin.analysis.api.components.KtDeclarationRendererOptions
|
import org.jetbrains.kotlin.analysis.api.components.KtDeclarationRendererOptions
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
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.CallableId
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
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.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.CapturedType
|
import org.jetbrains.kotlin.resolve.calls.inference.CapturedType
|
||||||
import org.jetbrains.kotlin.resolve.constants.*
|
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.annotationClass
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||||
import org.jetbrains.kotlin.resolve.sam.SamConstructorDescriptor
|
import org.jetbrains.kotlin.resolve.sam.SamConstructorDescriptor
|
||||||
@@ -393,3 +394,30 @@ internal fun DeclarationDescriptor.render(analysisContext: Fe10AnalysisContext,
|
|||||||
internal fun CallableMemberDescriptor.getSymbolPointerSignature(analysisContext: Fe10AnalysisContext): String {
|
internal fun CallableMemberDescriptor.getSymbolPointerSignature(analysisContext: Fe10AnalysisContext): String {
|
||||||
return render(analysisContext, KtDeclarationRendererOptions.DEFAULT)
|
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
|
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.Fe10AnalysisContext
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
|
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.ktModality
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
|
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.descriptorBased.base.toKtType
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
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.*
|
||||||
|
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.descriptors.utils.cached
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyGetterSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyGetterSymbol
|
||||||
@@ -95,23 +102,8 @@ internal class KtFe10PsiKotlinPropertySymbol(
|
|||||||
override val isStatic: Boolean
|
override val isStatic: Boolean
|
||||||
get() = withValidityAssertion { false }
|
get() = withValidityAssertion { false }
|
||||||
|
|
||||||
override val initializer: KtConstantValue?
|
override val initializer: KtInitializerValue?
|
||||||
get() = withValidityAssertion {
|
get() = withValidityAssertion { createKtInitializerValue(psi, descriptor, analysisContext) }
|
||||||
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 isVal: Boolean
|
override val isVal: Boolean
|
||||||
get() = withValidityAssertion { !psi.isVar }
|
get() = withValidityAssertion { !psi.isVar }
|
||||||
|
|||||||
+6
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.fir.evaluate
|
package org.jetbrains.kotlin.analysis.api.fir.evaluate
|
||||||
|
|
||||||
import org.jetbrains.kotlin.KtSourceElement
|
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.FirCallableDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||||
@@ -36,6 +37,11 @@ internal object FirCompileTimeConstantEvaluator {
|
|||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun evaluateAsKtConstantExpression(expression: FirExpression): KtConstantValue? {
|
||||||
|
val evaluated = evaluate(expression) ?: return null
|
||||||
|
return KtFirConstantValueConverter.toConstantValue(evaluated)
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Rework to handle nested expressions
|
// TODO: Rework to handle nested expressions
|
||||||
// This is no longer used during FIR2IR where an inner expression is recursively rewritten to ConstExpression if possible.
|
// 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.
|
// 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.findPsi
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirMemberPropertySymbolPointer
|
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.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.cached
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.utils.firRef
|
import org.jetbrains.kotlin.analysis.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
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 isExtension: Boolean get() = firRef.withFir { it.receiverTypeRef != null }
|
||||||
override val initializer: KtConstantValue? by firRef.withFirAndCache(FirResolvePhase.BODY_RESOLVE) { fir ->
|
override val initializer by firRef.withFirAndCache(FirResolvePhase.BODY_RESOLVE) { fir ->
|
||||||
fir.initializer?.let { KtFirConstantValueConverter.toConstantValue(it, resolveState.rootModuleSession) }
|
fir.initializer?.asKtInitializerValue()
|
||||||
}
|
}
|
||||||
override val symbolKind: KtSymbolKind
|
override val symbolKind: KtSymbolKind
|
||||||
get() = firRef.withFir { fir ->
|
get() = firRef.withFir { fir ->
|
||||||
|
|||||||
+4
-2
@@ -6,12 +6,14 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.fir.symbols
|
package org.jetbrains.kotlin.analysis.api.fir.symbols
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
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.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
|
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.evaluate.KtFirConstantValueConverter
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
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.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.cached
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.utils.firRef
|
import org.jetbrains.kotlin.analysis.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||||
@@ -54,8 +56,8 @@ internal class KtFirSyntheticJavaPropertySymbol(
|
|||||||
firRef.receiverType(builder)
|
firRef.receiverType(builder)
|
||||||
}
|
}
|
||||||
override val isExtension: Boolean get() = firRef.withFir { it.receiverTypeRef != null }
|
override val isExtension: Boolean get() = firRef.withFir { it.receiverTypeRef != null }
|
||||||
override val initializer: KtConstantValue? by firRef.withFirAndCache(FirResolvePhase.BODY_RESOLVE) { fir ->
|
override val initializer: KtInitializerValue? by firRef.withFirAndCache(FirResolvePhase.BODY_RESOLVE) { fir ->
|
||||||
fir.initializer?.let { KtFirConstantValueConverter.toConstantValue(it, resolveState.rootModuleSession) }
|
fir.initializer?.asKtInitializerValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
override val modality: Modality get() = getModality()
|
override val modality: Modality get() = getModality()
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.fir.utils
|
package org.jetbrains.kotlin.analysis.api.fir.utils
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
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.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.classKind
|
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.low.level.api.fir.lazy.resolve.ResolveType
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability
|
import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
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.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
@@ -83,3 +89,11 @@ internal fun FirCallableSymbol<*>.computeImportableName(useSiteSession: FirSessi
|
|||||||
|
|
||||||
return if (canBeImported) callableId.asSingleFqName() else null
|
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
|
package org.jetbrains.kotlin.analysis.api.symbols
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo
|
import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
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.KtAnnotationApplication
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtNamedConstantValue
|
import org.jetbrains.kotlin.analysis.api.annotations.KtNamedConstantValue
|
||||||
@@ -173,6 +177,7 @@ public object DebugSymbolRenderer {
|
|||||||
is KtType -> renderType(value)
|
is KtType -> renderType(value)
|
||||||
is KtConstantValue -> renderConstantValue(value)
|
is KtConstantValue -> renderConstantValue(value)
|
||||||
is KtNamedConstantValue -> renderNamedConstantValue(value)
|
is KtNamedConstantValue -> renderNamedConstantValue(value)
|
||||||
|
is KtInitializerValue -> renderKtInitializerValue(value)
|
||||||
is KtAnnotationApplication -> renderAnnotationApplication(value)
|
is KtAnnotationApplication -> renderAnnotationApplication(value)
|
||||||
is KtAnnotationsList -> renderAnnotationsList(value)
|
is KtAnnotationsList -> renderAnnotationsList(value)
|
||||||
// Other custom values
|
// 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) {
|
private fun Block.renderAnnotationsList(value: KtAnnotationsList) {
|
||||||
renderList(value.annotations)
|
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 ignoredPropertyNames = setOf("psi", "token")
|
||||||
|
|
||||||
private val symbolImplementationPackageNames = listOf(
|
private val symbolImplementationPackageNames = listOf(
|
||||||
|
|||||||
+12
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.symbols
|
package org.jetbrains.kotlin.analysis.api.symbols
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.analysis.api.*
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames
|
import org.jetbrains.kotlin.builtins.StandardNames
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.*
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.*
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
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.CallableId
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
|
|
||||||
public sealed class KtVariableLikeSymbol : KtCallableSymbol(), KtNamedSymbol, KtSymbolWithKind {
|
public sealed class KtVariableLikeSymbol : KtCallableSymbol(), KtNamedSymbol, KtSymbolWithKind {
|
||||||
abstract override fun createPointer(): KtSymbolPointer<KtVariableLikeSymbol>
|
abstract override fun createPointer(): KtSymbolPointer<KtVariableLikeSymbol>
|
||||||
@@ -97,7 +99,16 @@ public sealed class KtPropertySymbol : KtVariableSymbol(),
|
|||||||
public abstract val isOverride: Boolean
|
public abstract val isOverride: Boolean
|
||||||
public abstract val isStatic: 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>
|
abstract override fun createPointer(): KtSymbolPointer<KtPropertySymbol>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 2
|
initializer: KtConstantInitializerValue(2)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
+2
-2
@@ -29,7 +29,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 123
|
initializer: KtConstantInitializerValue(123)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -73,7 +73,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: KtUnsupportedConstantValue
|
initializer: KtNonConstantInitializerValue(object : Runnable { ...)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 123
|
initializer: KtConstantInitializerValue(123)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -73,7 +73,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: KtUnsupportedConstantValue
|
initializer: KtNonConstantInitializerValue(object : Runnable { ...)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 10
|
initializer: KtConstantInitializerValue(10)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: 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
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: null
|
initializer: KtNonConstantInitializerValue(lazy { MyColor(1, 2, 3) })
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -171,7 +171,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: null
|
initializer: KtNonConstantInitializerValue(MyColor(1, 2, 3))
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
+8
-8
@@ -8,7 +8,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 1
|
initializer: KtConstantInitializerValue(1)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -39,7 +39,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 1
|
initializer: KtConstantInitializerValue(1)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -70,7 +70,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: true
|
hasSetter: true
|
||||||
initializer: 1
|
initializer: KtConstantInitializerValue(1)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -101,7 +101,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: true
|
hasSetter: true
|
||||||
initializer: 1
|
initializer: KtConstantInitializerValue(1)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -185,7 +185,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 1
|
initializer: KtConstantInitializerValue(1)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -268,7 +268,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 2
|
initializer: KtConstantInitializerValue(2)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -302,7 +302,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 2
|
initializer: KtConstantInitializerValue(2)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -333,7 +333,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 2
|
initializer: KtConstantInitializerValue(2)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 1
|
initializer: KtConstantInitializerValue(1)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -39,7 +39,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 1
|
initializer: KtConstantInitializerValue(1)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -70,7 +70,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: true
|
hasSetter: true
|
||||||
initializer: 1
|
initializer: KtConstantInitializerValue(1)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -101,7 +101,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: true
|
hasSetter: true
|
||||||
initializer: 1
|
initializer: KtConstantInitializerValue(1)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -185,7 +185,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 1
|
initializer: KtConstantInitializerValue(1)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -268,7 +268,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 2
|
initializer: KtConstantInitializerValue(2)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -302,7 +302,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 2
|
initializer: KtConstantInitializerValue(2)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
@@ -336,7 +336,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 2
|
initializer: KtConstantInitializerValue(2)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 10
|
initializer: KtConstantInitializerValue(10)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 10
|
initializer: KtConstantInitializerValue(10)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 10
|
initializer: KtConstantInitializerValue(10)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: 10
|
initializer: KtConstantInitializerValue(10)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
+1
-1
@@ -167,7 +167,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: KtUnsupportedConstantValue
|
initializer: KtNonConstantInitializerValue(this)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ KtKotlinPropertySymbol:
|
|||||||
hasBackingField: true
|
hasBackingField: true
|
||||||
hasGetter: true
|
hasGetter: true
|
||||||
hasSetter: false
|
hasSetter: false
|
||||||
initializer: KtUnsupportedConstantValue
|
initializer: KtNonConstantInitializerValue(this)
|
||||||
isConst: false
|
isConst: false
|
||||||
isDelegatedProperty: false
|
isDelegatedProperty: false
|
||||||
isExtension: false
|
isExtension: false
|
||||||
|
|||||||
+3
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.light.classes.symbol
|
package org.jetbrains.kotlin.light.classes.symbol
|
||||||
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
|
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
@@ -111,7 +112,8 @@ internal class FirLightFieldForPropertySymbol(
|
|||||||
if (propertySymbol !is KtKotlinPropertySymbol) return@lazyPub null
|
if (propertySymbol !is KtKotlinPropertySymbol) return@lazyPub null
|
||||||
if (!propertySymbol.isConst) return@lazyPub null
|
if (!propertySymbol.isConst) return@lazyPub null
|
||||||
if (!propertySymbol.isVal) 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
|
override fun getInitializer(): PsiExpression? = _initializer
|
||||||
|
|||||||
Reference in New Issue
Block a user