Move 23 function classes to package kotlin.jvm.functions, drop KFunction*
This commit is contained in:
@@ -16,35 +16,28 @@
|
||||
|
||||
package org.jetbrains.kotlin.generators.builtins.functions
|
||||
|
||||
import org.jetbrains.kotlin.generators.builtins.functions.FunctionKind.*
|
||||
import org.jetbrains.kotlin.generators.builtins.generateBuiltIns.BuiltInsSourceGenerator
|
||||
import java.io.PrintWriter
|
||||
|
||||
val MAX_PARAM_COUNT = 22
|
||||
|
||||
enum class FunctionKind(
|
||||
private val classNamePrefix: String,
|
||||
val classFqNamePrefix: String,
|
||||
val docPrefix: String,
|
||||
val hasReceiverParameter: Boolean,
|
||||
private val superClassNamePrefix: String?
|
||||
val hasReceiverParameter: Boolean
|
||||
) {
|
||||
FUNCTION("Function", "A function", false, null),
|
||||
EXTENSION_FUNCTION("ExtensionFunction", "An extension function", true, null),
|
||||
FUNCTION : FunctionKind("kotlin.jvm.functions.Function", "A function", false)
|
||||
EXTENSION_FUNCTION : FunctionKind("kotlin.ExtensionFunction", "An extension function", true)
|
||||
|
||||
K_FUNCTION("KFunction", "A function with introspection capabilities", false, "Function"),
|
||||
K_MEMBER_FUNCTION("KMemberFunction", "A member function with introspection capabilities", true, "ExtensionFunction"),
|
||||
K_EXTENSION_FUNCTION("KExtensionFunction", "An extension function with introspection capabilities", true, "ExtensionFunction");
|
||||
val classNamePrefix: String get() = classFqNamePrefix.substringAfterLast('.')
|
||||
val packageFqName: String get() = classFqNamePrefix.substringBeforeLast('.')
|
||||
val fileName: String get() = classFqNamePrefix.replace('.', '/') + "s.kt"
|
||||
|
||||
fun getFileName() = (if (isReflection()) "reflect/" else "") + classNamePrefix + "s.kt"
|
||||
fun getClassName(i: Int) = classNamePrefix + i
|
||||
fun getSuperClassName(i: Int) = superClassNamePrefix?.plus(i)
|
||||
fun getPackage() = if (isReflection()) "kotlin.reflect" else "kotlin"
|
||||
|
||||
fun isReflection() = name() startsWith "K"
|
||||
}
|
||||
|
||||
class GenerateFunctions(out: PrintWriter, val kind: FunctionKind) : BuiltInsSourceGenerator(out) {
|
||||
override fun getPackage() = kind.getPackage()
|
||||
override fun getPackage() = kind.packageFqName
|
||||
|
||||
fun generateTypeParameters(i: Int, variance: Boolean) {
|
||||
out.print("<")
|
||||
@@ -73,7 +66,7 @@ class GenerateFunctions(out: PrintWriter, val kind: FunctionKind) : BuiltInsSour
|
||||
generateDocumentation(i)
|
||||
out.print("public interface " + kind.getClassName(i))
|
||||
generateTypeParameters(i, variance = true)
|
||||
generateSuperClass(i)
|
||||
generateSuperClass()
|
||||
generateFunctionClassBody(i)
|
||||
}
|
||||
}
|
||||
@@ -83,28 +76,16 @@ class GenerateFunctions(out: PrintWriter, val kind: FunctionKind) : BuiltInsSour
|
||||
out.println("/** ${kind.docPrefix} that takes $i argument${suffix}. */")
|
||||
}
|
||||
|
||||
fun generateSuperClass(i: Int) {
|
||||
val superClass = kind.getSuperClassName(i)
|
||||
if (superClass != null) {
|
||||
out.print(" : $superClass")
|
||||
generateTypeParameters(i, variance = false)
|
||||
}
|
||||
else {
|
||||
out.print(" : Function<")
|
||||
generateReturnTypeParameter(variance = false)
|
||||
out.print(">")
|
||||
}
|
||||
fun generateSuperClass() {
|
||||
out.print(" : Function<")
|
||||
generateReturnTypeParameter(variance = false)
|
||||
out.print(">")
|
||||
}
|
||||
|
||||
fun generateFunctionClassBody(i: Int): Unit = when (kind) {
|
||||
FUNCTION, EXTENSION_FUNCTION -> {
|
||||
out.println(" {")
|
||||
generateInvokeSignature(i)
|
||||
out.println("}")
|
||||
}
|
||||
K_FUNCTION, K_MEMBER_FUNCTION, K_EXTENSION_FUNCTION -> {
|
||||
out.println()
|
||||
}
|
||||
fun generateFunctionClassBody(i: Int) {
|
||||
out.println(" {")
|
||||
generateInvokeSignature(i)
|
||||
out.println("}")
|
||||
}
|
||||
|
||||
fun generateInvokeSignature(i: Int) {
|
||||
|
||||
@@ -31,9 +31,9 @@ import java.io.PrintWriter
|
||||
fun assertExists(file: File): Unit =
|
||||
if (!file.exists()) error("Output dir does not exist: ${file.getAbsolutePath()}")
|
||||
|
||||
val BUILT_INS_NATIVE_DIR = File("core/builtins/native/kotlin/")
|
||||
val BUILT_INS_SRC_DIR = File("core/builtins/src/kotlin/")
|
||||
val RUNTIME_JVM_DIR = File("core/runtime.jvm/src/kotlin/")
|
||||
val BUILT_INS_NATIVE_DIR = File("core/builtins/native/")
|
||||
val BUILT_INS_SRC_DIR = File("core/builtins/src/")
|
||||
val RUNTIME_JVM_DIR = File("core/runtime.jvm/src/")
|
||||
|
||||
abstract class BuiltInsSourceGenerator(val out: PrintWriter) {
|
||||
protected abstract fun generateBody(): Unit
|
||||
@@ -59,16 +59,17 @@ fun generateBuiltIns(generate: (File, (PrintWriter) -> BuiltInsSourceGenerator)
|
||||
assertExists(RUNTIME_JVM_DIR)
|
||||
|
||||
for (kind in FunctionKind.values()) {
|
||||
generate(File(BUILT_INS_SRC_DIR, kind.getFileName())) { GenerateFunctions(it, kind) }
|
||||
val dir = if (kind == FunctionKind.FUNCTION) RUNTIME_JVM_DIR else BUILT_INS_SRC_DIR
|
||||
generate(File(dir, kind.fileName)) { GenerateFunctions(it, kind) }
|
||||
}
|
||||
|
||||
generate(File(BUILT_INS_NATIVE_DIR, "Arrays.kt")) { GenerateArrays(it) }
|
||||
generate(File(BUILT_INS_NATIVE_DIR, "Primitives.kt")) { GeneratePrimitives(it) }
|
||||
generate(File(BUILT_INS_SRC_DIR, "Iterators.kt")) { GenerateIterators(it) }
|
||||
generate(File(RUNTIME_JVM_DIR, "jvm/internal/ArrayIterators.kt")) { GenerateArrayIterators(it) }
|
||||
generate(File(BUILT_INS_SRC_DIR, "ProgressionIterators.kt")) { GenerateProgressionIterators(it) }
|
||||
generate(File(BUILT_INS_SRC_DIR, "Progressions.kt")) { GenerateProgressions(it) }
|
||||
generate(File(BUILT_INS_SRC_DIR, "Ranges.kt")) { GenerateRanges(it) }
|
||||
generate(File(BUILT_INS_NATIVE_DIR, "kotlin/Arrays.kt")) { GenerateArrays(it) }
|
||||
generate(File(BUILT_INS_NATIVE_DIR, "kotlin/Primitives.kt")) { GeneratePrimitives(it) }
|
||||
generate(File(BUILT_INS_SRC_DIR, "kotlin/Iterators.kt")) { GenerateIterators(it) }
|
||||
generate(File(RUNTIME_JVM_DIR, "kotlin/jvm/internal/ArrayIterators.kt")) { GenerateArrayIterators(it) }
|
||||
generate(File(BUILT_INS_SRC_DIR, "kotlin/ProgressionIterators.kt")) { GenerateProgressionIterators(it) }
|
||||
generate(File(BUILT_INS_SRC_DIR, "kotlin/Progressions.kt")) { GenerateProgressions(it) }
|
||||
generate(File(BUILT_INS_SRC_DIR, "kotlin/Ranges.kt")) { GenerateRanges(it) }
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
|
||||
Reference in New Issue
Block a user