1 /*******************************************************************************
2 * Copyright (c) 2000, 2004 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
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.jdt.internal.compiler.ast;
13 import org.eclipse.jdt.internal.compiler.lookup.*;
15 public abstract class NameReference extends Reference implements InvocationSite, BindingIds {
17 public Binding binding, codegenBinding; //may be aTypeBinding-aFieldBinding-aLocalVariableBinding
19 public TypeBinding receiverType; // raw receiver type
20 public TypeBinding actualReceiverType; // modified receiver type - actual one according to namelookup
23 //some name reference are build as name reference but
24 //only used as type reference. When it happens, instead of
25 //creating a new objet (aTypeReference) we just flag a boolean
26 //This concesion is valuable while their are cases when the NameReference
27 //will be a TypeReference (static message sends.....) and there is
28 //no changeClass in java.
29 public NameReference() {
31 bits |= TYPE | VARIABLE; // restrictiveFlag
34 public FieldBinding fieldBinding() {
35 //this method should be sent ONLY after a check against isFieldReference()
36 //check its use doing senders.........
38 return (FieldBinding) binding ;
40 public boolean isSuperAccess() {
43 public boolean isTypeAccess() {
44 // null is acceptable when we are resolving the first part of a reference
45 return binding == null || binding instanceof ReferenceBinding;
47 public boolean isTypeReference() {
48 return binding instanceof ReferenceBinding;
50 public void setActualReceiverType(ReferenceBinding receiverType) {
51 this.actualReceiverType = receiverType;
53 public void setDepth(int depth) {
54 bits &= ~DepthMASK; // flush previous depth if any
56 bits |= (depth & 0xFF) << DepthSHIFT; // encoded on 8 bits
59 public void setFieldIndex(int index){
63 public abstract String unboundReferenceErrorName();