FIR LC: populate property from primary ctor later
This commit is contained in:
committed by
Ilya Kirillov
parent
fba480875f
commit
46a0c4be4b
+2
-1
@@ -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>
|
||||
}
|
||||
}
|
||||
|
||||
+15
-5
@@ -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(
|
||||
|
||||
+5
-1
@@ -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 }
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user