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 }