From 36d23e4501196513b10720e7af4e798afe860949 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 14 Mar 2018 18:54:27 +0100 Subject: [PATCH] Refactor: merge synonymous utils --- .../kotlin/idea/util/expectActualUtil.kt | 32 +++++++++---------- .../RemoveEmptyPrimaryConstructorIntention.kt | 4 +-- .../ConvertMemberToExtensionIntention.kt | 7 ++-- .../idea/refactoring/CallableRefactoring.kt | 7 ++-- .../KotlinChangeSignatureData.kt | 4 +-- .../KotlinDefinitionsSearcher.kt | 4 +-- 6 files changed, 26 insertions(+), 32 deletions(-) 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 index e206db74d32..4578af6071b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/expectActualUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/expectActualUtil.kt @@ -16,8 +16,8 @@ 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.hasActualModifier import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.descriptorUtil.module @@ -35,17 +35,6 @@ fun KtDeclaration.expectedDeclarationIfAny(): KtDeclaration? { 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 { @@ -114,8 +103,19 @@ fun KtDeclaration.actualsForExpected(module: Module? = null): Set } ?: emptySet() -fun KtNamedDeclaration.isExpectDeclaration(): Boolean = - (toDescriptor() as? MemberDescriptor)?.isExpect == true +fun KtDeclaration.isExpectDeclaration(): Boolean { + if (hasExpectModifier()) return true + if (this is KtClassOrObject) return this.isExpected() -fun KtNamedDeclaration.isActualDeclaration(): Boolean = - (toDescriptor() as? MemberDescriptor)?.isActual == true + return containingClassOrObject?.isExpected() == true +} + +private fun KtClassOrObject.isExpected(): Boolean { + return this.hasExpectModifier() || this.descriptor.safeAs()?.isExpect == true +} + +fun KtDeclaration.isActualDeclaration(): Boolean { + if (hasActualModifier()) return true + + return (toDescriptor() as? MemberDescriptor)?.isActual == true +} diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt index a74aab9a0d6..ee2ed1b48bc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt @@ -20,7 +20,7 @@ import com.intellij.codeInspection.CleanupLocalInspectionTool import com.intellij.codeInspection.ProblemHighlightType import com.intellij.openapi.editor.Editor import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection -import org.jetbrains.kotlin.idea.util.isExpectedOrExpectedClassMember +import org.jetbrains.kotlin.idea.util.isExpectDeclaration import org.jetbrains.kotlin.psi.KtPrimaryConstructor import org.jetbrains.kotlin.psi.psiUtil.containingClass @@ -40,7 +40,7 @@ class RemoveEmptyPrimaryConstructorIntention : element.annotations.isNotEmpty() -> false element.modifierList?.text?.isBlank() == false -> false element.containingClass()?.secondaryConstructors?.isNotEmpty() == true -> false - element.isExpectedOrExpectedClassMember() -> false + element.isExpectDeclaration() -> false else -> true } } 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 342113e3031..35dee715aae 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/declarations/ConvertMemberToExtensionIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/declarations/ConvertMemberToExtensionIntention.kt @@ -37,11 +37,8 @@ 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.* 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.* @@ -111,7 +108,7 @@ class ConvertMemberToExtensionIntention : SelfTargetingRangeIntention( fun getAffectedCallables(project: Project, descriptorsForChange: Collection): List { val baseCallables = descriptorsForChange.mapNotNull { DescriptorToSourceUtilsIde.getAnyDeclaration(project, it) } return baseCallables + baseCallables.flatMapTo(HashSet()) { callable -> - if (callable is KtDeclaration && callable.isExpectedOrExpectedClassMember()) { + if (callable is KtDeclaration && callable.isExpectDeclaration()) { callable.actualsForExpected() } else { 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 14c373f2497..245896f2ab6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureData.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureData.kt @@ -30,7 +30,7 @@ import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.KotlinCallab 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.idea.util.isExpectDeclaration import org.jetbrains.kotlin.psi.KtCallableDeclaration import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtDeclaration @@ -101,7 +101,7 @@ class KotlinChangeSignatureData( primaryCallables + primaryCallables.flatMapTo(HashSet()) { primaryFunction -> val primaryDeclaration = primaryFunction.declaration as? KtDeclaration ?: return@flatMapTo emptyList() - if (primaryDeclaration.isExpectedOrExpectedClassMember()) { + if (primaryDeclaration.isExpectDeclaration()) { return@flatMapTo primaryDeclaration.actualsForExpected().mapNotNull { val descriptor = it.unsafeResolveToDescriptor() val callableDescriptor = when (descriptor) { 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 7264af55eba..94c7200bb7e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt +++ b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt @@ -37,7 +37,7 @@ import org.jetbrains.kotlin.idea.search.declarationsSearch.forEachOverridingMeth 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.idea.util.isExpectDeclaration import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.contains import java.util.* @@ -140,7 +140,7 @@ class KotlinDefinitionsSearcher : QueryExecutor): Boolean { return runReadAction { - if (!declaration.isExpectedOrExpectedClassMember()) true + if (!declaration.isExpectDeclaration()) true else declaration.actualsForExpected().all(consumer::process) } }