1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / ast / TypeReference.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2003 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  * 
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package net.sourceforge.phpdt.internal.compiler.ast;
12
13 import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
14 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
15 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
16 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
17 import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope;
18 import net.sourceforge.phpdt.internal.compiler.lookup.Scope;
19 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
20
21 public abstract class TypeReference extends Expression {
22
23         public TypeReference() {
24                 super();
25         }
26
27         public FlowInfo analyseCode(BlockScope currentScope,
28                         FlowContext flowContext, FlowInfo flowInfo) {
29                 return flowInfo;
30         }
31
32         // allows us to trap completion & selection nodes
33         public void aboutToResolve(Scope scope) {
34         }
35
36         /*
37          * Answer a base type reference (can be an array of base type).
38          */
39         // public static final TypeReference baseTypeReference(int baseType, int
40         // dim) {
41         //      
42         // if (dim == 0) {
43         // switch (baseType) {
44         // case (T_void) :
45         // return new SingleTypeReference(VoidBinding.simpleName, 0);
46         // case (T_boolean) :
47         // return new SingleTypeReference(BooleanBinding.simpleName, 0);
48         // case (T_char) :
49         // return new SingleTypeReference(CharBinding.simpleName, 0);
50         // case (T_float) :
51         // return new SingleTypeReference(FloatBinding.simpleName, 0);
52         // case (T_double) :
53         // return new SingleTypeReference(DoubleBinding.simpleName, 0);
54         // case (T_byte) :
55         // return new SingleTypeReference(ByteBinding.simpleName, 0);
56         // case (T_short) :
57         // return new SingleTypeReference(ShortBinding.simpleName, 0);
58         // case (T_int) :
59         // return new SingleTypeReference(IntBinding.simpleName, 0);
60         // default : //T_long
61         // return new SingleTypeReference(LongBinding.simpleName, 0);
62         // }
63         // }
64         // switch (baseType) {
65         // case (T_void) :
66         // return new ArrayTypeReference(VoidBinding.simpleName, dim, 0);
67         // case (T_boolean) :
68         // return new ArrayTypeReference(BooleanBinding.simpleName, dim, 0);
69         // case (T_char) :
70         // return new ArrayTypeReference(CharBinding.simpleName, dim, 0);
71         // case (T_float) :
72         // return new ArrayTypeReference(FloatBinding.simpleName, dim, 0);
73         // case (T_double) :
74         // return new ArrayTypeReference(DoubleBinding.simpleName, dim, 0);
75         // case (T_byte) :
76         // return new ArrayTypeReference(ByteBinding.simpleName, dim, 0);
77         // case (T_short) :
78         // return new ArrayTypeReference(ShortBinding.simpleName, dim, 0);
79         // case (T_int) :
80         // return new ArrayTypeReference(IntBinding.simpleName, dim, 0);
81         // default : //T_long
82         // return new ArrayTypeReference(LongBinding.simpleName, dim, 0);
83         // }
84         // }
85         public abstract TypeReference copyDims(int dim);
86
87         public int dimensions() {
88                 return 0;
89         }
90
91         public abstract TypeBinding getTypeBinding(Scope scope);
92
93         /**
94          * @return char[][]
95          */
96         public abstract char[][] getTypeName();
97
98         public boolean isTypeReference() {
99                 return true;
100         }
101
102         public TypeBinding resolveType(BlockScope scope) {
103                 // handle the error here
104                 constant = NotAConstant;
105                 if (this.resolvedType != null) { // is a shared type reference which
106                                                                                         // was already resolved
107                         if (!this.resolvedType.isValidBinding())
108                                 return null; // already reported error
109                 } else {
110                         this.resolvedType = getTypeBinding(scope);
111                         if (!this.resolvedType.isValidBinding()) {
112                                 scope.problemReporter().invalidType(this, this.resolvedType);
113                                 return null;
114                         }
115                         if (isTypeUseDeprecated(this.resolvedType, scope))
116                                 scope.problemReporter().deprecatedType(this.resolvedType, this);
117                 }
118                 return this.resolvedType;
119         }
120
121         public abstract void traverse(ASTVisitor visitor, ClassScope classScope);
122 }