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 527e9bdf10d..1dd031955fa 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicMethods.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicMethods.java @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.codegen.intrinsics; import com.google.common.collect.ImmutableList; +import kotlin.StringsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; @@ -26,6 +27,7 @@ import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.resolve.CompileTimeConstantUtils; import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType; import org.jetbrains.kotlin.types.expressions.OperatorConventions; +import org.jetbrains.kotlin.util.capitalizeDecapitalize.CapitalizeDecapitalizeKt; import java.util.HashMap; import java.util.Map; @@ -63,11 +65,12 @@ public class IntrinsicMethods { namedMethods.put("kotlin.javaClass.function", new JavaClassFunction()); namedMethods.put("kotlin.javaClass.property", new JavaClassProperty()); namedMethods.put("kotlin.KClass.java.property", new KClassJavaProperty()); - namedMethods.put("kotlin.arrays.array", new JavaClassArray()); namedMethods.put("kotlin.jvm.internal.unsafe.monitorEnter", MonitorInstruction.MONITOR_ENTER); namedMethods.put("kotlin.jvm.internal.unsafe.monitorExit", MonitorInstruction.MONITOR_EXIT); namedMethods.put("kotlin.jvm.isArrayOf", new IsArrayOf()); + intrinsicsMap.registerIntrinsic(BUILT_INS_PACKAGE_FQ_NAME, null, "arrayOf", 1, new JavaClassArray()); + ImmutableList primitiveCastMethods = OperatorConventions.NUMBER_CONVERSIONS.asList(); for (Name method : primitiveCastMethods) { String methodName = method.asString(); @@ -94,6 +97,10 @@ public class IntrinsicMethods { declareIntrinsicFunction(typeName, "equals", 1, EQUALS); declareIntrinsicFunction(typeName, "hashCode", 0, HASH_CODE); declareIntrinsicFunction(typeName, "toString", 0, TO_STRING); + + intrinsicsMap.registerIntrinsic( + BUILT_INS_PACKAGE_FQ_NAME, null, StringsKt.decapitalize(type.getArrayTypeName().asString()) + "Of", 1, new JavaClassArray() + ); } declareBinaryOp("plus", IADD); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt index e904ca7858b..6d3d0521bb5 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt @@ -28,7 +28,6 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DeclarationChecker import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.resolve.annotations.hasIntrinsicAnnotation import org.jetbrains.kotlin.resolve.annotations.hasJvmStaticAnnotation import org.jetbrains.kotlin.resolve.inline.InlineUtil import org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmOverloadsAnnotation @@ -215,8 +214,6 @@ public class ReifiedTypeParameterAnnotationChecker : DeclarationChecker { diagnosticHolder: DiagnosticSink, bindingContext: BindingContext ) { - if (descriptor.hasIntrinsicAnnotation()) return - if (descriptor is CallableDescriptor && !InlineUtil.isInline(descriptor)) { checkTypeParameterDescriptorsAreNotReified(descriptor.getTypeParameters(), diagnosticHolder) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt index 950e93fb5a9..42279c67e72 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt @@ -35,10 +35,6 @@ public fun DeclarationDescriptor.hasJvmSyntheticAnnotation(): Boolean { Annotations.findUseSiteTargetedAnnotation(annotations, AnnotationUseSiteTarget.FIELD, jvmSyntheticName) != null } -public fun DeclarationDescriptor.hasIntrinsicAnnotation(): Boolean { - return getAnnotations().findAnnotation(FqName("kotlin.jvm.internal.Intrinsic")) != null -} - public fun CallableDescriptor.isPlatformStaticInObjectOrClass(): Boolean = isPlatformStaticIn { DescriptorUtils.isNonCompanionObject(it) || DescriptorUtils.isClass(it) || DescriptorUtils.isEnumClass(it) } diff --git a/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt b/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt index 82813ea74d7..4c0e77735ff 100644 --- a/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt +++ b/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt @@ -5,54 +5,53 @@ package kotlin import java.io.ByteArrayInputStream import java.nio.charset.Charset -import kotlin.jvm.internal.Intrinsic // Array "constructor" /** * Returns an array containing the specified elements. */ -@Intrinsic("kotlin.arrays.array") public fun arrayOf(vararg elements: T) : Array = elements as Array +public inline fun arrayOf(vararg elements: T) : Array = elements as Array // "constructors" for primitive types array /** * Returns an array containing the specified [Double] numbers. */ -@Intrinsic("kotlin.arrays.array") public fun doubleArrayOf(vararg elements: Double) : DoubleArray = elements +public fun doubleArrayOf(vararg elements: Double) : DoubleArray = elements /** * Returns an array containing the specified [Float] numbers. */ -@Intrinsic("kotlin.arrays.array") public fun floatArrayOf(vararg elements: Float) : FloatArray = elements +public fun floatArrayOf(vararg elements: Float) : FloatArray = elements /** * Returns an array containing the specified [Long] numbers. */ -@Intrinsic("kotlin.arrays.array") public fun longArrayOf(vararg elements: Long) : LongArray = elements +public fun longArrayOf(vararg elements: Long) : LongArray = elements /** * Returns an array containing the specified [Int] numbers. */ -@Intrinsic("kotlin.arrays.array") public fun intArrayOf(vararg elements: Int) : IntArray = elements +public fun intArrayOf(vararg elements: Int) : IntArray = elements /** * Returns an array containing the specified characters. */ -@Intrinsic("kotlin.arrays.array") public fun charArrayOf(vararg elements: Char) : CharArray = elements +public fun charArrayOf(vararg elements: Char) : CharArray = elements /** * Returns an array containing the specified [Short] numbers. */ -@Intrinsic("kotlin.arrays.array") public fun shortArrayOf(vararg elements: Short) : ShortArray = elements +public fun shortArrayOf(vararg elements: Short) : ShortArray = elements /** * Returns an array containing the specified [Byte] numbers. */ -@Intrinsic("kotlin.arrays.array") public fun byteArrayOf(vararg elements: Byte) : ByteArray = elements +public fun byteArrayOf(vararg elements: Byte) : ByteArray = elements /** * Returns an array containing the specified boolean values. */ -@Intrinsic("kotlin.arrays.array") public fun booleanArrayOf(vararg elements: Boolean) : BooleanArray = elements +public fun booleanArrayOf(vararg elements: Boolean) : BooleanArray = elements /** * Converts the contents of this byte array to a string using the specified [charset]. diff --git a/libraries/stdlib/src/kotlin/jvm/IsArrayOf.kt b/libraries/stdlib/src/kotlin/jvm/IsArrayOf.kt index f64f7ecd7f1..21cad54cae9 100644 --- a/libraries/stdlib/src/kotlin/jvm/IsArrayOf.kt +++ b/libraries/stdlib/src/kotlin/jvm/IsArrayOf.kt @@ -22,5 +22,6 @@ import kotlin.jvm.internal.Intrinsic * Checks if array can contain element of type [T]. */ @Intrinsic("kotlin.jvm.isArrayOf") +@Suppress("REIFIED_TYPE_PARAMETER_NO_INLINE") public fun Array<*>.isArrayOf(): Boolean = - T::class.java.isAssignableFrom(this.javaClass.componentType) \ No newline at end of file + T::class.java.isAssignableFrom(this.javaClass.componentType) diff --git a/libraries/stdlib/src/kotlin/util/JLangJVM.kt b/libraries/stdlib/src/kotlin/util/JLangJVM.kt index 66c2a478732..66f0c7e4202 100644 --- a/libraries/stdlib/src/kotlin/util/JLangJVM.kt +++ b/libraries/stdlib/src/kotlin/util/JLangJVM.kt @@ -39,6 +39,7 @@ public val T.javaClass : Class * Returns the Java class for the specified type. */ @Intrinsic("kotlin.javaClass.function") +@Suppress("REIFIED_TYPE_PARAMETER_NO_INLINE") @Deprecated("Use the class reference and .java extension property instead: MyClass::class.java", ReplaceWith("T::class.java")) public fun javaClass(): Class = T::class.java