FIR LC: populate fields from companion in interface
This commit is contained in:
committed by
Ilya Kirillov
parent
0212e9daae
commit
89d1a6bc0f
+23
@@ -12,10 +12,12 @@ import com.intellij.psi.search.SearchScope
|
|||||||
import com.intellij.psi.stubs.IStubElementType
|
import com.intellij.psi.stubs.IStubElementType
|
||||||
import com.intellij.psi.stubs.StubElement
|
import com.intellij.psi.stubs.StubElement
|
||||||
import org.jetbrains.annotations.NonNls
|
import org.jetbrains.annotations.NonNls
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||||
import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject
|
import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.classes.createInnerClasses
|
import org.jetbrains.kotlin.light.classes.symbol.classes.createInnerClasses
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.classes.getOrCreateFirLightClass
|
import org.jetbrains.kotlin.light.classes.symbol.classes.getOrCreateFirLightClass
|
||||||
@@ -94,6 +96,27 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected fun addFieldsFromCompanionIfNeeded(result: MutableList<KtLightField>) {
|
||||||
|
classOrObjectSymbol.companionObject?.run {
|
||||||
|
analyzeWithSymbolAsContext(this) {
|
||||||
|
getDeclaredMemberScope().getCallableSymbols()
|
||||||
|
.filterIsInstance<KtPropertySymbol>()
|
||||||
|
.filter { it.hasJvmFieldAnnotation() || it.hasJvmStaticAnnotation() || it is KtKotlinPropertySymbol && it.isConst }
|
||||||
|
.mapTo(result) {
|
||||||
|
FirLightFieldForPropertySymbol(
|
||||||
|
propertySymbol = it,
|
||||||
|
fieldName = it.name.asString(),
|
||||||
|
containingClass = this@FirLightClassForClassOrObjectSymbol,
|
||||||
|
lightMemberOrigin = null,
|
||||||
|
isTopLevel = false,
|
||||||
|
forceStatic = !it.hasJvmStaticAnnotation(),
|
||||||
|
takePropertyVisibility = true
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private val _containingFile: PsiFile? by lazyPub {
|
private val _containingFile: PsiFile? by lazyPub {
|
||||||
|
|
||||||
val kotlinOrigin = kotlinOrigin ?: return@lazyPub null
|
val kotlinOrigin = kotlinOrigin ?: return@lazyPub null
|
||||||
|
|||||||
-21
@@ -241,27 +241,6 @@ internal open class FirLightClassForSymbol(
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addFieldsFromCompanionIfNeeded(result: MutableList<KtLightField>) {
|
|
||||||
classOrObjectSymbol.companionObject?.run {
|
|
||||||
analyzeWithSymbolAsContext(this) {
|
|
||||||
getDeclaredMemberScope().getCallableSymbols()
|
|
||||||
.filterIsInstance<KtPropertySymbol>()
|
|
||||||
.filter { it.hasJvmFieldAnnotation() || it.hasJvmStaticAnnotation() || it is KtKotlinPropertySymbol && it.isConst }
|
|
||||||
.mapTo(result) {
|
|
||||||
FirLightFieldForPropertySymbol(
|
|
||||||
propertySymbol = it,
|
|
||||||
fieldName = it.name.asString(),
|
|
||||||
containingClass = this@FirLightClassForSymbol,
|
|
||||||
lightMemberOrigin = null,
|
|
||||||
isTopLevel = false,
|
|
||||||
forceStatic = !it.hasJvmStaticAnnotation(),
|
|
||||||
takePropertyVisibility = true
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun addPropertyBackingFields(result: MutableList<KtLightField>) {
|
private fun addPropertyBackingFields(result: MutableList<KtLightField>) {
|
||||||
analyzeWithSymbolAsContext(classOrObjectSymbol) {
|
analyzeWithSymbolAsContext(classOrObjectSymbol) {
|
||||||
val propertySymbols = classOrObjectSymbol.getDeclaredMemberScope().getCallableSymbols()
|
val propertySymbols = classOrObjectSymbol.getDeclaredMemberScope().getCallableSymbols()
|
||||||
|
|||||||
+1
@@ -31,6 +31,7 @@ internal open class FirLightInterfaceClassSymbol(
|
|||||||
private val _ownFields: List<KtLightField> by lazyPub {
|
private val _ownFields: List<KtLightField> by lazyPub {
|
||||||
mutableListOf<KtLightField>().also {
|
mutableListOf<KtLightField>().also {
|
||||||
addCompanionObjectFieldIfNeeded(it)
|
addCompanionObjectFieldIfNeeded(it)
|
||||||
|
addFieldsFromCompanionIfNeeded(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
@@ -2,6 +2,9 @@ public abstract interface TraitClassObjectField /* TraitClassObjectField*/ {
|
|||||||
@org.jetbrains.annotations.NotNull()
|
@org.jetbrains.annotations.NotNull()
|
||||||
public static final TraitClassObjectField.Companion Companion;
|
public static final TraitClassObjectField.Companion Companion;
|
||||||
|
|
||||||
|
@org.jetbrains.annotations.Nullable()
|
||||||
|
public static final java.lang.String x = "" /* initializer type: java.lang.String */;
|
||||||
|
|
||||||
|
|
||||||
public static final class Companion /* TraitClassObjectField.Companion*/ {
|
public static final class Companion /* TraitClassObjectField.Companion*/ {
|
||||||
@org.jetbrains.annotations.Nullable()
|
@org.jetbrains.annotations.Nullable()
|
||||||
|
|||||||
Reference in New Issue
Block a user