Packages: move collections to kotlin.collections.

This commit is contained in:
Ilya Gorbunov
2015-11-23 23:34:54 +03:00
parent 9fbbc9db98
commit 9c0f0cad70
19 changed files with 288 additions and 187 deletions
@@ -280,23 +280,23 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
private static final Map<String, String> KOTLIN_MARKER_INTERFACES = new HashMap<String, String>();
static {
KOTLIN_MARKER_INTERFACES.put("kotlin.Iterator", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.Iterable", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.Collection", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.List", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.ListIterator", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.Set", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.Map", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.Map.Entry", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.Iterator", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.Iterable", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.Collection", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.List", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.ListIterator", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.Set", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.Map", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.Map.Entry", "kotlin/jvm/internal/markers/KMappedMarker");
KOTLIN_MARKER_INTERFACES.put("kotlin.MutableIterator", "kotlin/jvm/internal/markers/KMutableIterator");
KOTLIN_MARKER_INTERFACES.put("kotlin.MutableIterable", "kotlin/jvm/internal/markers/KMutableIterable");
KOTLIN_MARKER_INTERFACES.put("kotlin.MutableCollection", "kotlin/jvm/internal/markers/KMutableCollection");
KOTLIN_MARKER_INTERFACES.put("kotlin.MutableList", "kotlin/jvm/internal/markers/KMutableList");
KOTLIN_MARKER_INTERFACES.put("kotlin.MutableListIterator", "kotlin/jvm/internal/markers/KMutableListIterator");
KOTLIN_MARKER_INTERFACES.put("kotlin.MutableSet", "kotlin/jvm/internal/markers/KMutableSet");
KOTLIN_MARKER_INTERFACES.put("kotlin.MutableMap", "kotlin/jvm/internal/markers/KMutableMap");
KOTLIN_MARKER_INTERFACES.put("kotlin.MutableMap.MutableEntry", "kotlin/jvm/internal/markers/KMutableMap$Entry");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.MutableIterator", "kotlin/jvm/internal/markers/KMutableIterator");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.MutableIterable", "kotlin/jvm/internal/markers/KMutableIterable");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.MutableCollection", "kotlin/jvm/internal/markers/KMutableCollection");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.MutableList", "kotlin/jvm/internal/markers/KMutableList");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.MutableListIterator", "kotlin/jvm/internal/markers/KMutableListIterator");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.MutableSet", "kotlin/jvm/internal/markers/KMutableSet");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.MutableMap", "kotlin/jvm/internal/markers/KMutableMap");
KOTLIN_MARKER_INTERFACES.put("kotlin.collections.MutableMap.MutableEntry", "kotlin/jvm/internal/markers/KMutableMap$Entry");
}
@NotNull
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.types.KotlinType;
import java.util.List;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.RANGES_PACKAGE_FQ_NAME;
import static org.jetbrains.kotlin.codegen.AsmUtil.isPrimitiveNumberClassDescriptor;
public class RangeCodegenUtil {
@@ -53,8 +53,8 @@ public class RangeCodegenUtil {
ImmutableMap.Builder<FqName, PrimitiveType> rangeBuilder = ImmutableMap.builder();
ImmutableMap.Builder<FqName, PrimitiveType> progressionBuilder = ImmutableMap.builder();
for (PrimitiveType primitiveType : supportedRangeTypes()) {
FqName rangeClassFqName = BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier(primitiveType.getTypeName() + "Range"));
FqName progressionClassFqName = BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier(primitiveType.getTypeName() + "Progression"));
FqName rangeClassFqName = RANGES_PACKAGE_FQ_NAME.child(Name.identifier(primitiveType.getTypeName() + "Range"));
FqName progressionClassFqName = RANGES_PACKAGE_FQ_NAME.child(Name.identifier(primitiveType.getTypeName() + "Progression"));
rangeBuilder.put(rangeClassFqName, primitiveType);
progressionBuilder.put(progressionClassFqName, primitiveType);
}
@@ -29,7 +29,9 @@ import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType;
import org.jetbrains.kotlin.types.expressions.OperatorConventions;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.FQ_NAMES;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.COLLECTIONS_PACKAGE_FQ_NAME;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
public class IntrinsicMethods {
@@ -76,29 +78,29 @@ public class IntrinsicMethods {
ImmutableList<Name> primitiveCastMethods = OperatorConventions.NUMBER_CONVERSIONS.asList();
for (Name method : primitiveCastMethods) {
String methodName = method.asString();
declareIntrinsicFunction("Number", methodName, 0, NUMBER_CAST);
declareIntrinsicFunction(FQ_NAMES.number, methodName, 0, NUMBER_CAST);
for (PrimitiveType type : PrimitiveType.NUMBER_TYPES) {
declareIntrinsicFunction(type.getTypeName().asString(), methodName, 0, NUMBER_CAST);
declareIntrinsicFunction(type.getTypeFqName(), methodName, 0, NUMBER_CAST);
}
}
for (PrimitiveType type : PrimitiveType.NUMBER_TYPES) {
String typeName = type.getTypeName().asString();
declareIntrinsicFunction(typeName, "plus", 0, UNARY_PLUS);
declareIntrinsicFunction(typeName, "unaryPlus", 0, UNARY_PLUS);
declareIntrinsicFunction(typeName, "minus", 0, UNARY_MINUS);
declareIntrinsicFunction(typeName, "unaryMinus", 0, UNARY_MINUS);
declareIntrinsicFunction(typeName, "inv", 0, INV);
declareIntrinsicFunction(typeName, "rangeTo", 1, RANGE_TO);
declareIntrinsicFunction(typeName, "inc", 0, INC);
declareIntrinsicFunction(typeName, "dec", 0, DEC);
FqName typeFqName = type.getTypeFqName();
declareIntrinsicFunction(typeFqName, "plus", 0, UNARY_PLUS);
declareIntrinsicFunction(typeFqName, "unaryPlus", 0, UNARY_PLUS);
declareIntrinsicFunction(typeFqName, "minus", 0, UNARY_MINUS);
declareIntrinsicFunction(typeFqName, "unaryMinus", 0, UNARY_MINUS);
declareIntrinsicFunction(typeFqName, "inv", 0, INV);
declareIntrinsicFunction(typeFqName, "rangeTo", 1, RANGE_TO);
declareIntrinsicFunction(typeFqName, "inc", 0, INC);
declareIntrinsicFunction(typeFqName, "dec", 0, DEC);
}
for (PrimitiveType type : PrimitiveType.values()) {
String typeName = type.getTypeName().asString();
declareIntrinsicFunction(typeName, "equals", 1, EQUALS);
declareIntrinsicFunction(typeName, "hashCode", 0, HASH_CODE);
declareIntrinsicFunction(typeName, "toString", 0, TO_STRING);
FqName typeFqName = type.getTypeFqName();
declareIntrinsicFunction(typeFqName, "equals", 1, EQUALS);
declareIntrinsicFunction(typeFqName, "hashCode", 0, HASH_CODE);
declareIntrinsicFunction(typeFqName, "toString", 0, TO_STRING);
intrinsicsMap.registerIntrinsic(
BUILT_INS_PACKAGE_FQ_NAME, null, StringsKt.decapitalize(type.getArrayTypeName().asString()) + "Of", 1, new JavaClassArray()
@@ -117,12 +119,12 @@ public class IntrinsicMethods {
declareBinaryOp("or", IOR);
declareBinaryOp("xor", IXOR);
declareIntrinsicFunction("Boolean", "not", 0, new Not());
declareIntrinsicFunction(FQ_NAMES._boolean, "not", 0, new Not());
declareIntrinsicFunction("String", "plus", 1, new Concat());
declareIntrinsicFunction("String", "get", 1, new StringGetChar());
declareIntrinsicFunction(FQ_NAMES.string, "plus", 1, new Concat());
declareIntrinsicFunction(FQ_NAMES.string, "get", 1, new StringGetChar());
declareIntrinsicFunction("Cloneable", "clone", 0, CLONE);
declareIntrinsicFunction(FQ_NAMES.cloneable, "clone", 0, CLONE);
intrinsicsMap.registerIntrinsic(BUILT_INS_PACKAGE_FQ_NAME, KotlinBuiltIns.FQ_NAMES.any, "toString", 0, TO_STRING);
intrinsicsMap.registerIntrinsic(BUILT_INS_PACKAGE_FQ_NAME, KotlinBuiltIns.FQ_NAMES.any, "identityEquals", 1, IDENTITY_EQUALS);
@@ -130,9 +132,8 @@ public class IntrinsicMethods {
intrinsicsMap.registerIntrinsic(BUILT_INS_PACKAGE_FQ_NAME, null, "arrayOfNulls", 1, new NewArray());
for (PrimitiveType type : PrimitiveType.values()) {
String typeName = type.getTypeName().asString();
declareIntrinsicFunction(typeName, "compareTo", 1, new CompareTo());
declareIntrinsicFunction(typeName + "Iterator", "next", 0, ITERATOR_NEXT);
declareIntrinsicFunction(type.getTypeFqName(), "compareTo", 1, new CompareTo());
declareIntrinsicFunction(COLLECTIONS_PACKAGE_FQ_NAME.child(Name.identifier(type.getTypeName().asString() + "Iterator")), "next", 0, ITERATOR_NEXT);
}
declareArrayMethods();
@@ -140,44 +141,42 @@ public class IntrinsicMethods {
private void declareArrayMethods() {
for (JvmPrimitiveType jvmPrimitiveType : JvmPrimitiveType.values()) {
declareArrayMethodsForPrimitive(jvmPrimitiveType);
declareArrayMethods(jvmPrimitiveType.getPrimitiveType().getArrayTypeFqName());
}
declareIntrinsicFunction("Array", "size", -1, ARRAY_SIZE);
declareIntrinsicFunction("Array", "set", 2, ARRAY_SET);
declareIntrinsicFunction("Array", "get", 1, ARRAY_GET);
declareIntrinsicFunction("Array", "clone", 0, CLONE);
declareIterator("Array");
declareArrayMethods(FQ_NAMES.array.toSafe());
}
private void declareArrayMethodsForPrimitive(@NotNull JvmPrimitiveType jvmPrimitiveType) {
String arrayTypeName = jvmPrimitiveType.getPrimitiveType().getArrayTypeName().asString();
declareIntrinsicFunction(arrayTypeName, "size", -1, ARRAY_SIZE);
declareIntrinsicFunction(arrayTypeName, "set", 2, ARRAY_SET);
declareIntrinsicFunction(arrayTypeName, "get", 1, ARRAY_GET);
declareIntrinsicFunction(arrayTypeName, "clone", 0, CLONE);
declareIterator(arrayTypeName);
}
private void declareIterator(@NotNull String arrayClassName) {
declareIntrinsicFunction(arrayClassName, "iterator", 0, ARRAY_ITERATOR);
private void declareArrayMethods(@NotNull FqName arrayTypeFqName) {
declareIntrinsicFunction(arrayTypeFqName, "size", -1, ARRAY_SIZE);
declareIntrinsicFunction(arrayTypeFqName, "set", 2, ARRAY_SET);
declareIntrinsicFunction(arrayTypeFqName, "get", 1, ARRAY_GET);
declareIntrinsicFunction(arrayTypeFqName, "clone", 0, CLONE);
declareIntrinsicFunction(arrayTypeFqName, "iterator", 0, ARRAY_ITERATOR);
}
private void declareBinaryOp(@NotNull String methodName, int opcode) {
BinaryOp op = new BinaryOp(opcode);
for (PrimitiveType type : PrimitiveType.values()) {
declareIntrinsicFunction(type.getTypeName().asString(), methodName, 1, op);
declareIntrinsicFunction(type.getTypeFqName(), methodName, 1, op);
}
}
private void declareIntrinsicFunction(
@NotNull String className,
@NotNull FqName classFqName,
@NotNull String methodName,
int arity,
@NotNull IntrinsicMethod implementation
) {
intrinsicsMap.registerIntrinsic(BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier(className)),
null, methodName, arity, implementation);
intrinsicsMap.registerIntrinsic(classFqName, null, methodName, arity, implementation);
}
private void declareIntrinsicFunction(
@NotNull FqNameUnsafe classFqName,
@NotNull String methodName,
int arity,
@NotNull IntrinsicMethod implementation
) {
intrinsicsMap.registerIntrinsic(classFqName.toSafe(), null, methodName, arity, implementation);
}
@Nullable
@@ -16,10 +16,11 @@
package org.jetbrains.kotlin.codegen.intrinsics
import org.jetbrains.kotlin.builtins.KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME
import org.jetbrains.kotlin.builtins.KotlinBuiltIns.COLLECTIONS_PACKAGE_FQ_NAME
import org.jetbrains.kotlin.codegen.AsmUtil
import org.jetbrains.kotlin.codegen.Callable
import org.jetbrains.kotlin.codegen.CallableMethod
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
@@ -45,7 +46,7 @@ class IteratorNext : IntrinsicMethod() {
override fun invokeIntrinsic(v: InstructionAdapter) {
val name = getIteratorName(returnType)
v.invokevirtual(
BUILT_INS_PACKAGE_FQ_NAME.asString() + "/" + name + "Iterator",
COLLECTIONS_PACKAGE_FQ_NAME.child(Name.identifier(name + "Iterator")) .asString().replace('.', '/'),
"next$name",
"()" + returnType.descriptor,
false
@@ -115,14 +115,14 @@ object TypeIntrinsics {
Type.getMethodDescriptor(Type.BOOLEAN_TYPE, Type.getObjectType("java/lang/Object"), Type.INT_TYPE)
private val IS_MUTABLE_COLLECTION_METHOD_NAME = hashMapOf(
"kotlin.MutableIterator" to "isMutableIterator",
"kotlin.MutableIterable" to "isMutableIterable",
"kotlin.MutableCollection" to "isMutableCollection",
"kotlin.MutableList" to "isMutableList",
"kotlin.MutableListIterator" to "isMutableListIterator",
"kotlin.MutableSet" to "isMutableSet",
"kotlin.MutableMap" to "isMutableMap",
"kotlin.MutableMap.MutableEntry" to "isMutableMapEntry"
"kotlin.collections.MutableIterator" to "isMutableIterator",
"kotlin.collections.MutableIterable" to "isMutableIterable",
"kotlin.collections.MutableCollection" to "isMutableCollection",
"kotlin.collections.MutableList" to "isMutableList",
"kotlin.collections.MutableListIterator" to "isMutableListIterator",
"kotlin.collections.MutableSet" to "isMutableSet",
"kotlin.collections.MutableMap" to "isMutableMap",
"kotlin.collections.MutableMap.MutableEntry" to "isMutableMapEntry"
)
private val IS_MUTABLE_COLLECTION_METHOD_DESCRIPTOR =
@@ -155,14 +155,14 @@ object TypeIntrinsics {
IS_MUTABLE_COLLECTION_METHOD_NAME[getClassFqName(jetType)]
private val CHECKCAST_METHOD_NAME = hashMapOf(
"kotlin.MutableIterator" to "asMutableIterator",
"kotlin.MutableIterable" to "asMutableIterable",
"kotlin.MutableCollection" to "asMutableCollection",
"kotlin.MutableList" to "asMutableList",
"kotlin.MutableListIterator" to "asMutableListIterator",
"kotlin.MutableSet" to "asMutableSet",
"kotlin.MutableMap" to "asMutableMap",
"kotlin.MutableMap.MutableEntry" to "asMutableMapEntry"
"kotlin.collections.MutableIterator" to "asMutableIterator",
"kotlin.collections.MutableIterable" to "asMutableIterable",
"kotlin.collections.MutableCollection" to "asMutableCollection",
"kotlin.collections.MutableList" to "asMutableList",
"kotlin.collections.MutableListIterator" to "asMutableListIterator",
"kotlin.collections.MutableSet" to "asMutableSet",
"kotlin.collections.MutableMap" to "asMutableMap",
"kotlin.collections.MutableMap.MutableEntry" to "asMutableMapEntry"
)
private fun getAsMutableCollectionMethodName(jetType: KotlinType): String? {
@@ -18,9 +18,11 @@
package org.jetbrains.kotlin.codegen.state
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.KotlinBuiltIns.FQ_NAMES as BUILTIN_NAMES
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.firstOverridden
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull
import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf
@@ -80,10 +82,11 @@ val CallableDescriptor?.isMethodWithDeclarationSiteWildcards: Boolean
} != null
}
private fun FqName.child(name: String): FqName = child(Name.identifier(name))
private val METHODS_WITH_DECLARATION_SITE_WILDCARDS = setOf(
FqName("kotlin.MutableCollection.addAll"),
FqName("kotlin.MutableList.addAll"),
FqName("kotlin.MutableMap.putAll")
BUILTIN_NAMES.mutableCollection.child("addAll"),
BUILTIN_NAMES.mutableList.child("addAll"),
BUILTIN_NAMES.mutableMap.child("putAll")
)
internal fun TypeMappingMode.updateArgumentModeFromAnnotations(type: KotlinType): TypeMappingMode {
@@ -62,5 +62,7 @@ private val DEFAULT_IMPORTS_FOR_JVM: List<ImportPath> = ArrayList<ImportPath>().
val builtIns = JvmPlatform.builtIns
addAllClassifiersFromScope(builtIns.builtInsPackageScope)
addAllClassifiersFromScope(builtIns.annotationPackageScope)
addAllClassifiersFromScope(builtIns.collectionsPackageFragment.getMemberScope())
addAllClassifiersFromScope(builtIns.rangesPackageFragment.getMemberScope())
addAllClassifiersFromScope(builtIns.annotationPackageFragment.getMemberScope())
}