001    package org.jetbrains.k2js.translate.intrinsic.functions.factories;
002    
003    import com.google.dart.compiler.backend.js.ast.JsExpression;
004    import com.google.dart.compiler.backend.js.ast.JsInvocation;
005    import com.google.dart.compiler.backend.js.ast.JsNameRef;
006    import org.jetbrains.annotations.NotNull;
007    import org.jetbrains.annotations.Nullable;
008    import org.jetbrains.k2js.translate.context.Namer;
009    import org.jetbrains.k2js.translate.context.TranslationContext;
010    import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic;
011    import org.jetbrains.k2js.translate.utils.TranslationUtils;
012    
013    import java.util.List;
014    
015    public final class KotlinFunctionIntrinsic extends FunctionIntrinsic {
016        @NotNull
017        private final JsNameRef function;
018    
019        public KotlinFunctionIntrinsic(@NotNull String functionName) {
020            function = new JsNameRef(functionName, Namer.KOTLIN_NAME);
021        }
022    
023        @NotNull
024        @Override
025        public JsExpression apply(
026                @Nullable JsExpression receiver,
027                @NotNull List<JsExpression> arguments,
028                @NotNull TranslationContext context
029        ) {
030            return new JsInvocation(function, receiver == null ? arguments : TranslationUtils.generateInvocationArguments(receiver, arguments));
031        }
032    }