Fix after review

This commit is contained in:
Ilya Chernikov
2016-12-14 17:18:47 +01:00
parent f036422ee9
commit d78fc50e90
3 changed files with 6 additions and 7 deletions
@@ -53,11 +53,12 @@ open class GenericReplCompiledEvaluator(baseClasspath: Iterable<File>,
fun classNameFromPath(path: String) = JvmClassName.byInternalName(path.replaceFirst("\\.class$".toRegex(), "")) fun classNameFromPath(path: String) = JvmClassName.byInternalName(path.replaceFirst("\\.class$".toRegex(), ""))
fun processCompiledClasses() { fun processCompiledClasses() {
val expectedClassName = "Line${codeLine.no}"
compiledClasses.filter { it.path.endsWith(".class") } compiledClasses.filter { it.path.endsWith(".class") }
.forEach { .forEach {
val className = classNameFromPath(it.path) val className = classNameFromPath(it.path)
if (className.fqNameForClassNameWithoutDollars.shortName().asString() == "Line${codeLine.no}") { if (className.internalName == expectedClassName || className.internalName.endsWith("/$expectedClassName")) {
mainLineClassName = className.fqNameForClassNameWithoutDollars.asString() mainLineClassName = className.internalName.replace('/', '.')
} }
classLoader.addClass(className, it.bytes) classLoader.addClass(className, it.bytes)
} }
@@ -102,7 +102,7 @@ class GenericReplTest : TestCase() {
TestCase.assertNotNull("Unexpected eval result: $res11", res11e) TestCase.assertNotNull("Unexpected eval result: $res11", res11e)
TestCase.assertEquals(3, res11e!!.value) TestCase.assertEquals(3, res11e!!.value)
val codeLine2 = ReplCodeLine(0, "x+4") val codeLine2 = ReplCodeLine(1, "x+4")
val res2 = repl.replCompiler?.compile(codeLine2, listOf(codeLine1)) val res2 = repl.replCompiler?.compile(codeLine2, listOf(codeLine1))
val res2c = res2 as? ReplCompileResult.CompiledClasses val res2c = res2 as? ReplCompileResult.CompiledClasses
TestCase.assertNotNull("Unexpected compile result: $res2", res2c) TestCase.assertNotNull("Unexpected compile result: $res2", res2c)
@@ -95,8 +95,7 @@ private fun <T> tryCreateCallableMapping(callable: KCallable<*>, args: Iterator<
} }
res.put(par, cvtRes.v) res.put(par, cvtRes.v)
} }
// TODO: check if second part of the condition is necessary else if ((par.type.classifier as? KClass<*>)?.java?.isArray ?: false) {
else if ((par.type.classifier as? KClass<*>)?.let { it.java.isArray || it.qualifiedName == Array<Any>::class.qualifiedName } ?: false) {
// try vararg // try vararg
val cvtVRes = converter.tryConvertVararg(par, arg, argIt) val cvtVRes = converter.tryConvertVararg(par, arg, argIt)
if (cvtVRes is ArgsConverter.Result.Success) { if (cvtVRes is ArgsConverter.Result.Success) {
@@ -197,8 +196,7 @@ private class StringArgsConverter : ArgsConverter<String> {
} }
try { try {
// TODO: check if second part of the condition is necessary if ((parameter.type.classifier as? KClass<*>)?.java?.isArray ?: false) {
if ((parameter.type.classifier as? KClass<*>)?.let { it.java.isArray || it.qualifiedName == Array<Any>::class.qualifiedName } ?: false) {
val argsSequence = sequenceOf(firstArg.value) + restArgsIt.asSequence().map { it.value } val argsSequence = sequenceOf(firstArg.value) + restArgsIt.asSequence().map { it.value }
val primArrayArgCandidate = convertPrimitivesArray(parameter.type, argsSequence) val primArrayArgCandidate = convertPrimitivesArray(parameter.type, argsSequence)
if (primArrayArgCandidate != null) if (primArrayArgCandidate != null)