diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticScopes.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticScopes.kt index 7372775e2d2..43cdb0fc6cd 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticScopes.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticScopes.kt @@ -16,11 +16,18 @@ package org.jetbrains.kotlin.synthetic +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.resolve.scopes.SyntheticScopes import org.jetbrains.kotlin.storage.StorageManager -class JavaSyntheticScopes(storageManager: StorageManager, lookupTracker: LookupTracker): SyntheticScopes { - - override val scopes = listOf(JavaSyntheticPropertiesScope(storageManager, lookupTracker), SamAdapterFunctionsScope(storageManager)) +class JavaSyntheticScopes( + storageManager: StorageManager, + lookupTracker: LookupTracker, + languageVersionSettings: LanguageVersionSettings +): SyntheticScopes { + override val scopes = listOf( + JavaSyntheticPropertiesScope(storageManager, lookupTracker), + SamAdapterFunctionsScope(storageManager, languageVersionSettings) + ) } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt index 191cd3901c6..9f7bee01d06 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.synthetic import com.intellij.util.SmartList +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl @@ -38,7 +39,10 @@ interface SamAdapterExtensionFunctionDescriptor : FunctionDescriptor, SyntheticM override val baseDescriptorForSynthetic: FunctionDescriptor } -class SamAdapterFunctionsScope(storageManager: StorageManager) : SyntheticScope { +class SamAdapterFunctionsScope( + storageManager: StorageManager, + private val languageVersionSettings: LanguageVersionSettings +) : SyntheticScope { private val extensionForFunction = storageManager.createMemoizedFunctionWithNullableValues { function -> extensionForFunctionNotCached(function) } @@ -48,7 +52,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : SyntheticScope if (!function.hasJavaOriginInHierarchy()) return null //TODO: should we go into base at all? if (!SingleAbstractMethodUtils.isSamAdapterNecessary(function)) return null if (function.returnType == null) return null - if (function.isHiddenInResolution()) return null + if (function.isHiddenInResolution(languageVersionSettings)) return null return MyFunctionDescriptor.create(function) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt index 1e5e2040d58..03fcda8f903 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.resolve.calls.tower +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.VariableDescriptor @@ -61,9 +62,9 @@ class NewResolutionOldInference( private val resolutionResultsHandler: ResolutionResultsHandler, private val dynamicCallableDescriptors: DynamicCallableDescriptors, private val syntheticScopes: SyntheticScopes, - private val syntheticConstructorsProvider: SyntheticConstructorsProvider + private val syntheticConstructorsProvider: SyntheticConstructorsProvider, + private val languageVersionSettings: LanguageVersionSettings ) { - sealed class ResolutionKind { abstract internal fun createTowerProcessor( outer: NewResolutionOldInference, @@ -178,7 +179,7 @@ class NewResolutionOldInference( val candidateTrace = TemporaryBindingTrace.create(basicCallContext.trace, "Context for resolve candidate") val resolvedCall = ResolvedCallImpl.create(candidate, candidateTrace, tracing, basicCallContext.dataFlowInfoForArguments) - if (candidate.descriptor.isHiddenInResolution(basicCallContext.isSuperCall)) { + if (candidate.descriptor.isHiddenInResolution(languageVersionSettings, basicCallContext.isSuperCall)) { return@mapNotNull MyCandidate(ResolutionCandidateStatus(listOf(HiddenDescriptor)), resolvedCall) } @@ -334,7 +335,7 @@ class NewResolutionOldInference( return MyCandidate(ResolutionCandidateStatus(listOf(ExtensionWithStaticTypeWithDynamicReceiver)), candidateCall) } - if (towerCandidate.descriptor.isHiddenInResolution(basicCallContext.isSuperCall)) { + if (towerCandidate.descriptor.isHiddenInResolution(languageVersionSettings, basicCallContext.isSuperCall)) { return MyCandidate(ResolutionCandidateStatus(listOf(HiddenDescriptor)), candidateCall) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt index 8ab9eeeac99..b34ca300baa 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/deprecationUtil.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve import com.intellij.psi.PsiElement import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget @@ -188,7 +189,7 @@ fun DeclarationDescriptor.isDeprecatedHidden(): Boolean { } @JvmOverloads -fun DeclarationDescriptor.isHiddenInResolution(isSuperCall: Boolean = false): Boolean { +fun DeclarationDescriptor.isHiddenInResolution(languageVersionSettings: LanguageVersionSettings, isSuperCall: Boolean = false): Boolean { if (this is FunctionDescriptor) { if (isHiddenToOvercomeSignatureClash) return true if (isHiddenForResolutionEverywhereBesideSupercalls && !isSuperCall) return true diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt index 1402853beae..78a8c871cbd 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.codeInsight import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.resolve.frontendService @@ -73,7 +74,7 @@ class ReferenceVariantsHelper( ): Collection { var variants: Collection = getReferenceVariantsNoVisibilityFilter(contextElement, kindFilter, nameFilter, callTypeAndReceiver, useReceiverType) - .filter { !it.isHiddenInResolution() && visibilityFilter(it) } + .filter { !it.isHiddenInResolution(resolutionFacade.frontendService()) && visibilityFilter(it) } if (filterOutShadowed) { ShadowedDeclarationsFilter.create(bindingContext, resolutionFacade, contextElement, callTypeAndReceiver)?.let { diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt index c03f0b1429f..7d5db799e66 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt @@ -18,23 +18,21 @@ package org.jetbrains.kotlin.idea.core import com.intellij.codeInsight.JavaProjectCodeInsightSettings import com.intellij.openapi.progress.ProgressManager -import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiFile import com.intellij.psi.PsiMember import com.intellij.psi.PsiModifier -import com.intellij.psi.search.DelegatingGlobalSearchScope import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.PsiShortNamesCache import com.intellij.psi.stubs.StringStubIndexExtension import com.intellij.util.indexing.IdFilter import org.jetbrains.kotlin.asJava.elements.KtLightElement +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.core.extension.KotlinIndicesHelperExtension -import org.jetbrains.kotlin.idea.decompiler.builtIns.KotlinBuiltInFileType import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.resolve.ResolutionFacade +import org.jetbrains.kotlin.idea.resolve.frontendService import org.jetbrains.kotlin.idea.search.excludeKotlinSources import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor import org.jetbrains.kotlin.idea.stubindex.* @@ -68,7 +66,7 @@ class KotlinIndicesHelper( private val scopeWithoutKotlin = scope.excludeKotlinSources() as GlobalSearchScope private val descriptorFilter: (DeclarationDescriptor) -> Boolean = filter@ { - if (it.isHiddenInResolution()) return@filter false + if (it.isHiddenInResolution(resolutionFacade.frontendService())) return@filter false if (!visibilityFilter(it)) return@filter false if (applyExcludeSettings && isExcludedFromAutoImport(it)) return@filter false true diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt index 3beb3a10871..9015d994530 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt @@ -28,6 +28,7 @@ import com.intellij.psi.PsiElementVisitor import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.util.ui.UIUtil +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze @@ -37,6 +38,7 @@ import org.jetbrains.kotlin.idea.core.targetDescriptors import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.quickfix.KotlinQuickFixAction import org.jetbrains.kotlin.idea.references.KtSimpleNameReference +import org.jetbrains.kotlin.idea.resolve.frontendService import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.idea.util.application.runReadAction @@ -66,11 +68,11 @@ class ConflictingExtensionPropertyInspection : AbstractKotlinInspection(), Clean val nameElement = property.nameIdentifier ?: return val propertyDescriptor = property.resolveToDescriptor() as? PropertyDescriptor ?: return - val syntheticScopes = resolutionFacade.getFrontendService(SyntheticScopes::class.java) + val syntheticScopes = resolutionFacade.frontendService() val conflictingExtension = conflictingSyntheticExtension(propertyDescriptor, syntheticScopes) ?: return // don't report on hidden declarations - if (propertyDescriptor.isHiddenInResolution()) return + if (propertyDescriptor.isHiddenInResolution(resolutionFacade.frontendService())) return val fixes = createFixes(property, conflictingExtension, isOnTheFly)