FIR IDE: build KtJavaFieldSymbol only for Java fields
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.declarations.builder
|
package org.jetbrains.kotlin.fir.declarations.builder
|
||||||
|
|
||||||
import kotlin.contracts.*
|
import kotlin.contracts.*
|
||||||
|
import org.jetbrains.kotlin.fir.FirImplementationDetail
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||||
@@ -51,6 +52,7 @@ open class FirFieldBuilder : FirAnnotationContainerBuilder {
|
|||||||
open var containerSource: DeserializedContainerSource? = null
|
open var containerSource: DeserializedContainerSource? = null
|
||||||
open var dispatchReceiverType: ConeKotlinType? = null
|
open var dispatchReceiverType: ConeKotlinType? = null
|
||||||
|
|
||||||
|
@OptIn(FirImplementationDetail::class)
|
||||||
override fun build(): FirField {
|
override fun build(): FirField {
|
||||||
return FirFieldImpl(
|
return FirFieldImpl(
|
||||||
source,
|
source,
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.declarations.impl
|
package org.jetbrains.kotlin.fir.declarations.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirImplementationDetail
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
|
||||||
@@ -29,7 +30,7 @@ import org.jetbrains.kotlin.fir.visitors.*
|
|||||||
* DO NOT MODIFY IT MANUALLY
|
* DO NOT MODIFY IT MANUALLY
|
||||||
*/
|
*/
|
||||||
|
|
||||||
internal class FirFieldImpl(
|
class FirFieldImpl @FirImplementationDetail constructor(
|
||||||
override val source: FirSourceElement?,
|
override val source: FirSourceElement?,
|
||||||
override val session: FirSession,
|
override val session: FirSession,
|
||||||
override var resolvePhase: FirResolvePhase,
|
override var resolvePhase: FirResolvePhase,
|
||||||
|
|||||||
+1
@@ -209,6 +209,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
|||||||
value = "!isVar"
|
value = "!isVar"
|
||||||
withGetter = true
|
withGetter = true
|
||||||
}
|
}
|
||||||
|
publicImplementation()
|
||||||
|
|
||||||
defaultNull("delegateFieldSymbol", "receiverTypeRef", "delegate", "getter", "setter", withGetter = true)
|
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.google.common.collect.MapMaker
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
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.declarations.synthetic.FirSyntheticProperty
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.originalConstructorIfTypeAlias
|
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.symbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag
|
import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isFunctionalType
|
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 {
|
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) }
|
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 {
|
inner class CallableSymbolBuilder {
|
||||||
@@ -309,7 +318,7 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private fun throwUnexpectedElementError(element: Any): Nothing {
|
private fun throwUnexpectedElementError(element: Any): Nothing {
|
||||||
error("Unexpected ${element::class.simpleName}")
|
error("Unexpected ${element::class.simpleName}")
|
||||||
|
|||||||
Reference in New Issue
Block a user