001    package org.jetbrains.jet.codegen.intrinsics;
002    
003    import com.intellij.psi.PsiElement;
004    import org.jetbrains.annotations.NotNull;
005    import org.jetbrains.annotations.Nullable;
006    import org.jetbrains.asm4.Type;
007    import org.jetbrains.asm4.commons.InstructionAdapter;
008    import org.jetbrains.jet.codegen.ExpressionCodegen;
009    import org.jetbrains.jet.codegen.StackValue;
010    import org.jetbrains.jet.codegen.state.GenerationState;
011    import org.jetbrains.jet.lang.psi.JetExpression;
012    
013    import java.util.List;
014    
015    public class CopyToArray implements IntrinsicMethod {
016        @Override
017        public StackValue generate(
018                ExpressionCodegen codegen,
019                InstructionAdapter v,
020                @NotNull Type expectedType,
021                @Nullable PsiElement element,
022                @Nullable List<JetExpression> arguments,
023                @Nullable StackValue receiver,
024                @NotNull GenerationState state
025        ) {
026            assert receiver != null;
027            receiver.put(receiver.type, v);
028            v.dup();
029            v.invokeinterface("java/util/Collection", "size", "()I");
030    
031            v.newarray(expectedType.getElementType());
032            v.invokeinterface("java/util/Collection", "toArray", "([Ljava/lang/Object;)[Ljava/lang/Object;");
033    
034            StackValue.coerce(Type.getType("[Ljava/lang/Object;"), expectedType, v);
035    
036            return StackValue.onStack(expectedType);
037        }
038    }