Add language feature for extended main convention

- suspend
- parameterless

 #KT-17679 Fixed
 #KT-26574 Fixed
This commit is contained in:
Denis Zharkov
2018-09-06 19:19:40 +03:00
parent f79fbe778f
commit 1cc0c12f87
18 changed files with 132 additions and 10 deletions
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.idea
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.name.FqName
@@ -138,6 +139,8 @@ class MainFunctionDetector {
}
}
if (descriptor.isSuspend && !languageVersionSettings.supportsFeature(LanguageFeature.ExtendedMainConvention)) return false
if (checkReturnType && !isMainReturnType(descriptor)) return false
if (DescriptorUtils.isTopLevelDeclaration(descriptor)) return true
@@ -173,17 +176,17 @@ class MainFunctionDetector {
private fun findMainFunction(declarations: List<KtDeclaration>) =
declarations.filterIsInstance<KtNamedFunction>().find { isMain(it) }
companion object {
private fun isParameterNumberSuitsForMain(
parametersCount: Int,
isTopLevel: Boolean,
allowParameterless: Boolean
) = when (parametersCount) {
1 -> true
0 -> isTopLevel && allowParameterless
else -> false
}
private fun isParameterNumberSuitsForMain(
parametersCount: Int,
isTopLevel: Boolean,
allowParameterless: Boolean
) = when (parametersCount) {
1 -> true
0 -> isTopLevel && allowParameterless && languageVersionSettings.supportsFeature(LanguageFeature.ExtendedMainConvention)
else -> false
}
companion object {
private fun isMainReturnType(descriptor: FunctionDescriptor): Boolean {
val returnType = descriptor.returnType
return returnType != null && KotlinBuiltIns.isUnit(returnType)