From 00873b6e8c994c7ad945d0048018edfd75b93ca1 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 29 Nov 2012 16:15:19 +0400 Subject: [PATCH] Reverted loading arrays from java with 'out' projection kind as return value. #KT-3065 --- .../resolve/java/JavaTypeTransformer.java | 2 +- .../tests/jdk-annotations/ArrayListToArray.kt | 2 +- .../testData/loadJava/ArrayTypeVariance.kt | 2 +- .../testData/loadJava/ArrayTypeVariance.txt | 2 +- .../testData/loadJava/FieldOfArrayType.kt | 2 +- .../testData/loadJava/FieldOfArrayType.txt | 2 +- .../kotlinSignature/PropertyArrayTypes.java | 6 ++--- .../kotlinSignature/PropertyArrayTypes.kt | 6 ++--- .../kotlinSignature/PropertyArrayTypes.txt | 6 ++--- .../modality/ModalityOfFakeOverrides.txt | 4 +-- .../AnnotationJavaDescriptorResolverTest.java | 8 +++--- jdk-annotations/java/io/annotations.xml | 12 ++++----- jdk-annotations/java/lang/annotations.xml | 24 ++++++++--------- .../java/lang/reflect/annotations.xml | 8 +++++- jdk-annotations/java/math/annotations.xml | 2 +- jdk-annotations/java/util/annotations.xml | 26 +++++++++---------- .../java/util/regex/annotations.xml | 4 +-- libraries/stdlib/src/kotlin/StringsJVM.kt | 6 ++--- libraries/stdlib/src/kotlin/io/Files.kt | 2 +- libraries/stdlib/test/StringUtilTest.kt | 2 +- .../kotlin/tools/GenerateJavaScriptStubs.kt | 5 ++-- 21 files changed, 69 insertions(+), 64 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java index 47861362c65..b171272a12f 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java @@ -210,7 +210,7 @@ public class JavaTypeTransformer { } Variance variance; - if (!(arrayType instanceof PsiEllipsisType)) { + if (howThisTypeIsUsed == MEMBER_SIGNATURE_CONTRAVARIANT && !(arrayType instanceof PsiEllipsisType)) { variance = Variance.OUT_VARIANCE; } else { diff --git a/compiler/testData/diagnostics/tests/jdk-annotations/ArrayListToArray.kt b/compiler/testData/diagnostics/tests/jdk-annotations/ArrayListToArray.kt index d12dc59e415..d1e7a54987c 100644 --- a/compiler/testData/diagnostics/tests/jdk-annotations/ArrayListToArray.kt +++ b/compiler/testData/diagnostics/tests/jdk-annotations/ArrayListToArray.kt @@ -6,5 +6,5 @@ fun main(args : Array) { val al : ArrayList = ArrayList() // A type mismatch on this line means that jdk-annotations were not loaded - al.toArray(Array(3, {1})) : Array + al.toArray(Array(3, {1})) : Array } diff --git a/compiler/testData/loadJava/ArrayTypeVariance.kt b/compiler/testData/loadJava/ArrayTypeVariance.kt index b887eb0da40..7883a32e19b 100644 --- a/compiler/testData/loadJava/ArrayTypeVariance.kt +++ b/compiler/testData/loadJava/ArrayTypeVariance.kt @@ -1,7 +1,7 @@ package test public class ArrayTypeVariance : java.lang.Object() { - public fun toArray(p0: Array?): Array? { + public fun toArray(p0: Array?): Array? { throw UnsupportedOperationException() } } diff --git a/compiler/testData/loadJava/ArrayTypeVariance.txt b/compiler/testData/loadJava/ArrayTypeVariance.txt index 5837a9355e2..5ff82f8222c 100644 --- a/compiler/testData/loadJava/ArrayTypeVariance.txt +++ b/compiler/testData/loadJava/ArrayTypeVariance.txt @@ -2,5 +2,5 @@ namespace test public final class test.ArrayTypeVariance : java.lang.Object { public final /*constructor*/ fun (): test.ArrayTypeVariance - public final fun toArray(/*0*/ p0: jet.Array?): jet.Array? + public final fun toArray(/*0*/ p0: jet.Array?): jet.Array? } diff --git a/compiler/testData/loadJava/FieldOfArrayType.kt b/compiler/testData/loadJava/FieldOfArrayType.kt index 42a4a936eca..128ae0d364c 100644 --- a/compiler/testData/loadJava/FieldOfArrayType.kt +++ b/compiler/testData/loadJava/FieldOfArrayType.kt @@ -1,5 +1,5 @@ package test public open class FieldOfArrayType() : java.lang.Object() { - public var files: Array? = null + public var files: Array? = null } diff --git a/compiler/testData/loadJava/FieldOfArrayType.txt b/compiler/testData/loadJava/FieldOfArrayType.txt index 284307ab5f9..f654bb68067 100644 --- a/compiler/testData/loadJava/FieldOfArrayType.txt +++ b/compiler/testData/loadJava/FieldOfArrayType.txt @@ -2,5 +2,5 @@ namespace test public open class test.FieldOfArrayType : java.lang.Object { public final /*constructor*/ fun (): test.FieldOfArrayType - public final var files: jet.Array? + public final var files: jet.Array? } diff --git a/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.java b/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.java index c02363ca249..2445fc60f4a 100644 --- a/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.java +++ b/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.java @@ -6,12 +6,12 @@ import java.util.ArrayList; import jet.runtime.typeinfo.KotlinSignature; public class PropertyArrayTypes { - @KotlinSignature("var arrayOfArrays : Array>") + @KotlinSignature("var arrayOfArrays : Array>") public String[][] arrayOfArrays; - @KotlinSignature("var array : Array") + @KotlinSignature("var array : Array") public String[] array; - @KotlinSignature("var genericArray : Array") + @KotlinSignature("var genericArray : Array") public T[] genericArray; } diff --git a/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.kt b/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.kt index f6694050890..ee6898c1ca3 100644 --- a/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.kt +++ b/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.kt @@ -3,7 +3,7 @@ package test import java.util.* public open class PropertyArrayTypes() : java.lang.Object() { - public var arrayOfArrays : Array> = null!! - public var array : Array = null!! - public var genericArray : Array = null!! + public var arrayOfArrays : Array> = null!! + public var array : Array = null!! + public var genericArray : Array = null!! } diff --git a/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.txt b/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.txt index f691e5e355b..916091ed0b5 100644 --- a/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.txt +++ b/compiler/testData/loadJava/kotlinSignature/PropertyArrayTypes.txt @@ -2,7 +2,7 @@ namespace test public open class test.PropertyArrayTypes : java.lang.Object { public final /*constructor*/ fun (): test.PropertyArrayTypes - public final var array: jet.Array - public final var arrayOfArrays: jet.Array> - public final var genericArray: jet.Array + public final var array: jet.Array + public final var arrayOfArrays: jet.Array> + public final var genericArray: jet.Array } diff --git a/compiler/testData/loadJava/modality/ModalityOfFakeOverrides.txt b/compiler/testData/loadJava/modality/ModalityOfFakeOverrides.txt index 4a777958df5..0f79be88c2f 100644 --- a/compiler/testData/loadJava/modality/ModalityOfFakeOverrides.txt +++ b/compiler/testData/loadJava/modality/ModalityOfFakeOverrides.txt @@ -25,6 +25,6 @@ public open class test.ModalityOfFakeOverrides : java.util.AbstractList - public open override /*1*/ /*fake_override*/ fun toArray(): jet.Array - public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: jet.Array): jet.Array + public open override /*1*/ /*fake_override*/ fun toArray(): jet.Array + public open override /*1*/ /*fake_override*/ fun toArray(/*0*/ p0: jet.Array): jet.Array } diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/AnnotationJavaDescriptorResolverTest.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/AnnotationJavaDescriptorResolverTest.java index b967cb5020d..49c124105b6 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/AnnotationJavaDescriptorResolverTest.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/AnnotationJavaDescriptorResolverTest.java @@ -107,7 +107,7 @@ public class AnnotationJavaDescriptorResolverTest extends AbstractJavaResolverDe actualCompileTimeConstant = getCompileTimeConstant(annotation2, annotationTypeName2, "value"); assert actualCompileTimeConstant instanceof AnnotationValue; checkAnnotationCompileTimeConstant((AnnotationValue) actualCompileTimeConstant, "value", - DEFAULT_PACKAGE + ".MyAnnotation2", "jet.Array?", "[\"test\", \"test2\"]"); + DEFAULT_PACKAGE + ".MyAnnotation2", "jet.Array?", "[\"test\", \"test2\"]"); String annotationTypeName3 = DEFAULT_PACKAGE + ".MyAnnotationWithParam3"; AnnotationDescriptor annotation3 = getAnnotationInClassByType("C", annotationTypeName3); @@ -163,7 +163,7 @@ public class AnnotationJavaDescriptorResolverTest extends AbstractJavaResolverDe CompileTimeConstant actualCompileTimeConstant = getCompileTimeConstant(annotation, annotationTypeName, "value"); assert actualCompileTimeConstant instanceof ArrayValue; - checkArrayCompileTimeConstant((ArrayValue) actualCompileTimeConstant, "jet.Array?", + checkArrayCompileTimeConstant((ArrayValue) actualCompileTimeConstant, "jet.Array?", "java.lang.annotation.ElementType", values); } @@ -176,7 +176,7 @@ public class AnnotationJavaDescriptorResolverTest extends AbstractJavaResolverDe CompileTimeConstant actualCompileTimeConstant = getCompileTimeConstant(annotation, annotationTypeName, "value"); assert actualCompileTimeConstant instanceof ArrayValue; - checkArrayCompileTimeConstant((ArrayValue) actualCompileTimeConstant, "jet.Array?", "jet.String", values); + checkArrayCompileTimeConstant((ArrayValue) actualCompileTimeConstant, "jet.Array?", "jet.String", values); } public void testAnnotationWithEmptyArrayInParam() throws IOException { @@ -189,7 +189,7 @@ public class AnnotationJavaDescriptorResolverTest extends AbstractJavaResolverDe CompileTimeConstant actualCompileTimeConstant = getCompileTimeConstant(annotation, annotationTypeName, "value"); assert actualCompileTimeConstant instanceof ArrayValue; - checkArrayCompileTimeConstant((ArrayValue) actualCompileTimeConstant, "jet.Array?", "jet.String", values); + checkArrayCompileTimeConstant((ArrayValue) actualCompileTimeConstant, "jet.Array?", "jet.String", values); } private static void compareJetTypeWithClass(@NotNull JetType actualType, @NotNull String expectedType) { diff --git a/jdk-annotations/java/io/annotations.xml b/jdk-annotations/java/io/annotations.xml index f9bc2b15f3d..bc21bc51a7e 100644 --- a/jdk-annotations/java/io/annotations.xml +++ b/jdk-annotations/java/io/annotations.xml @@ -57,7 +57,7 @@ - + @@ -66,22 +66,22 @@ - + - + - + - + @@ -89,7 +89,7 @@ - + diff --git a/jdk-annotations/java/lang/annotations.xml b/jdk-annotations/java/lang/annotations.xml index 9139a4f63b6..497c1a6cff7 100644 --- a/jdk-annotations/java/lang/annotations.xml +++ b/jdk-annotations/java/lang/annotations.xml @@ -428,7 +428,7 @@ - + @@ -637,7 +637,7 @@ - + @@ -649,7 +649,7 @@ - + @@ -823,24 +823,24 @@ - + - + - + - + @@ -863,26 +863,26 @@ - + - + - + + val=""fun getDeclaredConstructors() : Array<Constructor<out Any?>>""/> @@ -920,7 +920,7 @@ - + diff --git a/jdk-annotations/java/lang/reflect/annotations.xml b/jdk-annotations/java/lang/reflect/annotations.xml index 31a21ec72ea..4f58f18c633 100644 --- a/jdk-annotations/java/lang/reflect/annotations.xml +++ b/jdk-annotations/java/lang/reflect/annotations.xml @@ -1,4 +1,10 @@ + + + + + @@ -153,7 +159,7 @@ - + \ No newline at end of file diff --git a/jdk-annotations/java/math/annotations.xml b/jdk-annotations/java/math/annotations.xml index f5ff7727123..f29fcd4483c 100644 --- a/jdk-annotations/java/math/annotations.xml +++ b/jdk-annotations/java/math/annotations.xml @@ -180,7 +180,7 @@ + val=""fun divideAndRemainder(val value: BigInteger) : Array<BigInteger>""/> diff --git a/jdk-annotations/java/util/annotations.xml b/jdk-annotations/java/util/annotations.xml index 0819faacc51..0816a32dda9 100644 --- a/jdk-annotations/java/util/annotations.xml +++ b/jdk-annotations/java/util/annotations.xml @@ -81,12 +81,12 @@ - + - + @@ -169,7 +169,7 @@ - + @@ -219,7 +219,7 @@ - + @@ -304,7 +304,7 @@ - + @@ -339,12 +339,12 @@ - + - + @@ -554,12 +554,12 @@ - + - + @@ -1102,7 +1102,7 @@ + val=""fun <T, U> copyOf(original : Array<out U>, newLength : Int, newType : Class<out Array<T>>) : Array<T>""/> @@ -1157,7 +1157,7 @@ + val=""fun <T> copyOfRange(original : Array<out T>, from : Int, to : Int) : Array<T>""/> @@ -1167,7 +1167,7 @@ + val=""fun <T, U> copyOfRange(original : Array<out U>, from : Int, to : Int, newType : Class<out Array<T>>) : Array<T>""/> @@ -1227,7 +1227,7 @@ + val=""fun <T> copyOf(original : Array<out T>, newLength : Int) : Array<T?>""/> diff --git a/jdk-annotations/java/util/regex/annotations.xml b/jdk-annotations/java/util/regex/annotations.xml index a810679253f..94dd551de85 100644 --- a/jdk-annotations/java/util/regex/annotations.xml +++ b/jdk-annotations/java/util/regex/annotations.xml @@ -36,7 +36,7 @@ - + @@ -44,7 +44,7 @@ - + diff --git a/libraries/stdlib/src/kotlin/StringsJVM.kt b/libraries/stdlib/src/kotlin/StringsJVM.kt index 6460bfb4277..8a70697e7c9 100644 --- a/libraries/stdlib/src/kotlin/StringsJVM.kt +++ b/libraries/stdlib/src/kotlin/StringsJVM.kt @@ -34,9 +34,9 @@ public inline fun String.toCharList(): List = toCharArray().toList() public inline fun String.format(format : String, vararg args : Any?) : String = java.lang.String.format(format, args) -public inline fun String.split(regex : String) : Array = (this as java.lang.String).split(regex) +public inline fun String.split(regex : String) : Array = (this as java.lang.String).split(regex) -public inline fun String.split(ch : Char) : Array = (this as java.lang.String).split(java.util.regex.Pattern.quote(ch.toString())) +public inline fun String.split(ch : Char) : Array = (this as java.lang.String).split(java.util.regex.Pattern.quote(ch.toString())) public inline fun String.substring(beginIndex : Int) : String = (this as java.lang.String).substring(beginIndex) @@ -78,7 +78,7 @@ public inline fun String.replaceFirst(regex : String, replacement : String) : St public inline fun String.charAt(index : Int) : Char = (this as java.lang.String).charAt(index) -public inline fun String.split(regex : String, limit : Int) : Array = (this as java.lang.String).split(regex, limit) +public inline fun String.split(regex : String, limit : Int) : Array = (this as java.lang.String).split(regex, limit) public inline fun String.codePointAt(index : Int) : Int = (this as java.lang.String).codePointAt(index) diff --git a/libraries/stdlib/src/kotlin/io/Files.kt b/libraries/stdlib/src/kotlin/io/Files.kt index a53176bdd5d..890f2ce6e23 100644 --- a/libraries/stdlib/src/kotlin/io/Files.kt +++ b/libraries/stdlib/src/kotlin/io/Files.kt @@ -201,7 +201,7 @@ fun File.readLines(charset : String = "UTF-8") : List { /** * Returns an array of files and directories in the directory that satisfy the specified filter. */ -fun File.listFiles(filter : (file : File) -> Boolean) : Array? = listFiles( +fun File.listFiles(filter : (file : File) -> Boolean) : Array? = listFiles( object : FileFilter { override fun accept(file: File) = filter(file) } diff --git a/libraries/stdlib/test/StringUtilTest.kt b/libraries/stdlib/test/StringUtilTest.kt index 6e3c09accd8..8e997b3645e 100644 --- a/libraries/stdlib/test/StringUtilTest.kt +++ b/libraries/stdlib/test/StringUtilTest.kt @@ -10,7 +10,7 @@ class StringUtilTest() : TestCase() { fun testToRegex() { val re = """foo""".toRegex() - val list = (re.split("hellofoobar") as Array).toList() + val list = re.split("hellofoobar").toList() assertEquals(arrayList("hello", "bar"), list) } } diff --git a/libraries/stdlib/test/org/jetbrains/kotlin/tools/GenerateJavaScriptStubs.kt b/libraries/stdlib/test/org/jetbrains/kotlin/tools/GenerateJavaScriptStubs.kt index 4caff7187ca..1ca0d7e5b37 100644 --- a/libraries/stdlib/test/org/jetbrains/kotlin/tools/GenerateJavaScriptStubs.kt +++ b/libraries/stdlib/test/org/jetbrains/kotlin/tools/GenerateJavaScriptStubs.kt @@ -9,7 +9,6 @@ import java.util.ArrayList import java.util.TreeMap import org.w3c.dom.* import org.w3c.dom.events.* -import java.lang.reflect.* /** * This tool generates JavaScript stubs for classes available in the JDK which are already available in the browser environment @@ -140,7 +139,7 @@ import js.noImpl } } for (method in validMethods) { - val parameterTypes = method.getParameterTypes()!! as jet.Array?> + val parameterTypes = method.getParameterTypes()!! // TODO in java 7 its not easy with reflection to get the parameter argument name... var counter = 0 @@ -149,7 +148,7 @@ import js.noImpl println(" public fun ${method.getName()}($parameters): $returnType = js.noImpl") } } - val fields = klass.getDeclaredFields() as jet.Array + val fields = klass.getDeclaredFields() if (fields != null) { if (fields.notEmpty()) { println("")