From f79fbe778fe049ee2ac6ca7bac57e50f1699a7b1 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 7 Sep 2018 12:09:21 +0300 Subject: [PATCH] Minor. Extract KtElement::isMainFunction in the IDE context --- .../KotlinRunLineMarkerContributor.kt | 10 ++------- .../UnusedReceiverParameterInspection.kt | 7 ++----- .../jetbrains/kotlin/idea/mainDetectorUtil.kt | 21 +++++++++++++++++++ 3 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 idea/src/org/jetbrains/kotlin/idea/mainDetectorUtil.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRunLineMarkerContributor.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRunLineMarkerContributor.kt index cdfa2746849..8964b2ab281 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRunLineMarkerContributor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRunLineMarkerContributor.kt @@ -20,10 +20,8 @@ import com.intellij.execution.lineMarker.ExecutorAction import com.intellij.execution.lineMarker.RunLineMarkerContributor import com.intellij.icons.AllIcons import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.idea.MainFunctionDetector -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny +import org.jetbrains.kotlin.idea.isMainFunction import org.jetbrains.kotlin.idea.platform.tooling -import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.util.module import org.jetbrains.kotlin.psi.KtNamedFunction @@ -34,11 +32,7 @@ class KotlinRunLineMarkerContributor : RunLineMarkerContributor() { if (function.nameIdentifier != element) return null - val detector = MainFunctionDetector(function.languageVersionSettings) { someFunction -> - someFunction.resolveToDescriptorIfAny() - } - - if (detector.isMain(function)) { + if (function.isMainFunction()) { val platform = function.containingKtFile.module?.platform ?: return null if (!platform.kind.tooling.acceptsAsEntryPoint(function)) return null diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt index 69bd56389b5..c4e957048da 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt @@ -25,11 +25,10 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.idea.KotlinBundle -import org.jetbrains.kotlin.idea.MainFunctionDetector import org.jetbrains.kotlin.idea.caches.resolve.analyzeWithContent import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.isOverridable -import org.jetbrains.kotlin.idea.project.languageVersionSettings +import org.jetbrains.kotlin.idea.isMainFunction import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeSignatureConfiguration import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescriptor import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify @@ -78,9 +77,7 @@ class UnusedReceiverParameterInspection : AbstractKotlinInspection() { val callable = callableDeclaration.descriptor ?: return - val mainFunctionDetector = - MainFunctionDetector(callableDeclaration.languageVersionSettings) { it.resolveToDescriptorIfAny() } - if (mainFunctionDetector.isMain(callable)) return + if (callableDeclaration.isMainFunction(callable)) return val containingDeclaration = callable.containingDeclaration if (containingDeclaration != null && containingDeclaration == receiverTypeDeclaration) { diff --git a/idea/src/org/jetbrains/kotlin/idea/mainDetectorUtil.kt b/idea/src/org/jetbrains/kotlin/idea/mainDetectorUtil.kt new file mode 100644 index 00000000000..cdc55cbf797 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/mainDetectorUtil.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-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 + +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny +import org.jetbrains.kotlin.idea.project.languageVersionSettings +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtNamedFunction + +fun KtElement.isMainFunction(computedDescriptor: DeclarationDescriptor? = null): Boolean { + if (this !is KtNamedFunction) return false + val mainFunctionDetector = MainFunctionDetector(languageVersionSettings) { it.resolveToDescriptorIfAny() } + + if (computedDescriptor != null) return mainFunctionDetector.isMain(computedDescriptor) + + return mainFunctionDetector.isMain(this) +}