01: /*******************************************************************************
02: * Copyright (c) 2000, 2006 IBM Corporation and others.
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * IBM Corporation - initial API and implementation
10: *******************************************************************************/package org.eclipse.jdt.internal.compiler.ast;
11:
12: import org.eclipse.jdt.internal.compiler.lookup.*;
13:
14: public abstract class NameReference extends Reference implements
15: InvocationSite {
16:
17: public Binding binding, codegenBinding; //may be aTypeBinding-aFieldBinding-aLocalVariableBinding
18:
19: public TypeBinding actualReceiverType; // modified receiver type - actual one according to namelookup
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 |= Binding.TYPE | Binding.VARIABLE; // restrictiveFlag
31:
32: }
33:
34: public FieldBinding fieldBinding() {
35: //this method should be sent ONLY after a check against isFieldReference()
36: //check its use doing senders.........
37:
38: return (FieldBinding) binding;
39: }
40:
41: public boolean isSuperAccess() {
42: return false;
43: }
44:
45: public boolean isTypeAccess() {
46: // null is acceptable when we are resolving the first part of a reference
47: return binding == null || binding instanceof ReferenceBinding;
48: }
49:
50: public boolean isTypeReference() {
51: return binding instanceof ReferenceBinding;
52: }
53:
54: public void setActualReceiverType(ReferenceBinding receiverType) {
55: if (receiverType == null)
56: return; // error scenario only
57: this .actualReceiverType = receiverType;
58: }
59:
60: public void setDepth(int depth) {
61: bits &= ~DepthMASK; // flush previous depth if any
62: if (depth > 0) {
63: bits |= (depth & 0xFF) << DepthSHIFT; // encoded on 8 bits
64: }
65: }
66:
67: public void setFieldIndex(int index) {
68: // ignored
69: }
70:
71: public abstract String unboundReferenceErrorName();
72: }
|