Minor. Extract KtElement::isMainFunction in the IDE context

This commit is contained in:
Denis Zharkov
2018-09-07 12:09:21 +03:00
parent 38be1f6947
commit f79fbe778f
3 changed files with 25 additions and 13 deletions
@@ -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
@@ -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) {
@@ -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)
}