diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt index 8c4f80d50b9..adcf56041d5 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt @@ -185,9 +185,9 @@ internal class KtFirScopeProvider( FakeOverrideTypeCalculator.Forced ) ?: return null return KtCompositeTypeScope( - listOf( + listOfNotNull( convertToKtTypeScope(firTypeScope), - convertToKtTypeScope(FirSyntheticPropertiesScope(firSession, firTypeScope)) + FirSyntheticPropertiesScope.createIfSyntheticNamesProviderIsDefined(firSession, firTypeScope)?.let { convertToKtTypeScope(it) } ), token ) diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/FirSyntheticNamesProvider.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/FirSyntheticNamesProvider.kt index be50cb4ac5e..914cf5d8e36 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/FirSyntheticNamesProvider.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/FirSyntheticNamesProvider.kt @@ -15,4 +15,4 @@ abstract class FirSyntheticNamesProvider : FirSessionComponent { abstract fun possiblePropertyNamesByAccessorName(name: Name): List } -val FirSession.syntheticNamesProvider: FirSyntheticNamesProvider by FirSession.sessionComponentAccessor() +val FirSession.syntheticNamesProvider: FirSyntheticNamesProvider? by FirSession.nullableSessionComponentAccessor() diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt index 1cf6268f50d..7b25cb1fa79 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt @@ -44,11 +44,23 @@ class FirSyntheticFunctionSymbol( callableId: CallableId ) : FirNamedFunctionSymbol(callableId), SyntheticSymbol -class FirSyntheticPropertiesScope( +class FirSyntheticPropertiesScope private constructor( val session: FirSession, - private val baseScope: FirTypeScope + private val baseScope: FirTypeScope, + private val syntheticNamesProvider: FirSyntheticNamesProvider ) : FirContainingNamesAwareScope() { - private val syntheticNamesProvider = session.syntheticNamesProvider + companion object { + fun createIfSyntheticNamesProviderIsDefined( + session: FirSession, + baseScope: FirTypeScope + ): FirSyntheticPropertiesScope? { + val syntheticNamesProvider = session.syntheticNamesProvider + return if (syntheticNamesProvider != null) + FirSyntheticPropertiesScope(session, baseScope, syntheticNamesProvider) + else + null + } + } override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) { val getterNames = syntheticNamesProvider.possibleGetterNamesByPropertyName(name) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt index 3ab507ea2a2..75b008d2685 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt @@ -105,8 +105,8 @@ class MemberScopeTowerLevel( } if (givenExtensionReceiverOptions.isEmpty()) { - val withSynthetic = FirSyntheticPropertiesScope(session, scope) - withSynthetic.processScopeMembers { symbol -> + val withSynthetic = FirSyntheticPropertiesScope.createIfSyntheticNamesProviderIsDefined(session, scope) + withSynthetic?.processScopeMembers { symbol -> empty = false output.consumeCandidate(symbol, dispatchReceiverValue, givenExtensionReceiverOptions = emptyList(), scope) } diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirJsSessionFactory.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirJsSessionFactory.kt index 212ba17620b..95eed1b6d88 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirJsSessionFactory.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirJsSessionFactory.kt @@ -90,7 +90,6 @@ object FirJsSessionFactory : FirAbstractSessionFactory() { register(FirVisibilityChecker::class, FirVisibilityChecker.Default) register(ConeCallConflictResolverFactory::class, JsCallConflictResolverFactory) register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default) - register(FirSyntheticNamesProvider::class, FirJsSyntheticNamesProvider) register(FirOverridesBackwardCompatibilityHelper::class, FirOverridesBackwardCompatibilityHelper.Default()) } } \ No newline at end of file diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirJsSyntheticNamesProvider.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirJsSyntheticNamesProvider.kt deleted file mode 100644 index c5b8509abcb..00000000000 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirJsSyntheticNamesProvider.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.test.frontend.fir - -import org.jetbrains.kotlin.fir.NoMutableState -import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider -import org.jetbrains.kotlin.load.java.setMethodName -import org.jetbrains.kotlin.name.Name - -@NoMutableState -object FirJsSyntheticNamesProvider : FirSyntheticNamesProvider() { - override fun possibleGetterNamesByPropertyName(name: Name): List = emptyList() - override fun setterNameByGetterName(name: Name): Name = setMethodName(getMethodName = name) - override fun possiblePropertyNamesByAccessorName(name: Name): List = emptyList() -} diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirNativeSessionFactory.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirNativeSessionFactory.kt index 02e70d22535..a0e52e66472 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirNativeSessionFactory.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirNativeSessionFactory.kt @@ -78,7 +78,6 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() { register(FirVisibilityChecker::class, FirVisibilityChecker.Default) register(ConeCallConflictResolverFactory::class, NativeCallConflictResolverFactory) register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default) - register(FirSyntheticNamesProvider::class, FirNativeSyntheticNamesProvider) register(FirOverridesBackwardCompatibilityHelper::class, FirOverridesBackwardCompatibilityHelper.Default()) } } \ No newline at end of file diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirNativeSyntheticNamesProvider.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirNativeSyntheticNamesProvider.kt deleted file mode 100644 index 3463189d55b..00000000000 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirNativeSyntheticNamesProvider.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.test.frontend.fir - -import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider -import org.jetbrains.kotlin.load.java.setMethodName -import org.jetbrains.kotlin.name.Name - -object FirNativeSyntheticNamesProvider : FirSyntheticNamesProvider() { - override fun possibleGetterNamesByPropertyName(name: Name): List = emptyList() - override fun setterNameByGetterName(name: Name): Name = setMethodName(getMethodName = name) - override fun possiblePropertyNamesByAccessorName(name: Name): List = emptyList() -} \ No newline at end of file