From 526348b207054487368ff71e92d9be81826efb0e Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Wed, 22 Apr 2015 18:54:54 +0300 Subject: [PATCH] Implement toTypedArray as non-intrinsic. Remove unused intrinsic method. --- .../kotlin/codegen/intrinsics/CopyToArray.kt | 39 ------------------- .../codegen/intrinsics/IntrinsicMethods.java | 1 - .../src/kotlin/collections/ArraysJVM.kt | 6 ++- 3 files changed, 4 insertions(+), 42 deletions(-) delete mode 100644 compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CopyToArray.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CopyToArray.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CopyToArray.kt deleted file mode 100644 index 177404382cb..00000000000 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CopyToArray.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.codegen.intrinsics - -import org.jetbrains.kotlin.codegen.Callable -import org.jetbrains.kotlin.codegen.ExpressionCodegen -import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall -import org.jetbrains.kotlin.resolve.jvm.AsmTypes.getType -import org.jetbrains.org.objectweb.asm.Type -import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter - -public class CopyToArray : IntrinsicMethod() { - - override fun toCallable(fd: FunctionDescriptor, isSuper: Boolean, resolvedCall: ResolvedCall<*>, codegen: ExpressionCodegen): Callable { - return object : IntrinsicCallable(getType(javaClass>()), listOf(), null, Type.getType(javaClass>())) { - override fun invokeIntrinsic(v: InstructionAdapter) { - v.dup() - v.invokeinterface("java/util/Collection", "size", "()I") - codegen.newArrayInstruction(resolvedCall.getResultingDescriptor().getReturnType()!!) - v.invokeinterface("java/util/Collection", "toArray", "([Ljava/lang/Object;)[Ljava/lang/Object;") - } - } - } -} \ No newline at end of file diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicMethods.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicMethods.java index 5517ae1f28d..e7bb3434e7a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicMethods.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicMethods.java @@ -68,7 +68,6 @@ public class IntrinsicMethods { namedMethods.put("kotlin.javaClass.function", new JavaClassFunction()); namedMethods.put("kotlin.javaClass.property", new JavaClassProperty()); namedMethods.put("kotlin.arrays.array", new JavaClassArray()); - namedMethods.put("kotlin.collections.copyToArray", new CopyToArray()); namedMethods.put("kotlin.jvm.internal.unsafe.monitorEnter", MonitorInstruction.MONITOR_ENTER); namedMethods.put("kotlin.jvm.internal.unsafe.monitorExit", MonitorInstruction.MONITOR_EXIT); diff --git a/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt b/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt index fa09c699a8b..f32a06ecc38 100644 --- a/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt +++ b/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt @@ -82,8 +82,10 @@ public fun ByteArray.toString(charset: Charset): String = String(this, charset) * Allocates an array of runtime type `T` having its size equal to the size of this collection * and populates the array with the elements of this collection. */ -[Intrinsic("kotlin.collections.copyToArray")] public fun Collection.toTypedArray(): Array = - throw UnsupportedOperationException() +public inline fun Collection.toTypedArray(): Array { + val thisCollection = this as java.util.Collection + return thisCollection.toArray(arrayOfNulls(thisCollection.size())) as Array +} /** Returns the array if it's not null, or an empty array otherwise. */ public inline fun Array?.orEmpty(): Array = this ?: arrayOf()