diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt new file mode 100644 index 00000000000..1559bada57f --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2000-2018 JetBrains s.r.o. 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.idea.caches.project + +import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider +import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl +import com.intellij.openapi.module.Module +import com.intellij.openapi.roots.ProjectRootModificationTracker +import com.intellij.psi.util.CachedValueProvider +import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.caches.resolve.KotlinCacheService +import org.jetbrains.kotlin.descriptors.ModuleDescriptor + +fun Module.findImplementingModules(modelsProvider: IdeModifiableModelsProvider) = + modelsProvider.modules.filter { name in it.findImplementedModuleNames(modelsProvider) } + +val Module.implementingModules: List + get() = cached(CachedValueProvider { + CachedValueProvider.Result( + findImplementingModules(IdeModifiableModelsProviderImpl(project)), + ProjectRootModificationTracker.getInstance(project) + ) + }) + +private fun Module.getModuleInfo(baseModuleSourceInfo: ModuleSourceInfo): ModuleSourceInfo? = + when (baseModuleSourceInfo) { + is ModuleProductionSourceInfo -> productionSourceInfo() + is ModuleTestSourceInfo -> testSourceInfo() + else -> null + } + +private fun Module.findImplementingModuleInfos(moduleSourceInfo: ModuleSourceInfo): List { + val modelsProvider = IdeModifiableModelsProviderImpl(project) + val implementingModules = findImplementingModules(modelsProvider) + return implementingModules.mapNotNull { it.getModuleInfo(moduleSourceInfo) } +} + +val ModuleDescriptor.implementingDescriptors: List + get() { + val moduleSourceInfo = getCapability(ModuleInfo.Capability) as? ModuleSourceInfo ?: return emptyList() + val module = moduleSourceInfo.module + return module.cached(CachedValueProvider { + val implementingModuleInfos = module.findImplementingModuleInfos(moduleSourceInfo) + val implementingModuleDescriptors = implementingModuleInfos.mapNotNull { + KotlinCacheService.getInstance(module.project).getResolutionFacadeByModuleInfo(it, it.platform)?.moduleDescriptor + } + CachedValueProvider.Result( + implementingModuleDescriptors, + *(implementingModuleInfos.map { it.createModificationTracker() } + + ProjectRootModificationTracker.getInstance(module.project)).toTypedArray() + ) + }) + } + +val ModuleDescriptor.implementedDescriptors: List + get() { + val moduleSourceInfo = getCapability(ModuleInfo.Capability) as? ModuleSourceInfo ?: return emptyList() + + return moduleSourceInfo.expectedBy.mapNotNull { + KotlinCacheService.getInstance(moduleSourceInfo.module.project) + .getResolutionFacadeByModuleInfo(it, it.platform)?.moduleDescriptor + } + } \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/expectActualUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/expectActualUtil.kt new file mode 100644 index 00000000000..e206db74d32 --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/expectActualUtil.kt @@ -0,0 +1,121 @@ +/* + * Copyright 2000-2018 JetBrains s.r.o. 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.idea.util + +import com.intellij.openapi.module.Module +import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo +import org.jetbrains.kotlin.idea.caches.project.implementedDescriptors +import org.jetbrains.kotlin.idea.caches.project.implementingDescriptors +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny +import org.jetbrains.kotlin.idea.core.toDescriptor +import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor +import org.jetbrains.kotlin.psi.KtClassOrObject +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtNamedDeclaration +import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject +import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier +import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils +import org.jetbrains.kotlin.resolve.descriptorUtil.module +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver +import org.jetbrains.kotlin.utils.addToStdlib.safeAs + +internal fun MemberDescriptor.expectedDescriptors() = module.implementedDescriptors.mapNotNull { it.declarationOf(this) } + +// TODO: Sort out the cases with multiple expected descriptors +fun MemberDescriptor.expectedDescriptor() = expectedDescriptors().firstOrNull() + +fun KtDeclaration.expectedDeclarationIfAny(): KtDeclaration? { + val expectedDescriptor = (toDescriptor() as? MemberDescriptor)?.expectedDescriptor() ?: return null + return DescriptorToSourceUtils.descriptorToDeclaration(expectedDescriptor) as? KtDeclaration +} + +fun KtDeclaration.isExpectedOrExpectedClassMember(): Boolean { + if (hasExpectModifier()) return true + if (this is KtClassOrObject) return this.isExpected() + + return containingClassOrObject?.isExpected() == true +} + +fun KtClassOrObject.isExpected(): Boolean { + return this.hasExpectModifier() || this.descriptor.safeAs()?.isExpect == true +} + +fun DeclarationDescriptor.liftToExpected(): DeclarationDescriptor? { + if (this is MemberDescriptor) { + return when { + isExpect -> this + isActual -> expectedDescriptor() + else -> null + } + } + + if (this is ValueParameterDescriptor) { + val containingExpectedDescriptor = containingDeclaration.liftToExpected() as? CallableDescriptor ?: return null + return containingExpectedDescriptor.valueParameters.getOrNull(index) + } + + return null +} + +fun KtDeclaration.liftToExpected(): KtDeclaration? { + val descriptor = resolveToDescriptorIfAny() + val expectedDescriptor = descriptor?.liftToExpected() ?: return null + return DescriptorToSourceUtils.descriptorToDeclaration(expectedDescriptor) as? KtDeclaration +} + +fun ModuleDescriptor.hasDeclarationOf(descriptor: MemberDescriptor) = declarationOf(descriptor) != null + +private fun ModuleDescriptor.declarationOf(descriptor: MemberDescriptor): DeclarationDescriptor? = + with(ExpectedActualResolver) { + val expectedCompatibilityMap = findExpectedForActual(descriptor, this@declarationOf) + expectedCompatibilityMap?.get(ExpectedActualResolver.Compatibility.Compatible)?.firstOrNull() + ?: expectedCompatibilityMap?.values?.flatten()?.firstOrNull() + } + +fun ModuleDescriptor.hasActualsFor(descriptor: MemberDescriptor) = + actualsFor(descriptor).isNotEmpty() + +fun ModuleDescriptor.actualsFor(descriptor: MemberDescriptor, checkCompatible: Boolean = false): List = + with(ExpectedActualResolver) { + if (checkCompatible) { + descriptor.findCompatibleActualForExpected(this@actualsFor) + } else { + descriptor.findAnyActualForExpected(this@actualsFor) + } + } + +private fun DeclarationDescriptor.actualsForExpected(): Collection { + if (this is MemberDescriptor) { + if (!this.isExpect) return emptyList() + + return module.implementingDescriptors.flatMap { it.actualsFor(this) } + } + + if (this is ValueParameterDescriptor) { + return containingDeclaration.actualsForExpected().mapNotNull { (it as? CallableDescriptor)?.valueParameters?.getOrNull(index) } + } + + return emptyList() +} + +// null means "any platform" here +fun KtDeclaration.actualsForExpected(module: Module? = null): Set = + resolveToDescriptorIfAny(BodyResolveMode.FULL) + ?.actualsForExpected() + ?.filter { module == null || (it.module.getCapability(ModuleInfo.Capability) as? ModuleSourceInfo)?.module == module } + ?.mapNotNullTo(LinkedHashSet()) { + DescriptorToSourceUtils.descriptorToDeclaration(it) as? KtDeclaration + } ?: emptySet() + + +fun KtNamedDeclaration.isExpectDeclaration(): Boolean = + (toDescriptor() as? MemberDescriptor)?.isExpect == true + +fun KtNamedDeclaration.isActualDeclaration(): Boolean = + (toDescriptor() as? MemberDescriptor)?.isActual == true diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt index a4b86a79dca..f86f63acadb 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt @@ -24,16 +24,13 @@ import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.project.implementingDescriptors import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny -import org.jetbrains.kotlin.idea.facet.implementingDescriptors import org.jetbrains.kotlin.idea.project.targetPlatform import org.jetbrains.kotlin.idea.util.module -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.descriptorUtil.classId import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.getDescriptorsFiltered diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt index d6cd43c9b7a..8c032069f71 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt @@ -29,8 +29,8 @@ import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.config.TargetPlatformKind import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName import org.jetbrains.kotlin.idea.MainFunctionDetector +import org.jetbrains.kotlin.idea.caches.project.implementingModules import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny -import org.jetbrains.kotlin.idea.facet.implementingModules import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.project.targetPlatform import org.jetbrains.kotlin.idea.util.ProjectRootsUtil diff --git a/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt b/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt index 050c4e19b1f..26dfaca4325 100644 --- a/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt +++ b/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt @@ -16,7 +16,7 @@ import com.intellij.psi.ResolveScopeEnlarger import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.SearchScope import org.jetbrains.kotlin.config.TargetPlatformKind -import org.jetbrains.kotlin.idea.facet.findImplementingModules +import org.jetbrains.kotlin.idea.caches.project.findImplementingModules import org.jetbrains.kotlin.idea.project.targetPlatform class CommonModuleResolveScopeEnlarger : ResolveScopeEnlarger() { diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/GotoSuperActionHandler.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/GotoSuperActionHandler.kt index 7c95e55352b..9948986ce96 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/GotoSuperActionHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/GotoSuperActionHandler.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.core.getDirectlyOverriddenDeclarations -import org.jetbrains.kotlin.idea.highlighter.markers.expectedDeclarationIfAny +import org.jetbrains.kotlin.idea.util.expectedDeclarationIfAny import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt index 6148a1c64b0..e2bb9bc06d3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt @@ -122,57 +122,6 @@ val mavenLibraryIdToPlatform: Map> by lazy { .toMap() } -internal fun Module.findImplementingModules(modelsProvider: IdeModifiableModelsProvider) = - modelsProvider.modules.filter { name in it.findImplementedModuleNames(modelsProvider) } - -val Module.implementingModules: List - get() = cached(CachedValueProvider { - CachedValueProvider.Result( - findImplementingModules(IdeModifiableModelsProviderImpl(project)), - ProjectRootModificationTracker.getInstance(project) - ) - }) - -private fun Module.getModuleInfo(baseModuleSourceInfo: ModuleSourceInfo): ModuleSourceInfo? = - when (baseModuleSourceInfo) { - is ModuleProductionSourceInfo -> productionSourceInfo() - is ModuleTestSourceInfo -> testSourceInfo() - else -> null - } - -private fun Module.findImplementingModuleInfos(moduleSourceInfo: ModuleSourceInfo): List { - val modelsProvider = IdeModifiableModelsProviderImpl(project) - val implementingModules = findImplementingModules(modelsProvider) - return implementingModules.mapNotNull { it.getModuleInfo(moduleSourceInfo) } -} - -val ModuleDescriptor.implementingDescriptors: List - get() { - val moduleSourceInfo = getCapability(ModuleInfo.Capability) as? ModuleSourceInfo ?: return emptyList() - val module = moduleSourceInfo.module - return module.cached(CachedValueProvider { - val implementingModuleInfos = module.findImplementingModuleInfos(moduleSourceInfo) - val implementingModuleDescriptors = implementingModuleInfos.mapNotNull { - KotlinCacheService.getInstance(module.project).getResolutionFacadeByModuleInfo(it, it.platform)?.moduleDescriptor - } - CachedValueProvider.Result( - implementingModuleDescriptors, - *(implementingModuleInfos.map { it.createModificationTracker() } + - ProjectRootModificationTracker.getInstance(module.project)).toTypedArray() - ) - }) - } - -val ModuleDescriptor.implementedDescriptors: List - get() { - val moduleSourceInfo = getCapability(ModuleInfo.Capability) as? ModuleSourceInfo ?: return emptyList() - - return moduleSourceInfo.expectedBy.mapNotNull { - KotlinCacheService.getInstance(moduleSourceInfo.module.project) - .getResolutionFacadeByModuleInfo(it, it.platform)?.moduleDescriptor - } - } - fun Module.getOrCreateFacet(modelsProvider: IdeModifiableModelsProvider, useProjectSettings: Boolean, commitModel: Boolean = false): KotlinFacet { diff --git a/idea/src/org/jetbrains/kotlin/idea/goto/KotlinExpectOrActualGotoRelatedProvider.kt b/idea/src/org/jetbrains/kotlin/idea/goto/KotlinExpectOrActualGotoRelatedProvider.kt index a1f100e10f4..2cada09af98 100644 --- a/idea/src/org/jetbrains/kotlin/idea/goto/KotlinExpectOrActualGotoRelatedProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/goto/KotlinExpectOrActualGotoRelatedProvider.kt @@ -19,11 +19,7 @@ package org.jetbrains.kotlin.idea.goto import com.intellij.navigation.GotoRelatedItem import com.intellij.navigation.GotoRelatedProvider import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.idea.highlighter.markers.actualsForExpected -import org.jetbrains.kotlin.idea.highlighter.markers.expectedDeclarationIfAny -import org.jetbrains.kotlin.idea.highlighter.markers.isActualDeclaration -import org.jetbrains.kotlin.idea.highlighter.markers.isExpectDeclaration -import org.jetbrains.kotlin.idea.util.module +import org.jetbrains.kotlin.idea.util.* import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/PlatformExpectedAnnotator.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/PlatformExpectedAnnotator.kt index fd9dd0996da..0b582f1e7da 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/PlatformExpectedAnnotator.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/PlatformExpectedAnnotator.kt @@ -21,9 +21,9 @@ import com.intellij.lang.annotation.Annotator import com.intellij.psi.PsiElement import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.MemberDescriptor +import org.jetbrains.kotlin.idea.caches.project.implementingDescriptors import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.core.toDescriptor -import org.jetbrains.kotlin.idea.facet.implementingDescriptors import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.psi.KtClassOrObject diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasActualMarker.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasActualMarker.kt index b26a45854eb..8dc650dcc37 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasActualMarker.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasActualMarker.kt @@ -18,37 +18,18 @@ package org.jetbrains.kotlin.idea.highlighter.markers import com.intellij.codeInsight.daemon.impl.PsiElementListNavigator import com.intellij.ide.util.DefaultPsiElementCellRenderer -import com.intellij.openapi.module.Module import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo +import org.jetbrains.kotlin.descriptors.MemberDescriptor +import org.jetbrains.kotlin.idea.caches.project.implementingDescriptors import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.toDescriptor -import org.jetbrains.kotlin.idea.facet.implementingDescriptors +import org.jetbrains.kotlin.idea.util.actualsForExpected +import org.jetbrains.kotlin.idea.util.hasActualsFor import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.MultiTargetPlatform -import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.getMultiTargetPlatform -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode -import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver import java.awt.event.MouseEvent -fun ModuleDescriptor.hasActualsFor(descriptor: MemberDescriptor) = - actualsFor(descriptor).isNotEmpty() - -fun ModuleDescriptor.actualsFor(descriptor: MemberDescriptor, checkCompatible: Boolean = false): List = - with(ExpectedActualResolver) { - if (checkCompatible) { - descriptor.findCompatibleActualForExpected(this@actualsFor) - } - else { - descriptor.findAnyActualForExpected(this@actualsFor) - } - } - fun getPlatformActualTooltip(declaration: KtDeclaration?): String? { val descriptor = declaration?.toDescriptor() as? MemberDescriptor ?: return null val commonModuleDescriptor = declaration.containingKtFile.findModuleDescriptor() @@ -75,27 +56,4 @@ fun navigateToPlatformActual(e: MouseEvent?, declaration: KtDeclaration?) { "Choose actual for ${declaration.name}", "Actuals for ${declaration.name}", renderer) -} - -private fun DeclarationDescriptor.actualsForExpected(): Collection { - if (this is MemberDescriptor) { - if (!this.isExpect) return emptyList() - - return module.implementingDescriptors.flatMap { it.actualsFor(this) } - } - - if (this is ValueParameterDescriptor) { - return containingDeclaration.actualsForExpected().mapNotNull { (it as? CallableDescriptor)?.valueParameters?.getOrNull(index) } - } - - return emptyList() -} - -// null means "any platform" here -internal fun KtDeclaration.actualsForExpected(module: Module? = null): Set = - resolveToDescriptorIfAny(BodyResolveMode.FULL) - ?.actualsForExpected() - ?.filter { module == null || (it.module.getCapability(ModuleInfo.Capability) as? ModuleSourceInfo)?.module == module } - ?.mapNotNullTo(LinkedHashSet()) { - DescriptorToSourceUtils.descriptorToDeclaration(it) as? KtDeclaration - } ?: emptySet() \ No newline at end of file +} \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectedMarker.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectedMarker.kt index 4d213dbc981..85c4a1f69a7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectedMarker.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectedMarker.kt @@ -16,29 +16,13 @@ package org.jetbrains.kotlin.idea.highlighter.markers -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.MemberDescriptor +import org.jetbrains.kotlin.idea.caches.project.implementedDescriptors import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.toDescriptor -import org.jetbrains.kotlin.idea.facet.implementedDescriptors -import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor -import org.jetbrains.kotlin.psi.KtClassOrObject +import org.jetbrains.kotlin.idea.util.expectedDeclarationIfAny +import org.jetbrains.kotlin.idea.util.hasDeclarationOf import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject -import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier -import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils -import org.jetbrains.kotlin.resolve.descriptorUtil.module -import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver -import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver.Compatibility.* -import org.jetbrains.kotlin.utils.addToStdlib.safeAs - -fun ModuleDescriptor.hasDeclarationOf(descriptor: MemberDescriptor) = declarationOf(descriptor) != null - -private fun ModuleDescriptor.declarationOf(descriptor: MemberDescriptor): DeclarationDescriptor? = - with(ExpectedActualResolver) { - val expectedCompatibilityMap = findExpectedForActual(descriptor, this@declarationOf) - expectedCompatibilityMap?.get(Compatible)?.firstOrNull() ?: expectedCompatibilityMap?.values?.flatten()?.firstOrNull() - } fun getExpectedDeclarationTooltip(declaration: KtDeclaration?): String? { val descriptor = declaration?.toDescriptor() as? MemberDescriptor ?: return null @@ -52,48 +36,4 @@ fun getExpectedDeclarationTooltip(declaration: KtDeclaration?): String? { fun navigateToExpectedDeclaration(declaration: KtDeclaration?) { declaration?.expectedDeclarationIfAny()?.navigate(false) -} - -internal fun MemberDescriptor.expectedDescriptors() = module.implementedDescriptors.mapNotNull { it.declarationOf(this) } - -// TODO: Sort out the cases with multiple expected descriptors -internal fun MemberDescriptor.expectedDescriptor() = expectedDescriptors().firstOrNull() - -internal fun KtDeclaration.expectedDeclarationIfAny(): KtDeclaration? { - val expectedDescriptor = (toDescriptor() as? MemberDescriptor)?.expectedDescriptor() ?: return null - return DescriptorToSourceUtils.descriptorToDeclaration(expectedDescriptor) as? KtDeclaration -} - -internal fun KtDeclaration.isExpectedOrExpectedClassMember(): Boolean { - if (hasExpectModifier()) return true - if (this is KtClassOrObject) return this.isExpected() - - return containingClassOrObject?.isExpected() == true -} - -internal fun KtClassOrObject.isExpected(): Boolean { - return this.hasExpectModifier() || this.descriptor.safeAs()?.isExpect == true -} - -internal fun DeclarationDescriptor.liftToExpected(): DeclarationDescriptor? { - if (this is MemberDescriptor) { - return when { - isExpect -> this - isActual -> expectedDescriptor() - else -> null - } - } - - if (this is ValueParameterDescriptor) { - val containingExpectedDescriptor = containingDeclaration.liftToExpected() as? CallableDescriptor ?: return null - return containingExpectedDescriptor.valueParameters.getOrNull(index) - } - - return null -} - -internal fun KtDeclaration.liftToExpected(): KtDeclaration? { - val descriptor = resolveToDescriptorIfAny() - val expectedDescriptor = descriptor?.liftToExpected() ?: return null - return DescriptorToSourceUtils.descriptorToDeclaration(expectedDescriptor) as? KtDeclaration } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt index db8b709b5a7..14ade315cbd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt @@ -33,17 +33,16 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.MemberDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.idea.KotlinIcons -import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.lightClasses.KtFakeLightClass import org.jetbrains.kotlin.idea.caches.lightClasses.KtFakeLightMethod +import org.jetbrains.kotlin.idea.caches.project.implementedDescriptors +import org.jetbrains.kotlin.idea.caches.project.implementingDescriptors +import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.core.isInheritable import org.jetbrains.kotlin.idea.core.isOverridable import org.jetbrains.kotlin.idea.core.toDescriptor -import org.jetbrains.kotlin.idea.facet.implementedDescriptors -import org.jetbrains.kotlin.idea.facet.implementingDescriptors import org.jetbrains.kotlin.idea.search.declarationsSearch.toPossiblyFakeLightMethods -import org.jetbrains.kotlin.idea.util.ProjectRootsUtil -import org.jetbrains.kotlin.idea.util.module +import org.jetbrains.kotlin.idea.util.* import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getPrevSiblingIgnoringWhitespaceAndComments @@ -131,12 +130,6 @@ class KotlinLineMarkerProvider : LineMarkerProvider { } } -internal fun KtNamedDeclaration.isExpectDeclaration(): Boolean = - (toDescriptor() as? MemberDescriptor)?.isExpect == true - -internal fun KtNamedDeclaration.isActualDeclaration(): Boolean = - (toDescriptor() as? MemberDescriptor)?.isActual == true - private val OVERRIDING_MARK: Icon = AllIcons.Gutter.OverridingMethod private val IMPLEMENTING_MARK: Icon = AllIcons.Gutter.ImplementingMethod private val OVERRIDDEN_MARK: Icon = AllIcons.Gutter.OverridenMethod diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt index d3b905bd770..1da25c2e5d1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt @@ -39,14 +39,13 @@ import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotated import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil +import org.jetbrains.kotlin.idea.caches.project.implementingDescriptors import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.isInheritable import org.jetbrains.kotlin.idea.core.toDescriptor -import org.jetbrains.kotlin.idea.facet.implementingDescriptors import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory import org.jetbrains.kotlin.idea.findUsages.handlers.KotlinFindClassUsagesHandler -import org.jetbrains.kotlin.idea.highlighter.markers.hasActualsFor import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.quickfix.RemoveUnusedFunctionParameterFix import org.jetbrains.kotlin.idea.references.mainReference @@ -58,8 +57,8 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.getAccessorNames import org.jetbrains.kotlin.idea.search.usagesSearch.getClassNameForCompanionObject import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope import org.jetbrains.kotlin.idea.util.ProjectRootsUtil +import org.jetbrains.kotlin.idea.util.hasActualsFor import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.DescriptorUtils diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt index cb5e8d005c9..6f8efee41f3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt @@ -26,10 +26,10 @@ import com.intellij.refactoring.util.CommonRefactoringUtil import com.intellij.refactoring.util.RefactoringDescriptionLocation import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny -import org.jetbrains.kotlin.idea.highlighter.markers.liftToExpected import org.jetbrains.kotlin.idea.runSynchronouslyWithProgress import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest import org.jetbrains.kotlin.idea.search.declarationsSearch.searchInheritors +import org.jetbrains.kotlin.idea.util.liftToExpected import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtObjectDeclaration diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt index 0eec00b566b..a74aab9a0d6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt @@ -19,8 +19,8 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.codeInspection.CleanupLocalInspectionTool import com.intellij.codeInspection.ProblemHighlightType import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.highlighter.markers.isExpectedOrExpectedClassMember import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection +import org.jetbrains.kotlin.idea.util.isExpectedOrExpectedClassMember import org.jetbrains.kotlin.psi.KtPrimaryConstructor import org.jetbrains.kotlin.psi.psiUtil.containingClass diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/declarations/ConvertMemberToExtensionIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/declarations/ConvertMemberToExtensionIntention.kt index 5bad5aaac74..342113e3031 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/declarations/ConvertMemberToExtensionIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/declarations/ConvertMemberToExtensionIntention.kt @@ -33,15 +33,15 @@ import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.core.* -import org.jetbrains.kotlin.idea.highlighter.markers.actualsForExpected -import org.jetbrains.kotlin.idea.highlighter.markers.isExpectedOrExpectedClassMember -import org.jetbrains.kotlin.idea.highlighter.markers.liftToExpected import org.jetbrains.kotlin.idea.intentions.SelfTargetingRangeIntention import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.getReturnTypeReference import org.jetbrains.kotlin.idea.refactoring.withExpectedActuals import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.idea.util.ImportInsertHelper +import org.jetbrains.kotlin.idea.util.actualsForExpected import org.jetbrains.kotlin.idea.util.application.runWriteAction +import org.jetbrains.kotlin.idea.util.isExpectedOrExpectedClassMember +import org.jetbrains.kotlin.idea.util.liftToExpected import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* diff --git a/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt b/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt index 365a5967936..c13a8e9d000 100644 --- a/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt @@ -19,8 +19,8 @@ package org.jetbrains.kotlin.idea.js import com.intellij.openapi.module.Module import com.intellij.openapi.roots.CompilerModuleExtension import org.jetbrains.jps.util.JpsPathUtil +import org.jetbrains.kotlin.idea.caches.project.implementingModules import org.jetbrains.kotlin.idea.facet.KotlinFacet -import org.jetbrains.kotlin.idea.facet.implementingModules import org.jetbrains.kotlin.idea.framework.isGradleModule import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.js.resolve.JsPlatform diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt index 63d1f665b6e..c936cd717e4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt @@ -26,18 +26,21 @@ import com.intellij.psi.JavaDirectoryService import com.intellij.psi.codeStyle.CodeStyleManager import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.DiagnosticFactory import org.jetbrains.kotlin.diagnostics.Errors -import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo +import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.* -import org.jetbrains.kotlin.idea.highlighter.markers.actualsForExpected import org.jetbrains.kotlin.idea.quickfix.KotlinQuickFixAction import org.jetbrains.kotlin.idea.quickfix.KotlinSingleIntentionActionFactory import org.jetbrains.kotlin.idea.refactoring.createKotlinFile import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers +import org.jetbrains.kotlin.idea.util.actualsForExpected import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt index 7d38a39b18c..fed131929e8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt @@ -35,10 +35,10 @@ import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.getDeepestSuperDeclarations import org.jetbrains.kotlin.idea.core.getDirectlyOverriddenDeclarations -import org.jetbrains.kotlin.idea.highlighter.markers.actualsForExpected -import org.jetbrains.kotlin.idea.highlighter.markers.isExpectedOrExpectedClassMember -import org.jetbrains.kotlin.idea.highlighter.markers.liftToExpected +import org.jetbrains.kotlin.idea.util.actualsForExpected import org.jetbrains.kotlin.idea.util.getResolutionScope +import org.jetbrains.kotlin.idea.util.isExpectedOrExpectedClassMember +import org.jetbrains.kotlin.idea.util.liftToExpected import org.jetbrains.kotlin.psi.KtBlockExpression import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclarationWithBody diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureData.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureData.kt index 5d22325ea81..14c373f2497 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureData.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureData.kt @@ -26,11 +26,11 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde -import org.jetbrains.kotlin.idea.highlighter.markers.actualsForExpected -import org.jetbrains.kotlin.idea.highlighter.markers.isExpectedOrExpectedClassMember import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.KotlinCallableDefinitionUsage import org.jetbrains.kotlin.idea.search.declarationsSearch.forEachOverridingElement import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers +import org.jetbrains.kotlin.idea.util.actualsForExpected +import org.jetbrains.kotlin.idea.util.isExpectedOrExpectedClassMember import org.jetbrains.kotlin.psi.KtCallableDeclaration import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtDeclaration diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureHandler.kt index 8cce1a1d4d4..4264661784b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureHandler.kt @@ -37,8 +37,8 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZE import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde -import org.jetbrains.kotlin.idea.highlighter.markers.expectedDescriptor import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringBundle +import org.jetbrains.kotlin.idea.util.expectedDescriptor import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt index 345c82b4538..cfb92b4d173 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt @@ -59,13 +59,14 @@ import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinLanguage -import org.jetbrains.kotlin.idea.caches.resolve.* +import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny +import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaMemberDescriptor import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.* import org.jetbrains.kotlin.idea.core.util.showYesNoCancelDialog -import org.jetbrains.kotlin.idea.highlighter.markers.actualsForExpected -import org.jetbrains.kotlin.idea.highlighter.markers.liftToExpected import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinValVar @@ -73,6 +74,8 @@ import org.jetbrains.kotlin.idea.refactoring.changeSignature.toValVar import org.jetbrains.kotlin.idea.refactoring.memberInfo.KtPsiClassWrapper import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.util.ProjectRootsUtil +import org.jetbrains.kotlin.idea.util.actualsForExpected +import org.jetbrains.kotlin.idea.util.liftToExpected import org.jetbrains.kotlin.idea.util.string.collapseSpaces import org.jetbrains.kotlin.j2k.ConverterSettings import org.jetbrains.kotlin.j2k.JavaToKotlinConverter diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticOverloadsRenamer.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticOverloadsRenamer.kt index 2474cb5d88d..8f07afe957a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticOverloadsRenamer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticOverloadsRenamer.kt @@ -28,7 +28,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor -import org.jetbrains.kotlin.idea.highlighter.markers.expectedDescriptor +import org.jetbrains.kotlin.idea.util.expectedDescriptor import org.jetbrains.kotlin.idea.util.getAllAccessibleFunctions import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.incremental.components.NoLookupLocation diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt index 9ae54d21f47..d86e522d867 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt @@ -37,7 +37,6 @@ import org.jetbrains.kotlin.asJava.namedUnwrappedElement import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor -import org.jetbrains.kotlin.idea.highlighter.markers.liftToExpected import org.jetbrains.kotlin.idea.refactoring.Pass import org.jetbrains.kotlin.idea.refactoring.checkSuperMethods import org.jetbrains.kotlin.idea.refactoring.checkSuperMethodsWithPopup @@ -47,6 +46,7 @@ import org.jetbrains.kotlin.idea.search.declarationsSearch.findDeepestSuperMetho import org.jetbrains.kotlin.idea.search.declarationsSearch.findDeepestSuperMethodsNoWrapping import org.jetbrains.kotlin.idea.search.declarationsSearch.forEachOverridingMethod import org.jetbrains.kotlin.idea.util.application.runReadAction +import org.jetbrains.kotlin.idea.util.liftToExpected import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.DescriptorUtils import java.lang.IllegalStateException diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt index bd330dcda31..b0875034e34 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt @@ -28,11 +28,11 @@ import com.intellij.usageView.UsageInfo import org.jetbrains.kotlin.asJava.namedUnwrappedElement import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.asJava.unwrapped -import org.jetbrains.kotlin.idea.highlighter.markers.actualsForExpected -import org.jetbrains.kotlin.idea.highlighter.markers.liftToExpected import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters import org.jetbrains.kotlin.idea.search.projectScope +import org.jetbrains.kotlin.idea.util.actualsForExpected +import org.jetbrains.kotlin.idea.util.liftToExpected import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt index 2c13c5f48eb..104808a7bf1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt @@ -43,8 +43,6 @@ import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.deleteElementAndCleanParent -import org.jetbrains.kotlin.idea.highlighter.markers.actualsForExpected -import org.jetbrains.kotlin.idea.highlighter.markers.liftToExpected import org.jetbrains.kotlin.idea.refactoring.checkSuperMethods import org.jetbrains.kotlin.idea.refactoring.formatClass import org.jetbrains.kotlin.idea.refactoring.formatFunction @@ -53,6 +51,8 @@ import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages +import org.jetbrains.kotlin.idea.util.actualsForExpected +import org.jetbrains.kotlin.idea.util.liftToExpected import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType diff --git a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt index e1c4745462f..7264af55eba 100644 --- a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt +++ b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt @@ -32,12 +32,12 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.idea.caches.lightClasses.KtFakeLightClass -import org.jetbrains.kotlin.idea.highlighter.markers.actualsForExpected -import org.jetbrains.kotlin.idea.highlighter.markers.isExpectedOrExpectedClassMember import org.jetbrains.kotlin.idea.search.declarationsSearch.forEachImplementation import org.jetbrains.kotlin.idea.search.declarationsSearch.forEachOverridingMethod import org.jetbrains.kotlin.idea.search.declarationsSearch.toPossiblyFakeLightMethods +import org.jetbrains.kotlin.idea.util.actualsForExpected import org.jetbrains.kotlin.idea.util.application.runReadAction +import org.jetbrains.kotlin.idea.util.isExpectedOrExpectedClassMember import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.contains import java.util.*