diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index 0bffda30e83..75b378972f2 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -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(), diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt index 31c6ec399b2..bb5f8711c81 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt @@ -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( session, diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt index b3dc32dcde2..1cbdad8a36c 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt @@ -190,6 +190,7 @@ class JavaClassEnhancementScope( firMethod.visibility, isExpect = false, isActual = false, + isInner = firMethod.isInner, delegatedSelfTypeRef = newReturnTypeRef, delegatedConstructor = null ) diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index e49816b48c8..26ebecea4ac 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -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 ) diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ClassWrapper.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ClassWrapper.kt index 46f94321764..359b54bb7bb 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ClassWrapper.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ClassWrapper.kt @@ -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 diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index a1c34ea8746..f6a06507762 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -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) ) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index 5db0358e2db..e63c12d9a2b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -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 ) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt index 0a9cded974d..dc4cb010da4 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt @@ -17,6 +17,8 @@ interface FirConstructor : @VisitedSupertype FirMemberFunction { override val isOverride: Boolean get() = status.isOverride + val isInner: Boolean + val delegatedConstructor: FirDelegatedConstructorCall? override fun accept(visitor: FirVisitor, data: D): R = diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt index ed421b4a659..cfdd0658122 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt @@ -30,6 +30,12 @@ open class FirConstructorImpl : FirAbstractCallableMember, 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, FirCo visibility: Visibility, isExpect: Boolean, isActual: Boolean, + isInner: Boolean, delegatedSelfTypeRef: FirTypeRef, delegatedConstructor: FirDelegatedConstructorCall? ) : super( @@ -44,6 +51,7 @@ open class FirConstructorImpl : FirAbstractCallableMember, FirCo isExpect, isActual, isOverride = false, receiverTypeRef = null, returnTypeRef = delegatedSelfTypeRef ) { this.symbol = symbol + this.isInner = isInner this.delegatedConstructor = delegatedConstructor symbol.bind(this) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructorImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructorImpl.kt index 47408515c55..6d86d7e91a8 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructorImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructorImpl.kt @@ -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 } \ No newline at end of file