Make single-file classes tolerant to having many main()'s
This commit is contained in:
@@ -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"
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
// FILE: a.kt
|
||||
fun main(args: Array<String>) {}
|
||||
|
||||
// FILE: b.kt
|
||||
fun main(args: Array<String>) {}
|
||||
+4
@@ -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
|
||||
+8
@@ -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")) }
|
||||
+5
@@ -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
|
||||
+11
@@ -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>)<!> {}
|
||||
+4
@@ -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>
|
||||
Reference in New Issue
Block a user