SLC: implement PsiVariable#computeConstantValue for light field
This commit is contained in:
committed by
Ilya Kirillov
parent
a58e0803fb
commit
fc1eb02590
+1
-1
@@ -38,7 +38,7 @@ internal abstract class SymbolLightField protected constructor(
|
||||
override fun getContainingFile(): PsiFile? = containingClass.containingFile
|
||||
override fun hasInitializer(): Boolean = initializer !== null
|
||||
|
||||
override fun computeConstantValue(): Any? = null //TODO _constantInitializer?.value
|
||||
override fun computeConstantValue(): Any? = null
|
||||
|
||||
override fun computeConstantValue(visitedVars: MutableSet<PsiVariable>?): Any? = computeConstantValue()
|
||||
|
||||
|
||||
+19
-4
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.light.classes.symbol.fields
|
||||
import com.intellij.psi.*
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.isValid
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
||||
@@ -115,14 +114,30 @@ internal class SymbolLightFieldForProperty(
|
||||
|
||||
override fun getModifierList(): PsiModifierList = _modifierList
|
||||
|
||||
private val _initializer by lazyPub {
|
||||
private val _initializerValue by lazyPub {
|
||||
if (propertySymbol !is KtKotlinPropertySymbol) return@lazyPub null
|
||||
val constInitializer = propertySymbol.initializer as? KtConstantInitializerValue ?: return@lazyPub null
|
||||
(constInitializer.constant as? KtConstantValue)?.createPsiLiteral(this)
|
||||
(propertySymbol.initializer as? KtConstantInitializerValue)?.constant
|
||||
}
|
||||
|
||||
private val _initializer by lazyPub {
|
||||
_initializerValue?.createPsiLiteral(this)
|
||||
}
|
||||
|
||||
override fun getInitializer(): PsiExpression? = _initializer
|
||||
|
||||
private val _constantValue by lazyPub {
|
||||
_initializerValue?.value?.takeIf {
|
||||
// val => final
|
||||
propertySymbol.isVal &&
|
||||
// NB: not as?, since _initializerValue already checks that
|
||||
(propertySymbol as KtKotlinPropertySymbol).isConst &&
|
||||
// javac rejects all non-primitive and non String constants
|
||||
(propertySymbol.returnType.isPrimitive || propertySymbol.returnType.isString)
|
||||
}
|
||||
}
|
||||
|
||||
override fun computeConstantValue(): Any? = _constantValue
|
||||
|
||||
override fun equals(other: Any?): Boolean =
|
||||
this === other ||
|
||||
(other is SymbolLightFieldForProperty &&
|
||||
|
||||
Reference in New Issue
Block a user