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 }