Move 23 function classes to package kotlin.jvm.functions, drop KFunction*

This commit is contained in:
Alexander Udalov
2015-04-16 17:37:07 +03:00
parent f6178ad7dd
commit b574c1d205
8 changed files with 31 additions and 337 deletions
@@ -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>) {