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.List;
012
013 public final class JsInvocation extends JsExpressionImpl.JsExpressionHasArguments {
014 @NotNull
015 private JsExpression qualifier;
016
017 public JsInvocation(@NotNull JsExpression qualifier, @NotNull List<JsExpression> arguments) {
018 super(arguments);
019 this.qualifier = qualifier;
020 }
021
022 public JsInvocation(@NotNull JsExpression qualifier, JsExpression... arguments) {
023 this(qualifier, new SmartList<JsExpression>(arguments));
024 }
025
026 @NotNull
027 @Override
028 public List<JsExpression> getArguments() {
029 return arguments;
030 }
031
032 @NotNull
033 public JsExpression getQualifier() {
034 return qualifier;
035 }
036
037 public void setQualifier(@NotNull JsExpression qualifier) {
038 this.qualifier = qualifier;
039 }
040
041 @Override
042 public void accept(JsVisitor v) {
043 v.visitInvocation(this);
044 }
045
046 @Override
047 public void acceptChildren(JsVisitor visitor) {
048 visitor.accept(qualifier);
049 visitor.acceptList(arguments);
050 }
051
052 @Override
053 public void traverse(JsVisitorWithContext v, JsContext ctx) {
054 if (v.visit(this, ctx)) {
055 qualifier = v.accept(qualifier);
056 v.acceptList(arguments);
057 }
058 v.endVisit(this, ctx);
059 }
060
061 @NotNull
062 @Override
063 public JsInvocation deepCopy() {
064 JsExpression qualifierCopy = AstUtil.deepCopy(qualifier);
065 List<JsExpression> argumentsCopy = AstUtil.deepCopy(arguments);
066 return new JsInvocation(qualifierCopy, argumentsCopy).withMetadataFrom(this);
067 }
068 }