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.intellij.util.SmartList;
008    
009    import java.util.Arrays;
010    import java.util.Collections;
011    import java.util.List;
012    
013    public final class JsInvocation extends JsExpressionImpl.JsExpressionHasArguments {
014        private JsExpression qualifier;
015    
016        public JsInvocation() {
017            super(new SmartList<JsExpression>());
018        }
019    
020        public JsInvocation(JsExpression qualifier, List<JsExpression> arguments) {
021            super(arguments);
022            this.qualifier = qualifier;
023        }
024    
025        public JsInvocation(JsExpression qualifier, JsExpression arg) {
026            this(qualifier, Collections.singletonList(arg));
027        }
028    
029        public JsInvocation(JsExpression qualifier, JsExpression... arguments) {
030            this(qualifier, Arrays.asList(arguments));
031        }
032    
033        public JsInvocation(JsExpression qualifier) {
034            this();
035            this.qualifier = qualifier;
036        }
037    
038        @Override
039        public List<JsExpression> getArguments() {
040            return arguments;
041        }
042    
043        public JsExpression getQualifier() {
044            return qualifier;
045        }
046    
047        public void setQualifier(JsExpression qualifier) {
048            this.qualifier = qualifier;
049        }
050    
051        @Override
052        public void accept(JsVisitor v) {
053            v.visitInvocation(this);
054        }
055    
056        @Override
057        public void acceptChildren(JsVisitor visitor) {
058            visitor.accept(qualifier);
059            visitor.acceptList(arguments);
060        }
061    }