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 aae494edff1..61952128e5b 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 @@ -57,6 +57,7 @@ class JavaSymbolProvider( override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List> = emptyList() + // NB: looks like it's better not to use this function at all... override fun getClassDeclaredMemberScope(classId: ClassId): FirScope? { val classSymbol = getClassLikeSymbolByFqName(classId) ?: return null return declaredMemberScope(classSymbol.fir) @@ -92,7 +93,7 @@ class JavaSymbolProvider( visitedSymbols: MutableSet> ): JavaClassUseSiteMemberScope { return scopeSession.getOrBuild(regularClass.symbol, JAVA_USE_SITE) { - val declaredScope = declaredMemberScope(regularClass) + val declaredScope = declaredMemberScope(regularClass, useLazyNestedClassifierScope = regularClass is FirJavaClass) val superTypeEnhancementScopes = lookupSuperTypes(regularClass, lookupInterfaces = true, deep = false, useSiteSession = useSiteSession) .mapNotNull { useSiteSuperType -> diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt index 760acbd0711..ce7a963b59d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt @@ -19,8 +19,12 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.name.Name -class FirClassDeclaredMemberScope(klass: FirClass<*>) : FirScope() { - private val nestedClassifierScope = nestedClassifierScope(klass) +class FirClassDeclaredMemberScope(klass: FirClass<*>, useLazyNestedClassifierScope: Boolean = false) : FirScope() { + private val nestedClassifierScope = if (useLazyNestedClassifierScope) { + nestedClassifierScope(klass.symbol.classId, klass.session) + } else { + nestedClassifierScope(klass) + } private val callablesIndex: Map>> = run { val result = mutableMapOf>>() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberScopeProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberScopeProvider.kt index 4423ea9afcd..7d2fe768486 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberScopeProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberScopeProvider.kt @@ -19,9 +19,9 @@ class FirMemberScopeProvider : FirSessionComponent { private val nestedClassifierCache = mutableMapOf, FirNestedClassifierScope>() private val selfImportingCache = mutableMapOf() - fun declaredMemberScope(klass: FirClass<*>): FirClassDeclaredMemberScope { + fun declaredMemberScope(klass: FirClass<*>, useLazyNestedClassifierScope: Boolean): FirClassDeclaredMemberScope { return declaredMemberCache.getOrPut(klass) { - FirClassDeclaredMemberScope(klass) + FirClassDeclaredMemberScope(klass, useLazyNestedClassifierScope) } } @@ -39,11 +39,11 @@ class FirMemberScopeProvider : FirSessionComponent { } } -fun declaredMemberScope(klass: FirClass<*>): FirClassDeclaredMemberScope { +fun declaredMemberScope(klass: FirClass<*>, useLazyNestedClassifierScope: Boolean = false): FirClassDeclaredMemberScope { return klass .session .memberScopeProvider - .declaredMemberScope(klass) + .declaredMemberScope(klass, useLazyNestedClassifierScope) } fun nestedClassifierScope(klass: FirClass<*>): FirNestedClassifierScope { diff --git a/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticClassConstructorFromBaseClass.kt b/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticClassConstructorFromBaseClass.kt index 5717eb2a8d7..77c86a5f35c 100644 --- a/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticClassConstructorFromBaseClass.kt +++ b/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticClassConstructorFromBaseClass.kt @@ -10,10 +10,10 @@ public abstract class AbstractClass { class User : AbstractClass() { fun foo() { - val sc = StaticClass() + val sc = StaticClass() } } fun test() { - AbstractClass.StaticClass() + AbstractClass.StaticClass() } \ No newline at end of file diff --git a/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticClassConstructorFromBaseClass.txt b/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticClassConstructorFromBaseClass.txt index e5e2f285b3f..b69dd41a9f7 100644 --- a/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticClassConstructorFromBaseClass.txt +++ b/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticClassConstructorFromBaseClass.txt @@ -5,10 +5,10 @@ FILE: User.kt } public final fun foo(): R|kotlin/Unit| { - lval sc: = #() + lval sc: R|AbstractClass.StaticClass| = R|/AbstractClass.StaticClass.StaticClass|() } } public final fun test(): R|kotlin/Unit| { - Q|AbstractClass|.#() + Q|AbstractClass|.R|/AbstractClass.StaticClass.StaticClass|() } diff --git a/compiler/testData/ir/irText/stubs/javaInnerClass.fir.txt b/compiler/testData/ir/irText/stubs/javaInnerClass.fir.txt index af8cb7b516a..bc500860b61 100644 --- a/compiler/testData/ir/irText/stubs/javaInnerClass.fir.txt +++ b/compiler/testData/ir/irText/stubs/javaInnerClass.fir.txt @@ -6,15 +6,15 @@ FILE fqName: fileName:/javaInnerClass.kt DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in .J' INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Test1 modality:FINAL visibility:public superTypes:[.J]' PROPERTY name:test visibility:public modality:FINAL [val] - FIELD PROPERTY_BACKING_FIELD name:test type:IrErrorType visibility:private [final] + FIELD PROPERTY_BACKING_FIELD name:test type:.J.JInner visibility:private [final] EXPRESSION_BODY - ERROR_CALL 'Unresolved reference: #' type=IrErrorType - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Test1) returnType:IrErrorType + CONSTRUCTOR_CALL 'public constructor () [primary] declared in .J.JInner' type=.J.JInner origin=null + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Test1) returnType:.J.JInner correspondingProperty: PROPERTY name:test visibility:public modality:FINAL [val] $this: VALUE_PARAMETER name: type:.Test1 BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): IrErrorType declared in .Test1' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test type:IrErrorType visibility:private [final]' type=IrErrorType origin=null + RETURN type=kotlin.Nothing from='public final fun (): .J.JInner declared in .Test1' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test type:.J.JInner visibility:private [final]' type=.J.JInner origin=null receiver: GET_VAR ': .Test1 declared in .Test1.' type=.Test1 origin=null FUN FAKE_OVERRIDE name:bar visibility:public modality:OPEN <> ($this:.J) returnType:kotlin.Unit [fake_override] overridden: