KT-12195 Quickfix @JvmStatic on main() method in an object (#1192)

* Quickfix @JvmStatic on main() method in an object #KT-12195 Fixed

* Fixed #KT-12195
This commit is contained in:
Toshiaki Kameyama
2017-07-19 20:37:12 +09:00
committed by Dmitry Jemerov
parent a8da79a130
commit 366b9d1d79
20 changed files with 220 additions and 5 deletions
@@ -46,7 +46,8 @@ class MainFunctionDetector {
return findMainFunction(declarations) != null
}
fun isMain(function: KtNamedFunction): Boolean {
@JvmOverloads
fun isMain(function: KtNamedFunction, checkJvmStaticAnnotation: Boolean = true): Boolean {
if (function.isLocal) {
return false
}
@@ -61,11 +62,11 @@ class MainFunctionDetector {
}
/* Psi only check for kotlin.jvm.jvmStatic annotation */
if (!function.isTopLevel && !hasAnnotationWithExactNumberOfArguments(function, 0)) {
if (checkJvmStaticAnnotation && !function.isTopLevel && !hasAnnotationWithExactNumberOfArguments(function, 0)) {
return false
}
return isMain(getFunctionDescriptor(function))
return isMain(getFunctionDescriptor(function), checkJvmStaticAnnotation)
}
fun getMainFunction(module: ModuleDescriptor): FunctionDescriptor? = getMainFunction(module, module.getPackage(FqName.ROOT))
@@ -90,7 +91,7 @@ class MainFunctionDetector {
companion object {
fun isMain(descriptor: DeclarationDescriptor): Boolean {
fun isMain(descriptor: DeclarationDescriptor, checkJvmStaticAnnotation: Boolean = true): Boolean {
if (descriptor !is FunctionDescriptor) return false
if (getJVMFunctionName(descriptor) != "main") {
@@ -123,7 +124,7 @@ class MainFunctionDetector {
val containingDeclaration = descriptor.containingDeclaration
return containingDeclaration is ClassDescriptor
&& containingDeclaration.kind.isSingleton
&& descriptor.hasJvmStaticAnnotation()
&& (descriptor.hasJvmStaticAnnotation() || !checkJvmStaticAnnotation)
}
private fun getJVMFunctionName(functionDescriptor: FunctionDescriptor): String {