001 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
002 // for details. All rights reserved. Use of this source code is governed by a
003 // BSD-style license that can be found in the LICENSE file.
004
005 package com.google.dart.compiler.backend.js.ast;
006
007 import com.google.dart.compiler.util.AstUtil;
008 import com.intellij.util.SmartList;
009 import org.jetbrains.annotations.NotNull;
010
011 import java.util.Arrays;
012 import java.util.List;
013
014 public final class JsInvocation extends JsExpressionImpl.JsExpressionHasArguments {
015 private JsExpression qualifier;
016
017 public JsInvocation() {
018 super(new SmartList<JsExpression>());
019 }
020
021 public JsInvocation(JsExpression qualifier, @NotNull List<JsExpression> arguments) {
022 super(arguments);
023 this.qualifier = qualifier;
024 }
025
026 public JsInvocation(JsExpression qualifier, JsExpression arg) {
027 this(qualifier, new SmartList<JsExpression>(arg));
028 }
029
030 public JsInvocation(JsExpression qualifier, JsExpression... arguments) {
031 this(qualifier, Arrays.asList(arguments));
032 }
033
034 public JsInvocation(JsExpression qualifier) {
035 this();
036 this.qualifier = qualifier;
037 }
038
039 @NotNull
040 @Override
041 public List<JsExpression> getArguments() {
042 return arguments;
043 }
044
045 public JsExpression getQualifier() {
046 return qualifier;
047 }
048
049 public void setQualifier(JsExpression qualifier) {
050 this.qualifier = qualifier;
051 }
052
053 @Override
054 public void accept(JsVisitor v) {
055 v.visitInvocation(this);
056 }
057
058 @Override
059 public void acceptChildren(JsVisitor visitor) {
060 visitor.accept(qualifier);
061 visitor.acceptList(arguments);
062 }
063
064 @Override
065 public void traverse(JsVisitorWithContext v, JsContext ctx) {
066 if (v.visit(this, ctx)) {
067 qualifier = v.accept(qualifier);
068 v.acceptList(arguments);
069 }
070 v.endVisit(this, ctx);
071 }
072
073 @NotNull
074 @Override
075 public JsInvocation deepCopy() {
076 JsExpression qualifierCopy = AstUtil.deepCopy(qualifier);
077 List<JsExpression> argumentsCopy = AstUtil.deepCopy(arguments);
078 return new JsInvocation(qualifierCopy, argumentsCopy).withMetadataFrom(this);
079 }
080 }