diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryClassSignatureParser.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryClassSignatureParser.kt index 518edabd439..f6f2db3db00 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryClassSignatureParser.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryClassSignatureParser.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.load.java.structure.JavaTypeParameter import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.utils.addToStdlib.flattenTo import org.jetbrains.org.objectweb.asm.Type import java.text.CharacterIterator import java.text.StringCharacterIterator @@ -45,7 +46,7 @@ class BinaryClassSignatureParser(globalContext: ClassifierResolutionContext) { return emptyList() } - val typeParameters = ContainerUtil.newArrayList() + val typeParameters = ContainerUtil.newSmartList() signature.next() while (signature.current() != '>') { typeParameters.add(parseTypeParameter(signature, context)) @@ -148,7 +149,10 @@ class BinaryClassSignatureParser(globalContext: ClassifierResolutionContext) { if (canonicalName.toString() == "java/lang/Object") return JAVA_LANG_OBJECT_CLASSIFIER_TYPE - return PlainJavaClassifierType({ context.resolveByInternalName(canonicalName.toString()) }, argumentGroups.reversed().flatten()) + return PlainJavaClassifierType( + { context.resolveByInternalName(canonicalName.toString()) }, + argumentGroups.reversed().flattenTo(ContainerUtil.newSmartList()) + ) } private fun parseClassOrTypeVariableElement(signature: CharacterIterator, context: ClassifierResolutionContext): JavaType { diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt index e945b2a3fc4..11d4b1e3611 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt @@ -41,7 +41,7 @@ class BinaryJavaClass( ) : ClassVisitor(ASM_API_VERSION_FOR_CLASS_READING), VirtualFileBoundJavaClass, BinaryJavaModifierListOwner, MapBasedJavaAnnotationOwner { lateinit var myInternalName: String - override val annotations: MutableCollection = mutableListOf() + override val annotations: MutableCollection = ContainerUtil.newSmartList() override lateinit var typeParameters: List override lateinit var supertypes: Collection override val methods = arrayListOf() diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Methods.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Methods.kt index cc2065e0040..56651b87cad 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Methods.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Methods.kt @@ -36,7 +36,7 @@ abstract class BinaryJavaMethodBase( ) : JavaMember, MapBasedJavaAnnotationOwner, BinaryJavaModifierListOwner { override val annotationsByFqName by buildLazyValueForMap() - override val annotations: Collection = mutableListOf() + override val annotations: Collection = ContainerUtil.newSmartList() companion object { private class MethodInfo( diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt index e07b3aeebf1..31cba469b9a 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt @@ -130,4 +130,11 @@ inline fun measureTimeMillisWithResult(block: () -> T) : Pair { val start = System.currentTimeMillis() val result = block() return Pair(System.currentTimeMillis() - start, result) -} \ No newline at end of file +} + +public fun Iterable>.flattenTo(c: MutableList): List { + for (element in this) { + c.addAll(element) + } + return c +}