Analysis API: introduce KtInitializerValue for initializer of KtPropertySymbol

This commit is contained in:
Ilya Kirillov
2021-11-19 17:22:14 +01:00
parent 02adb1924b
commit ba918d45a2
27 changed files with 176 additions and 281 deletions
@@ -0,0 +1,22 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.analysis.api
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtConstantValue
import org.jetbrains.kotlin.psi.KtExpression
public sealed class KtInitializerValue {
public abstract val initializerPsi: KtExpression?
}
public class KtConstantInitializerValue(
public val constant: KtConstantValue,
override val initializerPsi: KtExpression?
) : KtInitializerValue()
public class KtNonConstantInitializerValue(
override val initializerPsi: KtExpression?
) : KtInitializerValue()
@@ -5,8 +5,12 @@
package org.jetbrains.kotlin.analysis.api.symbols
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.KtNonConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.annotations.KtNamedConstantValue
@@ -173,6 +177,7 @@ public object DebugSymbolRenderer {
is KtType -> renderType(value)
is KtConstantValue -> renderConstantValue(value)
is KtNamedConstantValue -> renderNamedConstantValue(value)
is KtInitializerValue -> renderKtInitializerValue(value)
is KtAnnotationApplication -> renderAnnotationApplication(value)
is KtAnnotationsList -> renderAnnotationsList(value)
// Other custom values
@@ -193,6 +198,21 @@ public object DebugSymbolRenderer {
}
}
private fun Block.renderKtInitializerValue(value: KtInitializerValue) {
when (value) {
is KtConstantInitializerValue -> {
append("KtConstantInitializerValue(")
renderConstantValue(value.constant)
append(")")
}
is KtNonConstantInitializerValue -> {
append("KtNonConstantInitializerValue(")
append(value.initializerPsi?.firstLineOfPsi() ?: "NO_PSI")
append(")")
}
}
}
private fun Block.renderAnnotationsList(value: KtAnnotationsList) {
renderList(value.annotations)
}
@@ -209,6 +229,13 @@ public object DebugSymbolRenderer {
}
}
private fun PsiElement.firstLineOfPsi(): String {
val text = text
val lines = text.lines()
return if (lines.count() <= 1) text
else lines.first() + " ..."
}
private val ignoredPropertyNames = setOf("psi", "token")
private val symbolImplementationPackageNames = listOf(
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.symbols
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.*
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.analysis.api.symbols.markers.*
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
@@ -13,6 +14,7 @@ import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtExpression
public sealed class KtVariableLikeSymbol : KtCallableSymbol(), KtNamedSymbol, KtSymbolWithKind {
abstract override fun createPointer(): KtSymbolPointer<KtVariableLikeSymbol>
@@ -97,7 +99,16 @@ public sealed class KtPropertySymbol : KtVariableSymbol(),
public abstract val isOverride: Boolean
public abstract val isStatic: Boolean
public abstract val initializer: KtConstantValue?
/**
* Value which is provided for as property initializer.
*
* Possible values:
* - `null` - no initializer was provided
* - [KtConstantInitializerValue] - initializer value was provided, and it is a compile-time constant
* - [KtNonConstantInitializerValue] - initializer value was provided, and it is not a compile-time constant. In case of declaration from source it would include correponding [KtExpression]
*
*/
public abstract val initializer: KtInitializerValue?
abstract override fun createPointer(): KtSymbolPointer<KtPropertySymbol>
}
@@ -38,7 +38,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -29,7 +29,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 123
initializer: KtConstantInitializerValue(123)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -73,7 +73,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
initializer: KtNonConstantInitializerValue(object : Runnable { ...)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -29,7 +29,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 123
initializer: KtConstantInitializerValue(123)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -73,7 +73,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
initializer: KtNonConstantInitializerValue(object : Runnable { ...)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 10
initializer: KtConstantInitializerValue(10)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -1,218 +0,0 @@
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
hasDefaultValue: false
isExtension: false
isVararg: false
name: x
origin: SOURCE
receiverType: null
symbolKind: LOCAL
type: kotlin/Int
deprecationStatus: null
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
hasDefaultValue: false
isExtension: false
isVararg: false
name: y
origin: SOURCE
receiverType: null
symbolKind: LOCAL
type: kotlin/Int
deprecationStatus: null
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
hasDefaultValue: false
isExtension: false
isVararg: false
name: z
origin: SOURCE
receiverType: null
symbolKind: LOCAL
type: kotlin/Int
deprecationStatus: null
KtConstructorSymbol:
annotationsList: []
callableIdIfNonLocal: null
containingClassIdIfNonLocal: MyColor
hasStableParameterNames: true
isExtension: false
isPrimary: true
origin: SOURCE
receiverType: null
symbolKind: CLASS_MEMBER
type: MyColor
typeParameters: []
valueParameters: [
KtValueParameterSymbol(x)
KtValueParameterSymbol(y)
KtValueParameterSymbol(z)
]
visibility: Public
deprecationStatus: null
KtNamedClassOrObjectSymbol:
annotationsList: []
classIdIfNonLocal: MyColor
classKind: CLASS
companionObject: null
isData: false
isExternal: false
isFun: false
isInline: false
isInner: false
modality: FINAL
name: MyColor
origin: SOURCE
superTypes: [
kotlin/Any
]
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
deprecationStatus: null
KtAnonymousFunctionSymbol:
callableIdIfNonLocal: null
hasStableParameterNames: true
isExtension: false
origin: SOURCE
receiverType: null
symbolKind: LOCAL
type: MyColor
valueParameters: []
deprecationStatus: null
KtKotlinPropertySymbol:
annotationsList: []
callableIdIfNonLocal: /Some.delegate
getter: KtPropertyGetterSymbol(<getter>)
hasBackingField: false
hasGetter: true
hasSetter: false
initializer: null
isConst: false
isDelegatedProperty: true
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
isVal: true
modality: FINAL
name: delegate
origin: SOURCE
receiverType: null
setter: null
symbolKind: CLASS_MEMBER
type: MyColor
typeParameters: []
visibility: Public
getDispatchReceiver(): Some
deprecationStatus: null
getterDeprecationStatus: null
javaGetterName: getDelegate
javaSetterName: null
setterDeprecationStatus: null
KtAnonymousFunctionSymbol:
callableIdIfNonLocal: null
hasStableParameterNames: true
isExtension: false
origin: SOURCE
receiverType: null
symbolKind: LOCAL
type: MyColor
valueParameters: []
deprecationStatus: null
KtKotlinPropertySymbol:
annotationsList: []
callableIdIfNonLocal: /Some.lambda
getter: KtPropertyGetterSymbol(<getter>)
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
isConst: false
isDelegatedProperty: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
isVal: true
modality: FINAL
name: lambda
origin: SOURCE
receiverType: null
setter: null
symbolKind: CLASS_MEMBER
type: kotlin/Lazy<MyColor>
typeParameters: []
visibility: Public
getDispatchReceiver(): Some
deprecationStatus: null
getterDeprecationStatus: null
javaGetterName: getLambda
javaSetterName: null
setterDeprecationStatus: null
KtKotlinPropertySymbol:
annotationsList: []
callableIdIfNonLocal: /Some.nonLazy
getter: KtPropertyGetterSymbol(<getter>)
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
isConst: false
isDelegatedProperty: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
isVal: true
modality: FINAL
name: nonLazy
origin: SOURCE
receiverType: null
setter: null
symbolKind: CLASS_MEMBER
type: MyColor
typeParameters: []
visibility: Public
getDispatchReceiver(): Some
deprecationStatus: null
getterDeprecationStatus: null
javaGetterName: getNonLazy
javaSetterName: null
setterDeprecationStatus: null
KtNamedClassOrObjectSymbol:
annotationsList: []
classIdIfNonLocal: Some
classKind: CLASS
companionObject: null
isData: false
isExternal: false
isFun: false
isInline: false
isInner: false
modality: FINAL
name: Some
origin: SOURCE
superTypes: [
kotlin/Any
]
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
deprecationStatus: null
@@ -139,7 +139,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: null
initializer: KtNonConstantInitializerValue(lazy { MyColor(1, 2, 3) })
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -171,7 +171,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: null
initializer: KtNonConstantInitializerValue(MyColor(1, 2, 3))
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -8,7 +8,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -39,7 +39,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -70,7 +70,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: true
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -101,7 +101,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: true
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -185,7 +185,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -268,7 +268,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -302,7 +302,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -333,7 +333,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -8,7 +8,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -39,7 +39,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -70,7 +70,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: true
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -101,7 +101,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: true
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -185,7 +185,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 1
initializer: KtConstantInitializerValue(1)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -268,7 +268,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -302,7 +302,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -336,7 +336,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 2
initializer: KtConstantInitializerValue(2)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 10
initializer: KtConstantInitializerValue(10)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 10
initializer: KtConstantInitializerValue(10)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 10
initializer: KtConstantInitializerValue(10)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -5,7 +5,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: 10
initializer: KtConstantInitializerValue(10)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -167,7 +167,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
initializer: KtNonConstantInitializerValue(this)
isConst: false
isDelegatedProperty: false
isExtension: false
@@ -167,7 +167,7 @@ KtKotlinPropertySymbol:
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtUnsupportedConstantValue
initializer: KtNonConstantInitializerValue(this)
isConst: false
isDelegatedProperty: false
isExtension: false