FIR IDE: build KtJavaFieldSymbol only for Java fields
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.fir.declarations.builder
|
||||
|
||||
import kotlin.contracts.*
|
||||
import org.jetbrains.kotlin.fir.FirImplementationDetail
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||
@@ -51,6 +52,7 @@ open class FirFieldBuilder : FirAnnotationContainerBuilder {
|
||||
open var containerSource: DeserializedContainerSource? = null
|
||||
open var dispatchReceiverType: ConeKotlinType? = null
|
||||
|
||||
@OptIn(FirImplementationDetail::class)
|
||||
override fun build(): FirField {
|
||||
return FirFieldImpl(
|
||||
source,
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirImplementationDetail
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
|
||||
@@ -29,7 +30,7 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
internal class FirFieldImpl(
|
||||
class FirFieldImpl @FirImplementationDetail constructor(
|
||||
override val source: FirSourceElement?,
|
||||
override val session: FirSession,
|
||||
override var resolvePhase: FirResolvePhase,
|
||||
|
||||
+1
@@ -209,6 +209,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
value = "!isVar"
|
||||
withGetter = true
|
||||
}
|
||||
publicImplementation()
|
||||
|
||||
defaultNull("delegateFieldSymbol", "receiverTypeRef", "delegate", "getter", "setter", withGetter = true)
|
||||
}
|
||||
|
||||
+13
-4
@@ -8,11 +8,12 @@ package org.jetbrains.kotlin.idea.frontend.api.fir
|
||||
import com.google.common.collect.MapMaker
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirFieldImpl
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.originalConstructorIfTypeAlias
|
||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
||||
import org.jetbrains.kotlin.fir.resolve.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag
|
||||
import org.jetbrains.kotlin.fir.resolve.inference.isFunctionalType
|
||||
@@ -236,10 +237,18 @@ internal class KtSymbolByFirBuilder private constructor(
|
||||
}
|
||||
|
||||
|
||||
// todo handle cases
|
||||
fun buildFieldSymbol(fir: FirField): KtFirJavaFieldSymbol {
|
||||
if (!fir.isJavaFieldOrSubstitutionOverrideOfJavaField()) {
|
||||
error("Could not build symbol for non-Java field symbol")
|
||||
}
|
||||
return symbolsCache.cache(fir) { KtFirJavaFieldSymbol(fir, resolveState, token, this@KtSymbolByFirBuilder) }
|
||||
}
|
||||
|
||||
private fun FirField.isJavaFieldOrSubstitutionOverrideOfJavaField(): Boolean = when (this) {
|
||||
is FirJavaField -> true
|
||||
is FirFieldImpl -> (this as FirField).originalForSubstitutionOverride?.isJavaFieldOrSubstitutionOverrideOfJavaField() == true
|
||||
else -> throwUnexpectedElementError(this)
|
||||
}
|
||||
}
|
||||
|
||||
inner class CallableSymbolBuilder {
|
||||
@@ -309,7 +318,7 @@ internal class KtSymbolByFirBuilder private constructor(
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
companion object {
|
||||
private fun throwUnexpectedElementError(element: Any): Nothing {
|
||||
error("Unexpected ${element::class.simpleName}")
|
||||
|
||||
Reference in New Issue
Block a user