FIR LC: populate property from primary ctor later

This commit is contained in:
Jinseong Jeon
2021-08-02 23:55:40 -07:00
committed by Ilya Kirillov
parent fba480875f
commit 46a0c4be4b
14 changed files with 37 additions and 8 deletions
@@ -91,6 +91,7 @@ public sealed class KtPropertySymbol : KtVariableSymbol(),
public abstract val hasBackingField: Boolean
public abstract val isFromPrimaryConstructor: Boolean
public abstract val isOverride: Boolean
public abstract val isStatic: Boolean
@@ -138,4 +139,4 @@ public abstract class KtValueParameterSymbol : KtVariableLikeSymbol(), KtSymbolW
public abstract val isVararg: Boolean
abstract override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol>
}
}
@@ -142,11 +142,12 @@ internal fun FirLightClassBase.createMethods(
isTopLevel: Boolean = false,
suppressStaticForMethods: Boolean = false
) {
for (declaration in declarations) {
val declarationGroups = declarations.groupBy { it is KtPropertySymbol && it.isFromPrimaryConstructor }
fun handleDeclaration(declaration: KtCallableSymbol) {
when (declaration) {
is KtFunctionSymbol -> {
if (declaration.isInline || declaration.isHiddenOrSynthetic()) continue
if (declaration.isInline || declaration.isHiddenOrSynthetic()) return
var methodIndex = METHOD_INDEX_BASE
result.add(
@@ -184,14 +185,14 @@ internal fun FirLightClassBase.createMethods(
}
is KtPropertySymbol -> {
if (declaration is KtKotlinPropertySymbol && declaration.isConst) continue
if (declaration is KtKotlinPropertySymbol && declaration.isConst) return
if (declaration.visibility.isPrivateOrPrivateToThis() &&
declaration.getter?.hasBody == false &&
declaration.setter?.hasBody == false
) continue
) return
if (declaration.hasJvmFieldAnnotation()) continue
if (declaration.hasJvmFieldAnnotation()) return
fun KtPropertyAccessorSymbol.needToCreateAccessor(siteTarget: AnnotationUseSiteTarget): Boolean {
if (isInline) return false
@@ -236,6 +237,15 @@ internal fun FirLightClassBase.createMethods(
is KtConstructorSymbol -> error("Constructors should be handled separately and not passed to this function")
}
}
// Regular members
declarationGroups[false]?.forEach {
handleDeclaration(it)
}
// Then, properties from the primary constructor parameters
declarationGroups[true]?.forEach {
handleDeclaration(it)
}
}
internal fun FirLightClassBase.createField(
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
import org.jetbrains.kotlin.fir.containingClass
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
@@ -89,7 +90,6 @@ internal class KtFirKotlinPropertySymbol(
override val callableIdIfNonLocal: CallableId? get() = getCallableIdIfNonLocal()
override val getter: KtPropertyGetterSymbol? by firRef.withFirAndCache(FirResolvePhase.RAW_FIR) { property ->
property.getter?.let { builder.callableBuilder.buildPropertyAccessorSymbol(it) } as? KtPropertyGetterSymbol
}
@@ -104,6 +104,10 @@ internal class KtFirKotlinPropertySymbol(
override val isConst: Boolean get() = firRef.withFir { it.isConst }
override val isFromPrimaryConstructor: Boolean
get() = firRef.withFir {
it.fromPrimaryConstructor == true || it.source?.kind == FirFakeSourceElementKind.PropertyFromParameter
}
override val isOverride: Boolean get() = firRef.withFir { it.isOverride }
override val isStatic: Boolean get() = firRef.withFir { it.isStatic }
@@ -71,7 +71,6 @@ internal class KtFirSyntheticJavaPropertySymbol(
override val callableIdIfNonLocal: CallableId? get() = getCallableIdIfNonLocal()
override val getter: KtPropertyGetterSymbol by firRef.withFirAndCache(FirResolvePhase.RAW_FIR) { property ->
property.getter.let { builder.callableBuilder.buildPropertyAccessorSymbol(it) } as KtPropertyGetterSymbol
}
@@ -83,6 +82,7 @@ internal class KtFirSyntheticJavaPropertySymbol(
override val javaGetterName: Name get() = firRef.withFir { it.getter.delegate.name }
override val javaSetterName: Name? get() = firRef.withFir { it.setter?.delegate?.name }
override val isFromPrimaryConstructor: Boolean get() = false
override val isOverride: Boolean get() = firRef.withFir { it.isOverride }
override val isStatic: Boolean get() = firRef.withFir { it.isStatic }
@@ -44,6 +44,7 @@ KtFirKotlinPropertySymbol:
initializer: 2
isConst: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
@@ -45,6 +45,7 @@ KtFirKotlinPropertySymbol:
initializer: 2
isConst: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
@@ -527,6 +527,7 @@ KtFirKotlinPropertySymbol:
initializer: null
isConst: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
@@ -73,6 +73,7 @@ KtFirSyntheticJavaPropertySymbol:
hasSetter: false
initializer: null
isExtension: false
isFromPrimaryConstructor: false
isOverride: false
isStatic: false
isVal: true
@@ -35,6 +35,7 @@ KtFirKotlinPropertySymbol:
initializer: 123
isConst: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
@@ -72,6 +73,7 @@ KtFirKotlinPropertySymbol:
initializer: KtUnsupportedConstantValue
isConst: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
@@ -11,6 +11,7 @@ KtFirKotlinPropertySymbol:
initializer: 10
isConst: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
@@ -60,6 +60,7 @@ KtFirKotlinPropertySymbol:
initializer: null
isConst: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: true
isStatic: false
@@ -95,6 +96,7 @@ KtFirKotlinPropertySymbol:
initializer: null
isConst: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
@@ -11,6 +11,7 @@ KtFirKotlinPropertySymbol:
initializer: 10
isConst: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
@@ -53,6 +54,7 @@ KtFirKotlinPropertySymbol:
initializer: null
isConst: false
isExtension: true
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
@@ -11,6 +11,7 @@ KtFirKotlinPropertySymbol:
initializer: 10
isConst: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
@@ -53,6 +54,7 @@ KtFirKotlinPropertySymbol:
initializer: null
isConst: false
isExtension: true
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
@@ -184,6 +184,7 @@ KtFirKotlinPropertySymbol:
initializer: KtUnsupportedConstantValue
isConst: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false