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 }