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(
|
||||
this@JavaSymbolProvider.session, psi,
|
||||
constructorSymbol, visibility, isPrimary,
|
||||
FirResolvedTypeRefImpl(
|
||||
isInner = !javaClass.isStatic,
|
||||
delegatedSelfTypeRef = FirResolvedTypeRefImpl(
|
||||
null,
|
||||
firSymbol.constructType(
|
||||
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.FirDelegatedConstructorCall
|
||||
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.transformInplace
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -29,6 +28,7 @@ class FirJavaConstructor(
|
||||
override val symbol: FirConstructorSymbol,
|
||||
visibility: Visibility,
|
||||
override val isPrimary: Boolean,
|
||||
override val isInner: Boolean,
|
||||
delegatedSelfTypeRef: FirTypeRef
|
||||
) : FirAbstractCallableMember<FirConstructor>(
|
||||
session,
|
||||
|
||||
+1
@@ -190,6 +190,7 @@ class JavaClassEnhancementScope(
|
||||
firMethod.visibility,
|
||||
isExpect = false,
|
||||
isActual = false,
|
||||
isInner = firMethod.isInner,
|
||||
delegatedSelfTypeRef = newReturnTypeRef,
|
||||
delegatedConstructor = null
|
||||
)
|
||||
|
||||
+2
@@ -589,6 +589,7 @@ class DeclarationsConverter(
|
||||
if (primaryConstructor != null) modifiers.getVisibility() else defaultVisibility,
|
||||
modifiers.hasExpect(),
|
||||
modifiers.hasActual(),
|
||||
classWrapper.isInner(),
|
||||
classWrapper.delegatedSelfTypeRef,
|
||||
firDelegatedCall
|
||||
).apply {
|
||||
@@ -647,6 +648,7 @@ class DeclarationsConverter(
|
||||
modifiers.getVisibility(),
|
||||
modifiers.hasExpect(),
|
||||
modifiers.hasActual(),
|
||||
classWrapper.isInner(),
|
||||
delegatedSelfTypeRef,
|
||||
constructorDelegationCall
|
||||
)
|
||||
|
||||
@@ -48,6 +48,10 @@ class ClassWrapper(
|
||||
return classKind == ClassKind.INTERFACE
|
||||
}
|
||||
|
||||
fun isInner(): Boolean {
|
||||
return modifiers.isInner()
|
||||
}
|
||||
|
||||
fun defaultConstructorVisibility(): Visibility {
|
||||
return if (isObject() || isSealed() || isEnum())
|
||||
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.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.*
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
@@ -386,6 +387,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
||||
this?.visibility ?: defaultVisibility(),
|
||||
this?.hasExpectModifier() ?: false,
|
||||
this?.hasActualModifier() ?: false,
|
||||
owner.hasModifier(INNER_KEYWORD),
|
||||
delegatedSelfTypeRef,
|
||||
firDelegatedCall
|
||||
)
|
||||
@@ -644,6 +646,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
||||
visibility,
|
||||
hasExpectModifier(),
|
||||
hasActualModifier(),
|
||||
owner.hasModifier(INNER_KEYWORD),
|
||||
delegatedSelfTypeRef,
|
||||
getDelegationCall().convert(delegatedSuperTypeRef, delegatedSelfTypeRef, hasPrimaryConstructor)
|
||||
)
|
||||
|
||||
+2
@@ -252,6 +252,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
|
||||
Flags.IS_EXPECT_FUNCTION.get(flags),
|
||||
false,
|
||||
klass.isInner,
|
||||
delegatedSelfType,
|
||||
null
|
||||
)
|
||||
@@ -263,6 +264,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
|
||||
Flags.IS_EXPECT_FUNCTION.get(flags),
|
||||
false,
|
||||
klass.isInner,
|
||||
delegatedSelfType,
|
||||
null
|
||||
)
|
||||
|
||||
@@ -17,6 +17,8 @@ interface FirConstructor : @VisitedSupertype FirMemberFunction<FirConstructor> {
|
||||
|
||||
override val isOverride: Boolean get() = status.isOverride
|
||||
|
||||
val isInner: Boolean
|
||||
|
||||
val delegatedConstructor: FirDelegatedConstructorCall?
|
||||
|
||||
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 isInner: Boolean
|
||||
get() = status.isInner
|
||||
set(isInner) {
|
||||
status.isInner = isInner
|
||||
}
|
||||
|
||||
constructor(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
@@ -37,6 +43,7 @@ open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirCo
|
||||
visibility: Visibility,
|
||||
isExpect: Boolean,
|
||||
isActual: Boolean,
|
||||
isInner: Boolean,
|
||||
delegatedSelfTypeRef: FirTypeRef,
|
||||
delegatedConstructor: FirDelegatedConstructorCall?
|
||||
) : super(
|
||||
@@ -44,6 +51,7 @@ open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirCo
|
||||
isExpect, isActual, isOverride = false, receiverTypeRef = null, returnTypeRef = delegatedSelfTypeRef
|
||||
) {
|
||||
this.symbol = symbol
|
||||
this.isInner = isInner
|
||||
this.delegatedConstructor = delegatedConstructor
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
+2
-1
@@ -19,9 +19,10 @@ class FirPrimaryConstructorImpl(
|
||||
visibility: Visibility,
|
||||
isExpect: Boolean,
|
||||
isActual: Boolean,
|
||||
isInner: Boolean,
|
||||
delegatedSelfTypeRef: FirTypeRef,
|
||||
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
|
||||
get() = true
|
||||
}
|
||||
Reference in New Issue
Block a user