A variable description (like PHPFunctionDeclaration)
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / ast / NameReference.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2001, 2002 International Business Machines Corp. and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v0.5 
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v05.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.lookup.*;
14
15 public abstract class NameReference extends Reference implements InvocationSite, BindingIds {
16
17         public Binding binding, codegenBinding; //may be aTypeBinding-aFieldBinding-aLocalVariableBinding
18         
19         public TypeBinding receiverType, actualReceiverType;
20
21         //the error printing
22         //some name reference are build as name reference but
23         //only used as type reference. When it happens, instead of
24         //creating a new objet (aTypeReference) we just flag a boolean
25         //This concesion is valuable while their are cases when the NameReference
26         //will be a TypeReference (static message sends.....) and there is
27         //no changeClass in java.
28 public NameReference() {
29         super();
30         bits |= TYPE | VARIABLE; // restrictiveFlag
31         
32 }
33 public FieldBinding fieldBinding() {
34         //this method should be sent ONLY after a check against isFieldReference()
35         //check its use doing senders.........
36
37         return (FieldBinding) binding ;
38 }
39 public boolean isSuperAccess() {
40         return false;
41 }
42 public boolean isTypeAccess() {
43         // null is acceptable when we are resolving the first part of a reference
44         return binding == null || binding instanceof ReferenceBinding;
45 }
46 public boolean isTypeReference() {
47         return binding instanceof ReferenceBinding;
48 }
49 public void setActualReceiverType(ReferenceBinding receiverType) {
50         this.actualReceiverType = receiverType;
51 }
52 public void setDepth(int depth) {
53         if (depth > 0) {
54                 bits &= ~DepthMASK; // flush previous depth if any                      
55                 bits |= (depth & 0xFF) << DepthSHIFT; // encoded on 8 bits
56         }
57 }
58 public void setFieldIndex(int index){
59         // ignored
60 }
61
62 public abstract String unboundReferenceErrorName();
63 }