1/* This file was generated by SableCC (http://www.sablecc.org/). */
2
3package com.google.clearsilver.jsilver.syntax.node;
4
5import java.util.*;
6import com.google.clearsilver.jsilver.syntax.analysis.*;
7
8@SuppressWarnings("nls")
9public final class ACallCommand extends PCommand
10{
11    private PPosition _position_;
12    private final LinkedList<TWord> _macro_ = new LinkedList<TWord>();
13    private final LinkedList<PExpression> _arguments_ = new LinkedList<PExpression>();
14
15    public ACallCommand()
16    {
17        // Constructor
18    }
19
20    public ACallCommand(
21        @SuppressWarnings("hiding") PPosition _position_,
22        @SuppressWarnings("hiding") List<TWord> _macro_,
23        @SuppressWarnings("hiding") List<PExpression> _arguments_)
24    {
25        // Constructor
26        setPosition(_position_);
27
28        setMacro(_macro_);
29
30        setArguments(_arguments_);
31
32    }
33
34    @Override
35    public Object clone()
36    {
37        return new ACallCommand(
38            cloneNode(this._position_),
39            cloneList(this._macro_),
40            cloneList(this._arguments_));
41    }
42
43    public void apply(Switch sw)
44    {
45        ((Analysis) sw).caseACallCommand(this);
46    }
47
48    public PPosition getPosition()
49    {
50        return this._position_;
51    }
52
53    public void setPosition(PPosition node)
54    {
55        if(this._position_ != null)
56        {
57            this._position_.parent(null);
58        }
59
60        if(node != null)
61        {
62            if(node.parent() != null)
63            {
64                node.parent().removeChild(node);
65            }
66
67            node.parent(this);
68        }
69
70        this._position_ = node;
71    }
72
73    public LinkedList<TWord> getMacro()
74    {
75        return this._macro_;
76    }
77
78    public void setMacro(List<TWord> list)
79    {
80        this._macro_.clear();
81        this._macro_.addAll(list);
82        for(TWord e : list)
83        {
84            if(e.parent() != null)
85            {
86                e.parent().removeChild(e);
87            }
88
89            e.parent(this);
90        }
91    }
92
93    public LinkedList<PExpression> getArguments()
94    {
95        return this._arguments_;
96    }
97
98    public void setArguments(List<PExpression> list)
99    {
100        this._arguments_.clear();
101        this._arguments_.addAll(list);
102        for(PExpression e : list)
103        {
104            if(e.parent() != null)
105            {
106                e.parent().removeChild(e);
107            }
108
109            e.parent(this);
110        }
111    }
112
113    @Override
114    public String toString()
115    {
116        return ""
117            + toString(this._position_)
118            + toString(this._macro_)
119            + toString(this._arguments_);
120    }
121
122    @Override
123    void removeChild(@SuppressWarnings("unused") Node child)
124    {
125        // Remove child
126        if(this._position_ == child)
127        {
128            this._position_ = null;
129            return;
130        }
131
132        if(this._macro_.remove(child))
133        {
134            return;
135        }
136
137        if(this._arguments_.remove(child))
138        {
139            return;
140        }
141
142        throw new RuntimeException("Not a child.");
143    }
144
145    @Override
146    void replaceChild(@SuppressWarnings("unused") Node oldChild, @SuppressWarnings("unused") Node newChild)
147    {
148        // Replace child
149        if(this._position_ == oldChild)
150        {
151            setPosition((PPosition) newChild);
152            return;
153        }
154
155        for(ListIterator<TWord> i = this._macro_.listIterator(); i.hasNext();)
156        {
157            if(i.next() == oldChild)
158            {
159                if(newChild != null)
160                {
161                    i.set((TWord) newChild);
162                    newChild.parent(this);
163                    oldChild.parent(null);
164                    return;
165                }
166
167                i.remove();
168                oldChild.parent(null);
169                return;
170            }
171        }
172
173        for(ListIterator<PExpression> i = this._arguments_.listIterator(); i.hasNext();)
174        {
175            if(i.next() == oldChild)
176            {
177                if(newChild != null)
178                {
179                    i.set((PExpression) newChild);
180                    newChild.parent(this);
181                    oldChild.parent(null);
182                    return;
183                }
184
185                i.remove();
186                oldChild.parent(null);
187                return;
188            }
189        }
190
191        throw new RuntimeException("Not a child.");
192    }
193}
194