From fca7a8c4a2d17495f985d2421ca32e70aea8f5b2 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 24 Feb 2015 15:11:52 +0300 Subject: [PATCH] Drop PrimitiveTypesUtil, store desc in JvmPrimitiveType --- .../org/jetbrains/kotlin/codegen/AsmUtil.java | 3 +- .../codegen/intrinsics/ArrayIterator.java | 3 +- .../jvm/types/KotlinToJavaTypesMap.java | 13 +++--- .../resolve/jvm/types/PrimitiveTypesUtil.java | 42 ------------------- .../kotlin/resolve/jvm/JvmPrimitiveType.java | 27 +++++++----- 5 files changed, 24 insertions(+), 64 deletions(-) delete mode 100644 compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/PrimitiveTypesUtil.java diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index fc6ef94e8ff..7589c24db32 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -62,7 +62,6 @@ import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.ABI_VERSION_FIEL import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass; import static org.jetbrains.kotlin.resolve.DescriptorUtils.*; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*; -import static org.jetbrains.kotlin.resolve.jvm.types.PrimitiveTypesUtil.asmTypeForPrimitive; import static org.jetbrains.kotlin.types.TypeUtils.isNullableType; import static org.jetbrains.org.objectweb.asm.Opcodes.*; @@ -109,7 +108,7 @@ public class AsmUtil { ImmutableMap.Builder typeBySortBuilder = ImmutableMap.builder(); ImmutableMap.Builder typeByWrapperBuilder = ImmutableMap.builder(); for (JvmPrimitiveType primitiveType : JvmPrimitiveType.values()) { - Type asmType = asmTypeForPrimitive(primitiveType); + Type asmType = Type.getType(primitiveType.getDesc()); typeBySortBuilder.put(asmType.getSort(), primitiveType); typeByWrapperBuilder.put(asmTypeByFqNameWithoutInnerClasses(primitiveType.getWrapperFqName()), asmType); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/ArrayIterator.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/ArrayIterator.java index 0c62e3578f7..ee90225087a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/ArrayIterator.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/ArrayIterator.java @@ -39,7 +39,6 @@ import java.util.List; import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME; import static org.jetbrains.kotlin.codegen.AsmUtil.asmDescByFqNameWithoutInnerClasses; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.getType; -import static org.jetbrains.kotlin.resolve.jvm.types.PrimitiveTypesUtil.asmTypeForPrimitive; public class ArrayIterator extends IntrinsicMethod { @NotNull @@ -69,7 +68,7 @@ public class ArrayIterator extends IntrinsicMethod { if (containingDeclaration.equals(arrayClass)) { FqName fqName = new FqName(BUILT_INS_PACKAGE_FQ_NAME + "." + primitiveType.getTypeName() + "Iterator"); String iteratorDesc = asmDescByFqNameWithoutInnerClasses(fqName); - String methodSignature = "([" + asmTypeForPrimitive(jvmPrimitiveType) + ")" + iteratorDesc; + String methodSignature = "([" + jvmPrimitiveType.getDesc() + ")" + iteratorDesc; v.invokestatic("kotlin/jvm/internal/InternalPackage", "iterator", methodSignature, false); return Type.getType(iteratorDesc); } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/KotlinToJavaTypesMap.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/KotlinToJavaTypesMap.java index f4e7ba2088d..72abab1ebdc 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/KotlinToJavaTypesMap.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/KotlinToJavaTypesMap.java @@ -32,8 +32,6 @@ import org.jetbrains.org.objectweb.asm.Type; import java.util.HashMap; import java.util.Map; -import static org.jetbrains.kotlin.resolve.jvm.types.PrimitiveTypesUtil.asmTypeForPrimitive; - public class KotlinToJavaTypesMap extends JavaToKotlinClassMapBuilder { private static KotlinToJavaTypesMap instance = null; @@ -56,18 +54,17 @@ public class KotlinToJavaTypesMap extends JavaToKotlinClassMapBuilder { private void initPrimitives() { FqName builtInsFqName = KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME; - for (JvmPrimitiveType jvmPrimitiveType : JvmPrimitiveType.values()) { - PrimitiveType primitiveType = jvmPrimitiveType.getPrimitiveType(); - Type asmType = asmTypeForPrimitive(jvmPrimitiveType); + for (JvmPrimitiveType type : JvmPrimitiveType.values()) { + PrimitiveType primitiveType = type.getPrimitiveType(); FqName fqName = builtInsFqName.child(primitiveType.getTypeName()); - register(fqName, asmType); + register(fqName, Type.getType(type.getDesc())); - FqName wrapperFqName = jvmPrimitiveType.getWrapperFqName(); + FqName wrapperFqName = type.getWrapperFqName(); registerNullable(fqName, Type.getObjectType(JvmClassName.byFqNameWithoutInnerClasses(wrapperFqName).getInternalName())); registerFqName(fqName, wrapperFqName); - register(builtInsFqName.child(primitiveType.getArrayTypeName()), Type.getType("[" + asmType.getDescriptor())); + register(builtInsFqName.child(primitiveType.getArrayTypeName()), Type.getType("[" + type.getDesc())); } } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/PrimitiveTypesUtil.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/PrimitiveTypesUtil.java deleted file mode 100644 index 1083692417e..00000000000 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/PrimitiveTypesUtil.java +++ /dev/null @@ -1,42 +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.resolve.jvm.types; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType; -import org.jetbrains.org.objectweb.asm.Type; - -import static org.jetbrains.org.objectweb.asm.Type.*; - -public class PrimitiveTypesUtil { - private PrimitiveTypesUtil() { - } - - public static Type asmTypeForPrimitive(@NotNull JvmPrimitiveType jvmPrimitiveType) { - switch (jvmPrimitiveType) { - case BOOLEAN: return BOOLEAN_TYPE; - case CHAR: return CHAR_TYPE; - case BYTE: return BYTE_TYPE; - case SHORT: return SHORT_TYPE; - case INT: return INT_TYPE; - case FLOAT: return FLOAT_TYPE; - case LONG: return LONG_TYPE; - case DOUBLE: return DOUBLE_TYPE; - default: throw new IllegalStateException("Unknown primitive type: " + jvmPrimitiveType); - } - } -} diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JvmPrimitiveType.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JvmPrimitiveType.java index 43615804c6d..68ed5c2593b 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JvmPrimitiveType.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JvmPrimitiveType.java @@ -17,21 +17,21 @@ package org.jetbrains.kotlin.resolve.jvm; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.builtins.PrimitiveType; +import org.jetbrains.kotlin.name.FqName; import java.util.HashSet; import java.util.Set; public enum JvmPrimitiveType { - BOOLEAN(PrimitiveType.BOOLEAN, "boolean", "java.lang.Boolean"), - CHAR(PrimitiveType.CHAR, "char", "java.lang.Character"), - BYTE(PrimitiveType.BYTE, "byte", "java.lang.Byte"), - SHORT(PrimitiveType.SHORT, "short", "java.lang.Short"), - INT(PrimitiveType.INT, "int", "java.lang.Integer"), - FLOAT(PrimitiveType.FLOAT, "float", "java.lang.Float"), - LONG(PrimitiveType.LONG, "long", "java.lang.Long"), - DOUBLE(PrimitiveType.DOUBLE, "double", "java.lang.Double"), + BOOLEAN(PrimitiveType.BOOLEAN, "boolean", "Z", "java.lang.Boolean"), + CHAR(PrimitiveType.CHAR, "char", "C", "java.lang.Character"), + BYTE(PrimitiveType.BYTE, "byte", "B", "java.lang.Byte"), + SHORT(PrimitiveType.SHORT, "short", "S", "java.lang.Short"), + INT(PrimitiveType.INT, "int", "I", "java.lang.Integer"), + FLOAT(PrimitiveType.FLOAT, "float", "F", "java.lang.Float"), + LONG(PrimitiveType.LONG, "long", "J", "java.lang.Long"), + DOUBLE(PrimitiveType.DOUBLE, "double", "D", "java.lang.Double"), ; private static final Set WRAPPERS_CLASS_NAMES; @@ -50,11 +50,13 @@ public enum JvmPrimitiveType { private final PrimitiveType primitiveType; private final String name; + private final String desc; private final FqName wrapperFqName; - private JvmPrimitiveType(@NotNull PrimitiveType primitiveType, @NotNull String name, @NotNull String wrapperClassName) { + JvmPrimitiveType(@NotNull PrimitiveType primitiveType, @NotNull String name, @NotNull String desc, @NotNull String wrapperClassName) { this.primitiveType = primitiveType; this.name = name; + this.desc = desc; this.wrapperFqName = new FqName(wrapperClassName); } @@ -68,6 +70,11 @@ public enum JvmPrimitiveType { return name; } + @NotNull + public String getDesc() { + return desc; + } + @NotNull public FqName getWrapperFqName() { return wrapperFqName;