[FIR] Do not enhance java fields to firProperty

This commit is contained in:
Simon Ogorodnik
2019-05-15 15:51:25 +03:00
committed by Mikhail Glukhikh
parent 397aaa189e
commit 6c313895df
37 changed files with 86 additions and 176 deletions
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.name.Name
class FirJavaField(
@@ -21,7 +22,7 @@ class FirJavaField(
name: Name,
visibility: Visibility,
modality: Modality?,
returnTypeRef: FirJavaTypeRef,
returnTypeRef: FirTypeRef,
override val isVar: Boolean,
isStatic: Boolean
) : FirAbstractCallableMember(
@@ -59,7 +59,7 @@ class JavaClassEnhancementScope(
useSiteScope.processPropertiesByName(name) process@{ original ->
val field = enhancements.getOrPut(original) { enhance(original, name) }
processor(field as ConePropertySymbol)
processor(field as ConeVariableSymbol)
}
return super.processPropertiesByName(name, processor)
@@ -78,28 +78,26 @@ class JavaClassEnhancementScope(
private fun enhance(
original: ConeVariableSymbol,
name: Name
): ConePropertySymbol {
): ConeVariableSymbol {
when (val firElement = (original as FirBasedSymbol<*>).fir) {
is FirJavaField -> {
if (firElement.returnTypeRef !is FirJavaTypeRef) return original
val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firElement.annotations)
val newReturnTypeRef = enhanceReturnType(firElement, emptyList(), memberContext, null)
val symbol = FirPropertySymbol(original.callableId)
with(firElement) {
FirMemberPropertyImpl(
this@JavaClassEnhancementScope.session, null, symbol, name,
visibility, modality, isExpect, isActual, isOverride,
isConst = false, isLateInit = false,
receiverTypeRef = null,
returnTypeRef = newReturnTypeRef,
isVar = isVar, initializer = null,
getter = FirDefaultPropertyGetter(this@JavaClassEnhancementScope.session, null, newReturnTypeRef, visibility),
setter = FirDefaultPropertySetter(this@JavaClassEnhancementScope.session, null, newReturnTypeRef, visibility),
delegate = null
FirJavaField(
session,
symbol,
name,
visibility,
modality,
newReturnTypeRef,
isVar,
isStatic
).apply {
annotations += firElement.annotations
status.isStatic = firElement.isStatic
}
}
return symbol
@@ -126,7 +126,7 @@ class JavaClassUseSiteScope(
}
}
is FirPropertySymbol -> {
val self = fir as FirProperty
val self = fir as? FirProperty ?: return null
candidates.firstOrNull {
val member = (it as FirFunctionSymbol).fir as FirNamedFunction
self.modality != Modality.FINAL && isOverriddenPropertyCheck(member, self)