Java to Kotlin converter: no special logic for returns in try-with-resource is needed anymore

This commit is contained in:
Valentin Kipyatkov
2014-07-09 13:27:41 +04:00
parent 2ebaab867d
commit fe46b40220
4 changed files with 4 additions and 37 deletions
@@ -246,22 +246,6 @@ open class StatementVisitor(public val converter: Converter) : JavaElementVisito
var wrapResultStatement: (Expression) -> Statement = { it }
var converterForBody = converter
val returns = collectReturns(tryBlock)
//TODO: support other returns when non-local returns supported by Kotlin
if (returns.size == 1 && returns.single() == tryBlock!!.getStatements().last()) {
wrapResultStatement = { ReturnStatement(it).assignPrototype(returns.single()) }
converterForBody = converter.withStatementVisitor { object : StatementVisitor(it) {
override fun visitReturnStatement(statement: PsiReturnStatement) {
if (statement == returns.single()) {
result = converter.convertExpression(statement.getReturnValue(), tryBlock!!.getContainingMethod()?.getReturnType())
}
else {
super.visitReturnStatement(statement)
}
}
}}
}
var block = converterForBody.convertBlock(tryBlock)
var expression: Expression = Expression.Empty
for (variable in resourceVariables.reverse()) {
@@ -1,17 +0,0 @@
//file
import java.io.*;
public class C {
int foo() {
try(InputStream stream = new FileInputStream("foo")) {
while(true) {
int c = stream.read();
if (c < 0 || c > 127) return c;
}
}
catch (IOException e) {
System.out.println(e);
return -1;
}
}
}
@@ -3,10 +3,10 @@ import java.io.*
public class C {
fun foo(): Int {
try {
return FileInputStream("foo").use { stream ->
FileInputStream("foo").use { stream ->
// reading something
val c = stream.read()
c
return c
}
} catch (e: IOException) {
System.out.println(e)
@@ -8,8 +8,8 @@ trait I {
public class C {
throws(javaClass<IOException>())
fun foo(): Int {
return FileInputStream("foo").use { stream ->
bar(object : I {
FileInputStream("foo").use { stream ->
return bar(object : I {
throws(javaClass<IOException>())
override fun doIt(stream: InputStream): Int {
return stream.available()