avoid ClassCastException
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / ast / ClassAccess.java
1 package net.sourceforge.phpdt.internal.compiler.ast;
2
3 import java.util.List;
4
5 /**
6  * Any class access.
7  * @author Matthieu Casanova
8  */
9 public final class ClassAccess extends AbstractVariable {
10
11   /** a static class access : "::". */
12   public static final int STATIC = 0;
13
14   /** a normal class access : "->". */
15   public static final int NORMAL = 1;
16
17   private final Expression prefix;
18
19   /** the suffix. */
20   private final Expression suffix;
21
22   /** the type of access. */
23   private final int type;
24
25   /**
26    * Create a new class access.
27    * @param prefix
28    * @param suffix
29    * @param type the type of access {@link #STATIC} or {@link #NORMAL}
30    */
31   public ClassAccess(final Expression prefix,
32                      final Expression suffix,
33                      final int type) {
34     super(prefix.sourceStart, suffix.sourceEnd);
35     this.prefix = prefix;
36     this.suffix = suffix;
37     this.type = type;
38   }
39
40   private String toStringOperator() {
41     switch (type) {
42       case STATIC : return "::"; //$NON-NLS-1$
43       case NORMAL : return "->"; //$NON-NLS-1$
44     }
45     return "unknown operator"; //$NON-NLS-1$
46   }
47
48   /**
49    * Return the expression as String.
50    * @return the expression
51    */
52   public String toStringExpression() {
53     final String prefixString = prefix.toStringExpression();
54     final String operatorString = toStringOperator();
55     final String suffixString = suffix.toStringExpression();
56     final StringBuffer buff = new StringBuffer(prefixString.length() +
57                                                operatorString.length() +
58                                                suffixString.length());
59     buff.append(prefixString);
60     buff.append(operatorString);
61     buff.append(suffixString);
62     return buff.toString();
63   }
64
65   /**
66    * todo: find a better way to handle this
67    * @return the name of the variable
68    */
69   public String getName() {
70     if (prefix instanceof AbstractVariable) {
71       return ((AbstractVariable)prefix).getName();
72     }
73     return prefix.toStringExpression();
74   }
75
76   /**
77    * Get the variables from outside (parameters, globals ...)
78    *
79    * @param list the list where we will put variables
80    */
81   public void getOutsideVariable(final List list) {}
82
83   /**
84    * get the modified variables.
85    *
86    * @param list the list where we will put variables
87    */
88   public void getModifiedVariable(final List list) {}
89
90   /**
91    * Get the variables used.
92    *
93    * @param list the list where we will put variables
94    */
95   public void getUsedVariable(final List list) {
96     prefix.getUsedVariable(list);
97     suffix.getUsedVariable(list);
98   }
99 }