From 036f31f36b19820709292d2109d3f00cc1780db2 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 20 Apr 2015 19:55:59 +0300 Subject: [PATCH] j2k: Generate class literals in `throws` --- j2k/src/org/jetbrains/kotlin/j2k/Converter.kt | 2 +- j2k/src/org/jetbrains/kotlin/j2k/ast/Expressions.kt | 6 ++++++ .../function/extendsBaseWhichExtendsObject.kt | 8 ++++---- j2k/testData/fileOrElement/function/overrideObject.kt | 4 ++-- j2k/testData/fileOrElement/function/overrideObject2.kt | 2 +- j2k/testData/fileOrElement/function/throws.kt | 2 +- .../fileOrElement/methodCallExpression/vararg1.kt | 2 +- j2k/testData/fileOrElement/tryWithResource/Multiline.kt | 2 +- .../fileOrElement/tryWithResource/MultipleResources.kt | 2 +- j2k/testData/fileOrElement/tryWithResource/Simple.kt | 2 +- j2k/testData/fileOrElement/tryWithResource/WithFinally.kt | 2 +- .../tryWithResource/WithReturnInAnonymousClass.kt | 8 ++++---- .../tryWithResource/WithReturnInAnonymousClass2.kt | 8 ++++---- 13 files changed, 28 insertions(+), 22 deletions(-) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt index b59936413e4..87ee72d3cf7 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt @@ -566,7 +566,7 @@ class Converter private( if (types.isEmpty()) return Annotations.Empty val arguments = types.indices.map { index -> val convertedType = typeConverter.convertType(types[index], Nullability.NotNull) - null to deferredElement { MethodCallExpression.buildNotNull(null, "javaClass", listOf(), listOf(convertedType)).assignPrototype(refElements[index]) } + null to deferredElement { ClassLiteralExpression(convertedType.assignPrototype(refElements[index])) } } val annotation = Annotation(Identifier("throws").assignNoPrototype(), arguments, false, true) return Annotations(listOf(annotation.assignPrototype(throwsList))).assignPrototype(throwsList) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ast/Expressions.kt b/j2k/src/org/jetbrains/kotlin/j2k/ast/Expressions.kt index cc0ee51aa2f..8a05b39b6d1 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ast/Expressions.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ast/Expressions.kt @@ -164,6 +164,12 @@ class DownToExpression(val start: Expression, val end: Expression): Expression() } } +class ClassLiteralExpression(val type: Type): Expression() { + override fun generateCode(builder: CodeBuilder) { + builder.append(type).append("::class") + } +} + fun createArrayInitializerExpression(arrayType: ArrayType, initializers: List, needExplicitType: Boolean = true) : MethodCallExpression { val elementType = arrayType.elementType val createArrayFunction = if (elementType is PrimitiveType) diff --git a/j2k/testData/fileOrElement/function/extendsBaseWhichExtendsObject.kt b/j2k/testData/fileOrElement/function/extendsBaseWhichExtendsObject.kt index f888cbe0559..a42b7dcc098 100644 --- a/j2k/testData/fileOrElement/function/extendsBaseWhichExtendsObject.kt +++ b/j2k/testData/fileOrElement/function/extendsBaseWhichExtendsObject.kt @@ -11,7 +11,7 @@ class Test : Base() { return super.equals(o) } - throws(javaClass()) + throws(CloneNotSupportedException::class) override fun clone(): Any { return super.clone() } @@ -20,7 +20,7 @@ class Test : Base() { return super.toString() } - throws(javaClass()) + throws(Throwable::class) override fun finalize() { super.finalize() } @@ -35,7 +35,7 @@ open class Base { return super.equals(o) } - throws(javaClass()) + throws(CloneNotSupportedException::class) protected open fun clone(): Any { return super.clone() } @@ -44,7 +44,7 @@ open class Base { return super.toString() } - throws(javaClass()) + throws(Throwable::class) protected open fun finalize() { super.finalize() } diff --git a/j2k/testData/fileOrElement/function/overrideObject.kt b/j2k/testData/fileOrElement/function/overrideObject.kt index af1740aa3ad..9df6feca9d6 100644 --- a/j2k/testData/fileOrElement/function/overrideObject.kt +++ b/j2k/testData/fileOrElement/function/overrideObject.kt @@ -12,14 +12,14 @@ class X { return super.toString() } - throws(javaClass()) + throws(CloneNotSupportedException::class) protected fun clone(): Any { return super.clone() } } class Y : Thread() { - throws(javaClass()) + throws(CloneNotSupportedException::class) override fun clone(): Any { return super.clone() } diff --git a/j2k/testData/fileOrElement/function/overrideObject2.kt b/j2k/testData/fileOrElement/function/overrideObject2.kt index 528fdcc1e00..4fdcd98b828 100644 --- a/j2k/testData/fileOrElement/function/overrideObject2.kt +++ b/j2k/testData/fileOrElement/function/overrideObject2.kt @@ -14,7 +14,7 @@ class X : Base() { return super.toString() } - throws(javaClass()) + throws(CloneNotSupportedException::class) protected fun clone(): Any { return super.clone() } diff --git a/j2k/testData/fileOrElement/function/throws.kt b/j2k/testData/fileOrElement/function/throws.kt index adc20745905..a2a2581a118 100644 --- a/j2k/testData/fileOrElement/function/throws.kt +++ b/j2k/testData/fileOrElement/function/throws.kt @@ -1,2 +1,2 @@ -throws(javaClass(), javaClass()) +throws(IOException::class, SerializationException::class) fun foo() \ No newline at end of file diff --git a/j2k/testData/fileOrElement/methodCallExpression/vararg1.kt b/j2k/testData/fileOrElement/methodCallExpression/vararg1.kt index 47f2a7d183e..f75eb8d55aa 100644 --- a/j2k/testData/fileOrElement/methodCallExpression/vararg1.kt +++ b/j2k/testData/fileOrElement/methodCallExpression/vararg1.kt @@ -1,7 +1,7 @@ import java.lang.reflect.Constructor object X { - throws(javaClass()) + throws(Exception::class) fun foo(constructor: Constructor, args1: Array, args2: Array) { constructor.newInstance(*args1) constructor.newInstance(args1, args2) diff --git a/j2k/testData/fileOrElement/tryWithResource/Multiline.kt b/j2k/testData/fileOrElement/tryWithResource/Multiline.kt index 99a0b66836c..16670e22530 100644 --- a/j2k/testData/fileOrElement/tryWithResource/Multiline.kt +++ b/j2k/testData/fileOrElement/tryWithResource/Multiline.kt @@ -1,7 +1,7 @@ import java.io.* public class C { - throws(javaClass()) + throws(IOException::class) fun foo() { ByteArrayInputStream(ByteArray(10)).use { stream -> // reading something diff --git a/j2k/testData/fileOrElement/tryWithResource/MultipleResources.kt b/j2k/testData/fileOrElement/tryWithResource/MultipleResources.kt index 100afd76710..749e8e2a3b1 100644 --- a/j2k/testData/fileOrElement/tryWithResource/MultipleResources.kt +++ b/j2k/testData/fileOrElement/tryWithResource/MultipleResources.kt @@ -1,7 +1,7 @@ import java.io.* public class C { - throws(javaClass()) + throws(IOException::class) fun foo() { ByteArrayInputStream(ByteArray(10)).use { input -> ByteArrayOutputStream().use { output -> diff --git a/j2k/testData/fileOrElement/tryWithResource/Simple.kt b/j2k/testData/fileOrElement/tryWithResource/Simple.kt index 0cfac5c1428..f1c589909e4 100644 --- a/j2k/testData/fileOrElement/tryWithResource/Simple.kt +++ b/j2k/testData/fileOrElement/tryWithResource/Simple.kt @@ -1,7 +1,7 @@ import java.io.* public class C { - throws(javaClass()) + throws(IOException::class) fun foo() { ByteArrayInputStream(ByteArray(10)).use { stream -> println(stream.read()) } } diff --git a/j2k/testData/fileOrElement/tryWithResource/WithFinally.kt b/j2k/testData/fileOrElement/tryWithResource/WithFinally.kt index e9384976efc..ab6962441b8 100644 --- a/j2k/testData/fileOrElement/tryWithResource/WithFinally.kt +++ b/j2k/testData/fileOrElement/tryWithResource/WithFinally.kt @@ -1,7 +1,7 @@ import java.io.* public class C { - throws(javaClass()) + throws(IOException::class) fun foo() { try { ByteArrayInputStream(ByteArray(10)).use { stream -> diff --git a/j2k/testData/fileOrElement/tryWithResource/WithReturnInAnonymousClass.kt b/j2k/testData/fileOrElement/tryWithResource/WithReturnInAnonymousClass.kt index 95a3b169ab5..3705ca42f53 100644 --- a/j2k/testData/fileOrElement/tryWithResource/WithReturnInAnonymousClass.kt +++ b/j2k/testData/fileOrElement/tryWithResource/WithReturnInAnonymousClass.kt @@ -1,16 +1,16 @@ import java.io.* trait I { - throws(javaClass()) + throws(IOException::class) public fun doIt(stream: InputStream): Int } public class C { - throws(javaClass()) + throws(IOException::class) fun foo() { ByteArrayInputStream(ByteArray(10)).use { stream -> bar(object : I { - throws(javaClass()) + throws(IOException::class) override fun doIt(stream: InputStream): Int { return stream.available() } @@ -18,7 +18,7 @@ public class C { } } - throws(javaClass()) + throws(IOException::class) fun bar(i: I, stream: InputStream): Int { return i.doIt(stream) } diff --git a/j2k/testData/fileOrElement/tryWithResource/WithReturnInAnonymousClass2.kt b/j2k/testData/fileOrElement/tryWithResource/WithReturnInAnonymousClass2.kt index a41076a7eea..4b7b5b936ac 100644 --- a/j2k/testData/fileOrElement/tryWithResource/WithReturnInAnonymousClass2.kt +++ b/j2k/testData/fileOrElement/tryWithResource/WithReturnInAnonymousClass2.kt @@ -1,16 +1,16 @@ import java.io.* trait I { - throws(javaClass()) + throws(IOException::class) public fun doIt(stream: InputStream): Int } public class C { - throws(javaClass()) + throws(IOException::class) fun foo(): Int { ByteArrayInputStream(ByteArray(10)).use { stream -> return bar(object : I { - throws(javaClass()) + throws(IOException::class) override fun doIt(stream: InputStream): Int { return stream.available() } @@ -18,7 +18,7 @@ public class C { } } - throws(javaClass()) + throws(IOException::class) fun bar(i: I, stream: InputStream): Int { return i.doIt(stream) }