Make single-file classes tolerant to having many main()'s

This commit is contained in:
Michael Nedzelsky
2015-10-15 00:26:37 +03:00
parent 416dda95ce
commit 890ae3e914
22 changed files with 186 additions and 13 deletions
+21
View File
@@ -0,0 +1,21 @@
package test
class A {}
fun getMain(className: String): java.lang.reflect.Method {
val classLoader = A().javaClass.classLoader
return classLoader.loadClass(className).getDeclaredMethod("main", Array<String>::class.java)
}
fun box(): String {
val bMain = getMain("pkg.AKt")
val cMain = getMain("pkg.BKt")
val args = Array(1, { "" })
bMain.invoke(null, args)
cMain.invoke(null, args)
return args[0]
}
@@ -0,0 +1,5 @@
package pkg
fun main(args: Array<String>) {
args[0] += "O"
}
@@ -0,0 +1,5 @@
package pkg
fun main(args: Array<String>) {
args[0] += "K"
}
@@ -0,0 +1,5 @@
// FILE: a.kt
fun main(args: Array<String>) {}
// FILE: b.kt
fun main(args: Array<String>) {}
@@ -0,0 +1,4 @@
package
public fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
public fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
@@ -0,0 +1,8 @@
// FILE: a.kt
fun main(args: Array<String>) {}
// FILE: b.kt
fun main(args: Array<String>) {}
// FILE: c.kt
fun foo() { <!OVERLOAD_RESOLUTION_AMBIGUITY!>main<!>(arrayOf("a", "b")) }
@@ -0,0 +1,5 @@
package
public fun foo(): kotlin.Unit
public fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
public fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
@@ -0,0 +1,11 @@
// FILE: a.kt
@file:JvmName("Util")
@file:JvmMultifileClass
<!CONFLICTING_JVM_DECLARATIONS!>fun main(args: Array<String>)<!> {}
// FILE: b.kt
@file:JvmName("Util")
@file:JvmMultifileClass
<!CONFLICTING_JVM_DECLARATIONS!>fun main(args: Array<String>)<!> {}
@@ -0,0 +1,4 @@
package
public fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
public fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
@@ -0,0 +1,5 @@
package pkg
fun main(args : Array<String>) {
println("A.main Ok")
}
@@ -0,0 +1,5 @@
package pkg
fun main(args : Array<String>) {
println("B.main Ok")
}
@@ -0,0 +1,12 @@
OUT:
Buildfile: [TestData]/build.xml
build:
[kotlinc] Compiling [[TestData]] => [[Temp]/hello.jar]
[java] A.main Ok
[java] B.main Ok
BUILD SUCCESSFUL
Total time: [time]
Return code: 0
@@ -0,0 +1,23 @@
<project name="Ant Task Test" default="build">
<taskdef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
<target name="build">
<kotlinc output="${temp}/hello.jar">
<src path="${test.data}"/>
</kotlinc>
<java classname="pkg.AKt" fork="true">
<classpath>
<pathelement location="${temp}/hello.jar"/>
<pathelement location="${kotlin.runtime.jar}"/>
</classpath>
</java>
<java classname="pkg.BKt" fork="true">
<classpath>
<pathelement location="${temp}/hello.jar"/>
<pathelement location="${kotlin.runtime.jar}"/>
</classpath>
</java>
</target>
</project>