diff --git a/idea/testData/copyPaste/conversion/FileWithNoPackageStatement.expected.kt b/idea/testData/copyPaste/conversion/FileWithNoPackageStatement.expected.kt index 14b3f3a3e90..40672d14074 100644 --- a/idea/testData/copyPaste/conversion/FileWithNoPackageStatement.expected.kt +++ b/idea/testData/copyPaste/conversion/FileWithNoPackageStatement.expected.kt @@ -1,7 +1,9 @@ package to +import kotlin.platform.platformStatic + public object JavaClass { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { println("Hello, world!") } -} +} \ No newline at end of file diff --git a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt index 0d2e7747ba6..2f256555293 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt @@ -148,17 +148,7 @@ class Converter private constructor( private fun convertFile(javaFile: PsiJavaFile): File { var convertedChildren = javaFile.getChildren().map { convertTopElement(it) }.filterNotNull() - return File(convertedChildren, createMainFunction(javaFile)).assignPrototype(javaFile) - } - - private fun createMainFunction(file: PsiJavaFile): String? { - for (`class` in file.getClasses()) { - val mainMethod = PsiMethodUtil.findMainMethod(`class`) - if (mainMethod != null) { - return "fun main(args: Array) = ${`class`.getName()}.${mainMethod.getName()}(args)" - } - } - return null + return File(convertedChildren).assignPrototype(javaFile) } public fun convertAnnotations(owner: PsiModifierListOwner): Annotations @@ -428,6 +418,17 @@ class Converter private constructor( if (function == null) return null + if (PsiMethodUtil.isMainMethod(method)) { + val fqName = FqName("kotlin.platform.platformStatic") + val identifier = Identifier(fqName.shortName().identifier, imports = listOf(fqName)).assignNoPrototype() + + function.annotations += Annotations( + listOf(Annotation(identifier, + listOf(), + withAt = false, + newLineAfter = false).assignNoPrototype())).assignNoPrototype() + } + if (function.parameterList.parameters.any { it.defaultValue != null } && !function.modifiers.isPrivate) { function.annotations += Annotations( listOf(Annotation(Identifier("jvmOverloads").assignNoPrototype(), diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ast/File.kt b/j2k/src/org/jetbrains/kotlin/j2k/ast/File.kt index 540138ef8e0..bc2dd6f33cd 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ast/File.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ast/File.kt @@ -25,11 +25,8 @@ class PackageStatement(val packageName: String) : Element() { } } -class File(val elements: List, val mainFunction: String?) : Element() { +class File(val elements: List) : Element() { override fun generateCode(builder: CodeBuilder) { builder.append(elements, "\n") - if (mainFunction != null) { - builder append "\n\n" append mainFunction - } } } diff --git a/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.kt b/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.kt index d4b94e724d0..067900b1817 100644 --- a/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.kt +++ b/j2k/testData/fileOrElement/classExpression/primitivesAndArrays.kt @@ -1,5 +1,7 @@ +import kotlin.platform.platformStatic + public object A { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { println(Void.TYPE) println(Integer.TYPE) println(java.lang.Double.TYPE) @@ -8,5 +10,3 @@ public object A { println(javaClass>>()) } } - -fun main(args: Array) = A.main(args) \ No newline at end of file diff --git a/j2k/testData/fileOrElement/for/withContinue1.kt b/j2k/testData/fileOrElement/for/withContinue1.kt index 028f3096ffa..9b362259a82 100644 --- a/j2k/testData/fileOrElement/for/withContinue1.kt +++ b/j2k/testData/fileOrElement/for/withContinue1.kt @@ -1,5 +1,7 @@ +import kotlin.platform.platformStatic + public object TestClass { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { var i = 0 while (i < 10) { if (i == 4 || i == 8) { @@ -11,6 +13,4 @@ public object TestClass { ++i } } -} - -fun main(args: Array) = TestClass.main(args) +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/for/withContinue2.kt b/j2k/testData/fileOrElement/for/withContinue2.kt index a7a03702df3..41176c10032 100644 --- a/j2k/testData/fileOrElement/for/withContinue2.kt +++ b/j2k/testData/fileOrElement/for/withContinue2.kt @@ -1,5 +1,7 @@ +import kotlin.platform.platformStatic + public object TestClass { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { var i = 0 var j = 1 while (i < 10) { @@ -14,6 +16,4 @@ public object TestClass { j *= 2 } } -} - -fun main(args: Array) = TestClass.main(args) +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/for/withContinue3.kt b/j2k/testData/fileOrElement/for/withContinue3.kt index 2c4bf9224e0..f5fe9285007 100644 --- a/j2k/testData/fileOrElement/for/withContinue3.kt +++ b/j2k/testData/fileOrElement/for/withContinue3.kt @@ -1,5 +1,7 @@ +import kotlin.platform.platformStatic + public object TestClass { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { var i = 1 while (i < 1000) { if (i == 4 || i == 8) { @@ -10,6 +12,4 @@ public object TestClass { i *= 2 } } -} - -fun main(args: Array) = TestClass.main(args) +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/for/withContinueAndLabels.kt b/j2k/testData/fileOrElement/for/withContinueAndLabels.kt index 838494f0e36..81c0a012018 100644 --- a/j2k/testData/fileOrElement/for/withContinueAndLabels.kt +++ b/j2k/testData/fileOrElement/for/withContinueAndLabels.kt @@ -1,5 +1,7 @@ +import kotlin.platform.platformStatic + public object TestClass { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { var i = 1 OuterLoop1@ OuterLoop2@ while (i < 1000) { var j = 1 @@ -22,6 +24,4 @@ public object TestClass { i *= 2 } } -} - -fun main(args: Array) = TestClass.main(args) +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/function/main.kt b/j2k/testData/fileOrElement/function/main.kt index c3ed82b93b3..6d8ee808ee3 100644 --- a/j2k/testData/fileOrElement/function/main.kt +++ b/j2k/testData/fileOrElement/function/main.kt @@ -1,2 +1,5 @@ -public fun main(args: Array) { +import kotlin.platform.platformStatic + + +platformStatic public fun main(args: Array) { } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/function/main2.kt b/j2k/testData/fileOrElement/function/main2.kt index 6774cb5bdc3..68a52c48e8c 100644 --- a/j2k/testData/fileOrElement/function/main2.kt +++ b/j2k/testData/fileOrElement/function/main2.kt @@ -1,6 +1,6 @@ -public object A { - public fun main(args: Array) { - } -} +import kotlin.platform.platformStatic -fun main(args: Array) = A.main(args) \ No newline at end of file +public object A { + platformStatic public fun main(args: Array) { + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/function/mainAndNullabilitySetting.kt b/j2k/testData/fileOrElement/function/mainAndNullabilitySetting.kt index 6ae242616a7..e00e72b7c75 100644 --- a/j2k/testData/fileOrElement/function/mainAndNullabilitySetting.kt +++ b/j2k/testData/fileOrElement/function/mainAndNullabilitySetting.kt @@ -1,7 +1,7 @@ +import kotlin.platform.platformStatic + // !forceNotNullTypes: false public object A { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { } -} - -fun main(args: Array) = A.main(args) \ No newline at end of file +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/issues/kt-638.kt b/j2k/testData/fileOrElement/issues/kt-638.kt index 82dd88fc288..98af3de61ab 100644 --- a/j2k/testData/fileOrElement/issues/kt-638.kt +++ b/j2k/testData/fileOrElement/issues/kt-638.kt @@ -1,4 +1,6 @@ // ERROR: Property must be initialized or be abstract +import kotlin.platform.platformStatic + public class Identifier { public val name: T private val myHasDollar: Boolean @@ -21,11 +23,9 @@ public class Identifier { } public object User { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { val i1 = Identifier("name", false, true) val i2 = Identifier("name", false) val i3 = Identifier("name") } -} - -fun main(args: Array) = User.main(args) \ No newline at end of file +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/issues/kt-807.kt b/j2k/testData/fileOrElement/issues/kt-807.kt index 61d09860a71..56b53c7345f 100644 --- a/j2k/testData/fileOrElement/issues/kt-807.kt +++ b/j2k/testData/fileOrElement/issues/kt-807.kt @@ -3,9 +3,10 @@ // ERROR: Assignments are not expressions, and only expressions are allowed in this context // ERROR: Unresolved reference: close import java.io.* +import kotlin.platform.platformStatic object FileRead { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { try { val fstream = FileInputStream() val `in` = DataInputStream(fstream) @@ -20,6 +21,4 @@ object FileRead { } } -} - -fun main(args: Array) = FileRead.main(args) \ No newline at end of file +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/issues/kt-871.kt b/j2k/testData/fileOrElement/issues/kt-871.kt index 78e5b5b2271..0763f75f924 100644 --- a/j2k/testData/fileOrElement/issues/kt-871.kt +++ b/j2k/testData/fileOrElement/issues/kt-871.kt @@ -1,9 +1,9 @@ package demo +import kotlin.platform.platformStatic + object Program { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { println("Halo!") } -} - -fun main(args: Array) = Program.main(args) \ No newline at end of file +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/switch/comlicatedFallDown.kt b/j2k/testData/fileOrElement/switch/comlicatedFallDown.kt index 2f56461f3d5..c7545be81ec 100644 --- a/j2k/testData/fileOrElement/switch/comlicatedFallDown.kt +++ b/j2k/testData/fileOrElement/switch/comlicatedFallDown.kt @@ -1,5 +1,7 @@ package demo +import kotlin.platform.platformStatic + public object SwitchDemo { public fun print(o: Any) { println(o) @@ -76,10 +78,8 @@ public object SwitchDemo { println(monthString) } - public fun main(args: Array) { + platformStatic public fun main(args: Array) { for (i in 1..12) test(i) } -} - -fun main(args: Array) = SwitchDemo.main(args) \ No newline at end of file +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/switch/emptySwitch.kt b/j2k/testData/fileOrElement/switch/emptySwitch.kt index fd5c168bd2d..316559252b3 100644 --- a/j2k/testData/fileOrElement/switch/emptySwitch.kt +++ b/j2k/testData/fileOrElement/switch/emptySwitch.kt @@ -1,5 +1,7 @@ +import kotlin.platform.platformStatic + public object NonDefault { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { val value = 3 val valueString = "" @@ -8,6 +10,4 @@ public object NonDefault { } println(valueString) } -} - -fun main(args: Array) = NonDefault.main(args) \ No newline at end of file +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/switch/fallDown.kt b/j2k/testData/fileOrElement/switch/fallDown.kt index 8262568bb89..1887f9e3ca8 100644 --- a/j2k/testData/fileOrElement/switch/fallDown.kt +++ b/j2k/testData/fileOrElement/switch/fallDown.kt @@ -1,7 +1,9 @@ package switch_demo +import kotlin.platform.platformStatic + public object SwitchDemo { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { val month = 8 val monthString: String when (month) { @@ -10,6 +12,4 @@ public object SwitchDemo { } println(monthString) } -} - -fun main(args: Array) = SwitchDemo.main(args) \ No newline at end of file +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/switch/fallDownWithBlocks.kt b/j2k/testData/fileOrElement/switch/fallDownWithBlocks.kt index da9d8e190f2..93446a4d249 100644 --- a/j2k/testData/fileOrElement/switch/fallDownWithBlocks.kt +++ b/j2k/testData/fileOrElement/switch/fallDownWithBlocks.kt @@ -1,5 +1,7 @@ +import kotlin.platform.platformStatic + public object C { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { when (args.size()) { 1 -> { run { @@ -18,6 +20,4 @@ public object C { } } } -} - -fun main(args: Array) = C.main(args) \ No newline at end of file +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/switch/kt-539.kt b/j2k/testData/fileOrElement/switch/kt-539.kt index 0a455d17b34..3ecb8145c5e 100644 --- a/j2k/testData/fileOrElement/switch/kt-539.kt +++ b/j2k/testData/fileOrElement/switch/kt-539.kt @@ -1,7 +1,9 @@ package switch_demo +import kotlin.platform.platformStatic + public object SwitchDemo { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { val month = 8 val monthString: String @@ -22,6 +24,4 @@ public object SwitchDemo { } println(monthString) } -} - -fun main(args: Array) = SwitchDemo.main(args) \ No newline at end of file +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/switch/nondefault.kt b/j2k/testData/fileOrElement/switch/nondefault.kt index 2a3a483e5e9..b93a70975f4 100644 --- a/j2k/testData/fileOrElement/switch/nondefault.kt +++ b/j2k/testData/fileOrElement/switch/nondefault.kt @@ -1,5 +1,7 @@ +import kotlin.platform.platformStatic + public object NonDefault { - public fun main(args: Array) { + platformStatic public fun main(args: Array) { val value = 3 var valueString = "" @@ -10,6 +12,4 @@ public object NonDefault { } println(valueString) } -} - -fun main(args: Array) = NonDefault.main(args) \ No newline at end of file +} \ No newline at end of file