001    package edu.rice.cs.javalanglevels.tree;
002    
003    import edu.rice.cs.javalanglevels.SourceInfo;
004    
005    /**
006     * Class ComplexMethodInvocation, a component of the JExpressionIF composite hierarchy.
007     * Note: null is not allowed as a value for any field.
008     * @version  Generated automatically by ASTGen at Sun May 27 23:01:27 CDT 2012
009     */
010    public class ComplexMethodInvocation extends MethodInvocation {
011      private final Expression _enclosing;
012    
013      /**
014       * Constructs a ComplexMethodInvocation.
015       * @throws java.lang.IllegalArgumentException  If any parameter to the constructor is null.
016       */
017      public ComplexMethodInvocation(SourceInfo in_sourceInfo, Expression in_enclosing, Word in_name, ParenthesizedExpressionList in_arguments) {
018        super(in_sourceInfo, in_arguments, in_name);
019    
020        if (in_enclosing == null) {
021          throw new java.lang.IllegalArgumentException("Parameter 'enclosing' to the ComplexMethodInvocation constructor was null. This class may not have null field values.");
022        }
023        _enclosing = in_enclosing;
024      }
025    
026      final public Expression getEnclosing() { return _enclosing; }
027    
028      public <RetType> RetType visit(JExpressionIFVisitor<RetType> visitor) { return visitor.forComplexMethodInvocation(this); }
029      public void visit(JExpressionIFVisitor_void visitor) { visitor.forComplexMethodInvocation(this); }
030    
031      /**
032       * Implementation of toString that uses
033       * {@link #output} to generated nicely tabbed tree.
034       */
035      public java.lang.String toString() {
036        java.io.StringWriter w = new java.io.StringWriter();
037        output(w);
038        return w.toString();
039      }
040    
041      /**
042       * Prints this object out as a nicely tabbed tree.
043       */
044      public void output(java.io.Writer writer) {
045        outputHelp(new TabPrintWriter(writer, 2));
046      }
047    
048      public void outputHelp(TabPrintWriter writer) {
049        writer.print("ComplexMethodInvocation" + ":");
050        writer.indent();
051    
052        writer.startLine("");
053        writer.print("sourceInfo = ");
054        SourceInfo temp_sourceInfo = getSourceInfo();
055        if (temp_sourceInfo == null) {
056          writer.print("null");
057        } else {
058          writer.print(temp_sourceInfo);
059        }
060    
061        writer.startLine("");
062        writer.print("enclosing = ");
063        Expression temp_enclosing = getEnclosing();
064        if (temp_enclosing == null) {
065          writer.print("null");
066        } else {
067          temp_enclosing.outputHelp(writer);
068        }
069    
070        writer.startLine("");
071        writer.print("name = ");
072        Word temp_name = getName();
073        if (temp_name == null) {
074          writer.print("null");
075        } else {
076          temp_name.outputHelp(writer);
077        }
078    
079        writer.startLine("");
080        writer.print("arguments = ");
081        ParenthesizedExpressionList temp_arguments = getArguments();
082        if (temp_arguments == null) {
083          writer.print("null");
084        } else {
085          temp_arguments.outputHelp(writer);
086        }
087        writer.unindent();
088      }
089    
090      /**
091       * Implementation of equals that is based on the values
092       * of the fields of the object. Thus, two objects 
093       * created with identical parameters will be equal.
094       */
095      public boolean equals(java.lang.Object obj) {
096        if (obj == null) return false;
097        if ((obj.getClass() != this.getClass()) || (obj.hashCode() != this.hashCode())) {
098          return false;
099        } else {
100          ComplexMethodInvocation casted = (ComplexMethodInvocation) obj;
101          if (! (getEnclosing().equals(casted.getEnclosing()))) return false;
102          if (! (getName().equals(casted.getName()))) return false;
103          if (! (getArguments().equals(casted.getArguments()))) return false;
104          return true;
105        }
106      }
107    
108      /**
109       * Implementation of hashCode that is consistent with
110       * equals. The value of the hashCode is formed by
111       * XORing the hashcode of the class object with
112       * the hashcodes of all the fields of the object.
113       */
114      protected int generateHashCode() {
115        int code = getClass().hashCode();
116        code ^= 0;
117        code ^= getEnclosing().hashCode();
118        code ^= getName().hashCode();
119        code ^= getArguments().hashCode();
120        return code;
121      }
122    }