FIR: add 'isInner' parameter to constructors
This is helpful because inner class constructors are resolved in a bit different way (like non-static vs static)
This commit is contained in:
@@ -229,7 +229,8 @@ class JavaSymbolProvider(
|
|||||||
val firJavaConstructor = FirJavaConstructor(
|
val firJavaConstructor = FirJavaConstructor(
|
||||||
this@JavaSymbolProvider.session, psi,
|
this@JavaSymbolProvider.session, psi,
|
||||||
constructorSymbol, visibility, isPrimary,
|
constructorSymbol, visibility, isPrimary,
|
||||||
FirResolvedTypeRefImpl(
|
isInner = !javaClass.isStatic,
|
||||||
|
delegatedSelfTypeRef = FirResolvedTypeRefImpl(
|
||||||
null,
|
null,
|
||||||
firSymbol.constructType(
|
firSymbol.constructType(
|
||||||
classTypeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) }.toTypedArray(),
|
classTypeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) }.toTypedArray(),
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirConstructorImpl.Companion.N
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
@@ -29,6 +28,7 @@ class FirJavaConstructor(
|
|||||||
override val symbol: FirConstructorSymbol,
|
override val symbol: FirConstructorSymbol,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
override val isPrimary: Boolean,
|
override val isPrimary: Boolean,
|
||||||
|
override val isInner: Boolean,
|
||||||
delegatedSelfTypeRef: FirTypeRef
|
delegatedSelfTypeRef: FirTypeRef
|
||||||
) : FirAbstractCallableMember<FirConstructor>(
|
) : FirAbstractCallableMember<FirConstructor>(
|
||||||
session,
|
session,
|
||||||
|
|||||||
+1
@@ -190,6 +190,7 @@ class JavaClassEnhancementScope(
|
|||||||
firMethod.visibility,
|
firMethod.visibility,
|
||||||
isExpect = false,
|
isExpect = false,
|
||||||
isActual = false,
|
isActual = false,
|
||||||
|
isInner = firMethod.isInner,
|
||||||
delegatedSelfTypeRef = newReturnTypeRef,
|
delegatedSelfTypeRef = newReturnTypeRef,
|
||||||
delegatedConstructor = null
|
delegatedConstructor = null
|
||||||
)
|
)
|
||||||
|
|||||||
+2
@@ -589,6 +589,7 @@ class DeclarationsConverter(
|
|||||||
if (primaryConstructor != null) modifiers.getVisibility() else defaultVisibility,
|
if (primaryConstructor != null) modifiers.getVisibility() else defaultVisibility,
|
||||||
modifiers.hasExpect(),
|
modifiers.hasExpect(),
|
||||||
modifiers.hasActual(),
|
modifiers.hasActual(),
|
||||||
|
classWrapper.isInner(),
|
||||||
classWrapper.delegatedSelfTypeRef,
|
classWrapper.delegatedSelfTypeRef,
|
||||||
firDelegatedCall
|
firDelegatedCall
|
||||||
).apply {
|
).apply {
|
||||||
@@ -647,6 +648,7 @@ class DeclarationsConverter(
|
|||||||
modifiers.getVisibility(),
|
modifiers.getVisibility(),
|
||||||
modifiers.hasExpect(),
|
modifiers.hasExpect(),
|
||||||
modifiers.hasActual(),
|
modifiers.hasActual(),
|
||||||
|
classWrapper.isInner(),
|
||||||
delegatedSelfTypeRef,
|
delegatedSelfTypeRef,
|
||||||
constructorDelegationCall
|
constructorDelegationCall
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -48,6 +48,10 @@ class ClassWrapper(
|
|||||||
return classKind == ClassKind.INTERFACE
|
return classKind == ClassKind.INTERFACE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isInner(): Boolean {
|
||||||
|
return modifiers.isInner()
|
||||||
|
}
|
||||||
|
|
||||||
fun defaultConstructorVisibility(): Visibility {
|
fun defaultConstructorVisibility(): Visibility {
|
||||||
return if (isObject() || isSealed() || isEnum())
|
return if (isObject() || isSealed() || isEnum())
|
||||||
Visibilities.PRIVATE
|
Visibilities.PRIVATE
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.*
|
|||||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.*
|
import org.jetbrains.kotlin.fir.types.impl.*
|
||||||
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -386,6 +387,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
|||||||
this?.visibility ?: defaultVisibility(),
|
this?.visibility ?: defaultVisibility(),
|
||||||
this?.hasExpectModifier() ?: false,
|
this?.hasExpectModifier() ?: false,
|
||||||
this?.hasActualModifier() ?: false,
|
this?.hasActualModifier() ?: false,
|
||||||
|
owner.hasModifier(INNER_KEYWORD),
|
||||||
delegatedSelfTypeRef,
|
delegatedSelfTypeRef,
|
||||||
firDelegatedCall
|
firDelegatedCall
|
||||||
)
|
)
|
||||||
@@ -644,6 +646,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
|||||||
visibility,
|
visibility,
|
||||||
hasExpectModifier(),
|
hasExpectModifier(),
|
||||||
hasActualModifier(),
|
hasActualModifier(),
|
||||||
|
owner.hasModifier(INNER_KEYWORD),
|
||||||
delegatedSelfTypeRef,
|
delegatedSelfTypeRef,
|
||||||
getDelegationCall().convert(delegatedSuperTypeRef, delegatedSelfTypeRef, hasPrimaryConstructor)
|
getDelegationCall().convert(delegatedSuperTypeRef, delegatedSelfTypeRef, hasPrimaryConstructor)
|
||||||
)
|
)
|
||||||
|
|||||||
+2
@@ -252,6 +252,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
|
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
|
||||||
Flags.IS_EXPECT_FUNCTION.get(flags),
|
Flags.IS_EXPECT_FUNCTION.get(flags),
|
||||||
false,
|
false,
|
||||||
|
klass.isInner,
|
||||||
delegatedSelfType,
|
delegatedSelfType,
|
||||||
null
|
null
|
||||||
)
|
)
|
||||||
@@ -263,6 +264,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
|
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
|
||||||
Flags.IS_EXPECT_FUNCTION.get(flags),
|
Flags.IS_EXPECT_FUNCTION.get(flags),
|
||||||
false,
|
false,
|
||||||
|
klass.isInner,
|
||||||
delegatedSelfType,
|
delegatedSelfType,
|
||||||
null
|
null
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ interface FirConstructor : @VisitedSupertype FirMemberFunction<FirConstructor> {
|
|||||||
|
|
||||||
override val isOverride: Boolean get() = status.isOverride
|
override val isOverride: Boolean get() = status.isOverride
|
||||||
|
|
||||||
|
val isInner: Boolean
|
||||||
|
|
||||||
val delegatedConstructor: FirDelegatedConstructorCall?
|
val delegatedConstructor: FirDelegatedConstructorCall?
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
|
|||||||
@@ -30,6 +30,12 @@ open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirCo
|
|||||||
|
|
||||||
final override var delegatedConstructor: FirDelegatedConstructorCall? = null
|
final override var delegatedConstructor: FirDelegatedConstructorCall? = null
|
||||||
|
|
||||||
|
final override var isInner: Boolean
|
||||||
|
get() = status.isInner
|
||||||
|
set(isInner) {
|
||||||
|
status.isInner = isInner
|
||||||
|
}
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
@@ -37,6 +43,7 @@ open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirCo
|
|||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
isExpect: Boolean,
|
isExpect: Boolean,
|
||||||
isActual: Boolean,
|
isActual: Boolean,
|
||||||
|
isInner: Boolean,
|
||||||
delegatedSelfTypeRef: FirTypeRef,
|
delegatedSelfTypeRef: FirTypeRef,
|
||||||
delegatedConstructor: FirDelegatedConstructorCall?
|
delegatedConstructor: FirDelegatedConstructorCall?
|
||||||
) : super(
|
) : super(
|
||||||
@@ -44,6 +51,7 @@ open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirCo
|
|||||||
isExpect, isActual, isOverride = false, receiverTypeRef = null, returnTypeRef = delegatedSelfTypeRef
|
isExpect, isActual, isOverride = false, receiverTypeRef = null, returnTypeRef = delegatedSelfTypeRef
|
||||||
) {
|
) {
|
||||||
this.symbol = symbol
|
this.symbol = symbol
|
||||||
|
this.isInner = isInner
|
||||||
this.delegatedConstructor = delegatedConstructor
|
this.delegatedConstructor = delegatedConstructor
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -19,9 +19,10 @@ class FirPrimaryConstructorImpl(
|
|||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
isExpect: Boolean,
|
isExpect: Boolean,
|
||||||
isActual: Boolean,
|
isActual: Boolean,
|
||||||
|
isInner: Boolean,
|
||||||
delegatedSelfTypeRef: FirTypeRef,
|
delegatedSelfTypeRef: FirTypeRef,
|
||||||
delegatedConstructor: FirDelegatedConstructorCall?
|
delegatedConstructor: FirDelegatedConstructorCall?
|
||||||
) : FirConstructorImpl(session, psi, symbol, visibility, isExpect, isActual, delegatedSelfTypeRef, delegatedConstructor) {
|
) : FirConstructorImpl(session, psi, symbol, visibility, isExpect, isActual, isInner, delegatedSelfTypeRef, delegatedConstructor) {
|
||||||
override val isPrimary: Boolean
|
override val isPrimary: Boolean
|
||||||
get() = true
|
get() = true
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user