X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=repo%2Forg.ibex.tool%2Fsrc%2Forg%2Feclipse%2Fjdt%2Finternal%2Fcompiler%2Flookup%2FReferenceBinding.java;fp=repo%2Forg.ibex.tool%2Fsrc%2Forg%2Feclipse%2Fjdt%2Finternal%2Fcompiler%2Flookup%2FReferenceBinding.java;h=0000000000000000000000000000000000000000;hb=040fa5af2cd00017cf3575950cdaade34a6d7f6c;hp=6cda282e332277e8297cb345ff161760a37f1301;hpb=a580fb8376d315d05e4d6bfdff9ff1101a151cd6;p=org.ibex.tool.git diff --git a/repo/org.ibex.tool/src/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java b/repo/org.ibex.tool/src/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java deleted file mode 100644 index 6cda282..0000000 --- a/repo/org.ibex.tool/src/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java +++ /dev/null @@ -1,589 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jdt.internal.compiler.lookup; - -import org.eclipse.jdt.core.compiler.CharOperation; -import org.eclipse.jdt.internal.compiler.env.IDependent; - -/* -Not all fields defined by this type (& its subclasses) are initialized when it is created. -Some are initialized only when needed. - -Accessors have been provided for some public fields so all TypeBindings have the same API... -but access public fields directly whenever possible. -Non-public fields have accessors which should be used everywhere you expect the field to be initialized. - -null is NOT a valid value for a non-public field... it just means the field is not initialized. -*/ - -abstract public class ReferenceBinding extends TypeBinding implements IDependent { - public char[][] compoundName; - public char[] sourceName; - public int modifiers; - public PackageBinding fPackage; - - char[] fileName; - char[] constantPoolName; - char[] signature; - -public FieldBinding[] availableFields() { - return fields(); -} - -public MethodBinding[] availableMethods() { - return methods(); -} -/* Answer true if the receiver can be instantiated -*/ - -public boolean canBeInstantiated() { - return !(isAbstract() || isInterface()); -} -/* Answer true if the receiver is visible to the invocationPackage. -*/ - -public final boolean canBeSeenBy(PackageBinding invocationPackage) { - if (isPublic()) return true; - if (isPrivate()) return false; - - // isProtected() or isDefault() - return invocationPackage == fPackage; -} -/* Answer true if the receiver is visible to the receiverType and the invocationType. -*/ - -public final boolean canBeSeenBy(ReferenceBinding receiverType, SourceTypeBinding invocationType) { - if (isPublic()) return true; - - if (invocationType == this && invocationType == receiverType) return true; - - if (isProtected()) { - - // answer true if the invocationType is the declaringClass or they are in the same package - // OR the invocationType is a subclass of the declaringClass - // AND the invocationType is the invocationType or its subclass - // OR the type is a static method accessed directly through a type - // OR previous assertions are true for one of the enclosing type - if (invocationType == this) return true; - if (invocationType.fPackage == fPackage) return true; - - ReferenceBinding currentType = invocationType; - ReferenceBinding declaringClass = enclosingType(); // protected types always have an enclosing one - if (declaringClass == null) return false; // could be null if incorrect top-level protected type - //int depth = 0; - do { - if (declaringClass == invocationType) return true; - if (declaringClass.isSuperclassOf(currentType)) return true; - //depth++; - currentType = currentType.enclosingType(); - } while (currentType != null); - return false; - } - - if (isPrivate()) { - // answer true if the receiverType is the receiver or its enclosingType - // AND the invocationType and the receiver have a common enclosingType - if (!(receiverType == this || receiverType == enclosingType())) return false; - - if (invocationType != this) { - ReferenceBinding outerInvocationType = invocationType; - ReferenceBinding temp = outerInvocationType.enclosingType(); - while (temp != null) { - outerInvocationType = temp; - temp = temp.enclosingType(); - } - - ReferenceBinding outerDeclaringClass = this; - temp = outerDeclaringClass.enclosingType(); - while (temp != null) { - outerDeclaringClass = temp; - temp = temp.enclosingType(); - } - if (outerInvocationType != outerDeclaringClass) return false; - } - return true; - } - - // isDefault() - if (invocationType.fPackage != fPackage) return false; - - ReferenceBinding type = receiverType; - ReferenceBinding declaringClass = enclosingType() == null ? this : enclosingType(); - do { - if (declaringClass == type) return true; - if (fPackage != type.fPackage) return false; - } while ((type = type.superclass()) != null); - return false; -} -/* - * Answer true if the receiver is visible to the type provided by the scope. - */ - -public final boolean canBeSeenBy(Scope scope) { - - if (isPublic()) return true; - - if (scope.kind == Scope.COMPILATION_UNIT_SCOPE){ - return this.canBeSeenBy(((CompilationUnitScope)scope).fPackage); - } - - SourceTypeBinding invocationType = scope.enclosingSourceType(); - if (invocationType == this) return true; - - if (isProtected()) { - // answer true if the invocationType is the declaringClass or they are in the same package - // OR the invocationType is a subclass of the declaringClass - // AND the invocationType is the invocationType or its subclass - // OR the type is a static method accessed directly through a type - // OR previous assertions are true for one of the enclosing type - if (invocationType.fPackage == fPackage) return true; - - ReferenceBinding currentType = invocationType; - ReferenceBinding declaringClass = enclosingType(); // protected types always have an enclosing one - if (declaringClass == null) return false; // could be null if incorrect top-level protected type - // int depth = 0; - do { - if (declaringClass == invocationType) return true; - if (declaringClass.isSuperclassOf(currentType)) return true; - // depth++; - currentType = currentType.enclosingType(); - } while (currentType != null); - return false; - } - if (isPrivate()) { - // answer true if the receiver and the invocationType have a common enclosingType - // already know they are not the identical type - ReferenceBinding outerInvocationType = invocationType; - ReferenceBinding temp = outerInvocationType.enclosingType(); - while (temp != null) { - outerInvocationType = temp; - temp = temp.enclosingType(); - } - - ReferenceBinding outerDeclaringClass = this; - temp = outerDeclaringClass.enclosingType(); - while (temp != null) { - outerDeclaringClass = temp; - temp = temp.enclosingType(); - } - return outerInvocationType == outerDeclaringClass; - } - - // isDefault() - return invocationType.fPackage == fPackage; -} -public void computeId() { - if (compoundName.length != 3) { - if (compoundName.length == 4 && CharOperation.equals(JAVA_LANG_REFLECT_CONSTRUCTOR, compoundName)) - id = T_JavaLangReflectConstructor; - return; - } - - if (!CharOperation.equals(JAVA, compoundName[0])) - return; - - // remaining types MUST be in java.*.* - if (!CharOperation.equals(LANG, compoundName[1])) { - if (CharOperation.equals(JAVA_IO_PRINTSTREAM, compoundName)) - id = T_JavaIoPrintStream; - else if (CharOperation.equals(JAVA_IO_SERIALIZABLE, compoundName)) - id = T_JavaIoSerializable; - return; - } - - // remaining types MUST be in java.lang.* - char[] typeName = compoundName[2]; - if (typeName.length == 0) return; // just to be safe - switch (typeName[0]) { - case 'A' : - if (CharOperation.equals(typeName, JAVA_LANG_ASSERTIONERROR[2])) - id = T_JavaLangAssertionError; - return; - case 'B' : - if (CharOperation.equals(typeName, JAVA_LANG_BOOLEAN[2])) - id = T_JavaLangBoolean; - else if (CharOperation.equals(typeName, JAVA_LANG_BYTE[2])) - id = T_JavaLangByte; - return; - case 'C' : - if (CharOperation.equals(typeName, JAVA_LANG_CHARACTER[2])) - id = T_JavaLangCharacter; - else if (CharOperation.equals(typeName, JAVA_LANG_CLASS[2])) - id = T_JavaLangClass; - else if (CharOperation.equals(typeName, JAVA_LANG_CLASSNOTFOUNDEXCEPTION[2])) - id = T_JavaLangClassNotFoundException; - else if (CharOperation.equals(typeName, JAVA_LANG_CLONEABLE[2])) - id = T_JavaLangCloneable; - return; - case 'D' : - if (CharOperation.equals(typeName, JAVA_LANG_DOUBLE[2])) - id = T_JavaLangDouble; - return; - case 'E' : - if (CharOperation.equals(typeName, JAVA_LANG_ERROR[2])) - id = T_JavaLangError; - else if (CharOperation.equals(typeName, JAVA_LANG_EXCEPTION[2])) - id = T_JavaLangException; - return; - case 'F' : - if (CharOperation.equals(typeName, JAVA_LANG_FLOAT[2])) - id = T_JavaLangFloat; - return; - case 'I' : - if (CharOperation.equals(typeName, JAVA_LANG_INTEGER[2])) - id = T_JavaLangInteger; - return; - case 'L' : - if (CharOperation.equals(typeName, JAVA_LANG_LONG[2])) - id = T_JavaLangLong; - return; - case 'N' : - if (CharOperation.equals(typeName, JAVA_LANG_NOCLASSDEFERROR[2])) - id = T_JavaLangNoClassDefError; - return; - case 'O' : - if (CharOperation.equals(typeName, JAVA_LANG_OBJECT[2])) - id = T_JavaLangObject; - return; - case 'S' : - if (CharOperation.equals(typeName, JAVA_LANG_STRING[2])) - id = T_JavaLangString; - else if (CharOperation.equals(typeName, JAVA_LANG_STRINGBUFFER[2])) - id = T_JavaLangStringBuffer; - else if (CharOperation.equals(typeName, JAVA_LANG_SYSTEM[2])) - id = T_JavaLangSystem; - else if (CharOperation.equals(typeName, JAVA_LANG_SHORT[2])) - id = T_JavaLangShort; - return; - case 'T' : - if (CharOperation.equals(typeName, JAVA_LANG_THROWABLE[2])) - id = T_JavaLangThrowable; - return; - case 'V' : - if (CharOperation.equals(typeName, JAVA_LANG_VOID[2])) - id = T_JavaLangVoid; - return; - } -} -/* Answer the receiver's constant pool name. -* -* NOTE: This method should only be used during/after code gen. -*/ - -public char[] constantPoolName() /* java/lang/Object */ { - if (constantPoolName != null) return constantPoolName; - return constantPoolName = CharOperation.concatWith(compoundName, '/'); -} -String debugName() { - return (compoundName != null) ? new String(readableName()) : "UNNAMED TYPE"; //$NON-NLS-1$ -} -public final int depth() { - int depth = 0; - ReferenceBinding current = this; - while ((current = current.enclosingType()) != null) - depth++; - return depth; -} -/* Answer the receiver's enclosing type... null if the receiver is a top level type. -*/ - -public ReferenceBinding enclosingType() { - return null; -} -public final ReferenceBinding enclosingTypeAt(int relativeDepth) { - ReferenceBinding current = this; - while (relativeDepth-- > 0 && current != null) - current = current.enclosingType(); - return current; -} -public int fieldCount() { - return fields().length; -} -public FieldBinding[] fields() { - return NoFields; -} -public final int getAccessFlags() { - return modifiers & AccJustFlag; -} -public MethodBinding getExactConstructor(TypeBinding[] argumentTypes) { - return null; -} -public MethodBinding getExactMethod(char[] selector, TypeBinding[] argumentTypes) { - return null; -} -public FieldBinding getField(char[] fieldName, boolean needResolve) { - return null; -} -/** - * Answer the file name which defines the type. - * - * The path part (optional) must be separated from the actual - * file proper name by a java.io.File.separator. - * - * The proper file name includes the suffix extension (e.g. ".java") - * - * e.g. "c:/com/ibm/compiler/java/api/Compiler.java" - */ - -public char[] getFileName() { - return fileName; -} -public ReferenceBinding getMemberType(char[] typeName) { - ReferenceBinding[] memberTypes = memberTypes(); - for (int i = memberTypes.length; --i >= 0;) - if (CharOperation.equals(memberTypes[i].sourceName, typeName)) - return memberTypes[i]; - return null; -} -public MethodBinding[] getMethods(char[] selector) { - return NoMethods; -} -public PackageBinding getPackage() { - return fPackage; -} -public boolean hasMemberTypes() { - return false; -} -/* Answer true if the receiver implements anInterface or is identical to anInterface. -* If searchHierarchy is true, then also search the receiver's superclasses. -* -* NOTE: Assume that anInterface is an interface. -*/ - -public boolean implementsInterface(ReferenceBinding anInterface, boolean searchHierarchy) { - if (this == anInterface) - return true; - - ReferenceBinding[][] interfacesToVisit = new ReferenceBinding[5][]; - int lastPosition = -1; - ReferenceBinding currentType = this; - do { - ReferenceBinding[] itsInterfaces = currentType.superInterfaces(); - if (itsInterfaces != NoSuperInterfaces) { - if (++lastPosition == interfacesToVisit.length) - System.arraycopy(interfacesToVisit, 0, interfacesToVisit = new ReferenceBinding[lastPosition * 2][], 0, lastPosition); - interfacesToVisit[lastPosition] = itsInterfaces; - } - } while (searchHierarchy && (currentType = currentType.superclass()) != null); - - for (int i = 0; i <= lastPosition; i++) { - ReferenceBinding[] interfaces = interfacesToVisit[i]; - for (int j = 0, length = interfaces.length; j < length; j++) { - if ((currentType = interfaces[j]) == anInterface) - return true; - - ReferenceBinding[] itsInterfaces = currentType.superInterfaces(); - if (itsInterfaces != NoSuperInterfaces) { - if (++lastPosition == interfacesToVisit.length) - System.arraycopy(interfacesToVisit, 0, interfacesToVisit = new ReferenceBinding[lastPosition * 2][], 0, lastPosition); - interfacesToVisit[lastPosition] = itsInterfaces; - } - } - } - return false; -} -// Internal method... assume its only sent to classes NOT interfaces - -boolean implementsMethod(MethodBinding method) { - ReferenceBinding type = this; - while (type != null) { - MethodBinding[] methods = type.getMethods(method.selector); - for (int i = methods.length; --i >= 0;) - if (methods[i].areParametersEqual(method)) - return true; - type = type.superclass(); - } - return false; -} -/* Answer true if the receiver is an abstract type -*/ - -public final boolean isAbstract() { - return (modifiers & AccAbstract) != 0; -} -public final boolean isAnonymousType() { - return (tagBits & IsAnonymousType) != 0; -} -public final boolean isBinaryBinding() { - return (tagBits & IsBinaryBinding) != 0; -} -public final boolean isClass() { - return (modifiers & AccInterface) == 0; -} -/* Answer true if the receiver type can be assigned to the argument type (right) -*/ - -public boolean isCompatibleWith(TypeBinding right) { - if (right == this) - return true; - if (right.id == T_Object) - return true; - if (!(right instanceof ReferenceBinding)) - return false; - - ReferenceBinding referenceBinding = (ReferenceBinding) right; - if (referenceBinding.isInterface()) - return implementsInterface(referenceBinding, true); - if (isInterface()) // Explicit conversion from an interface to a class is not allowed - return false; - return referenceBinding.isSuperclassOf(this); -} -/* Answer true if the receiver has default visibility -*/ - -public final boolean isDefault() { - return (modifiers & (AccPublic | AccProtected | AccPrivate)) == 0; -} -/* Answer true if the receiver is a deprecated type -*/ - -public final boolean isDeprecated() { - return (modifiers & AccDeprecated) != 0; -} -/* Answer true if the receiver is final and cannot be subclassed -*/ - -public final boolean isFinal() { - return (modifiers & AccFinal) != 0; -} -public final boolean isInterface() { - return (modifiers & AccInterface) != 0; -} -public final boolean isLocalType() { - return (tagBits & IsLocalType) != 0; -} -public final boolean isMemberType() { - return (tagBits & IsMemberType) != 0; -} -public final boolean isNestedType() { - return (tagBits & IsNestedType) != 0; -} -/* Answer true if the receiver has private visibility -*/ - -public final boolean isPrivate() { - return (modifiers & AccPrivate) != 0; -} -/* Answer true if the receiver has private visibility and is used locally -*/ - -public final boolean isPrivateUsed() { - return (modifiers & AccPrivateUsed) != 0; -} -/* Answer true if the receiver has protected visibility -*/ - -public final boolean isProtected() { - return (modifiers & AccProtected) != 0; -} -/* Answer true if the receiver has public visibility -*/ - -public final boolean isPublic() { - return (modifiers & AccPublic) != 0; -} -/* Answer true if the receiver is a static member type (or toplevel) - */ - -public final boolean isStatic() { - return (modifiers & (AccStatic | AccInterface)) != 0 || - (tagBits & IsNestedType) == 0; -} -/* Answer true if all float operations must adher to IEEE 754 float/double rules -*/ - -public final boolean isStrictfp() { - return (modifiers & AccStrictfp) != 0; -} -/* Answer true if the receiver is in the superclass hierarchy of aType -* -* NOTE: Object.isSuperclassOf(Object) -> false -*/ - -public boolean isSuperclassOf(ReferenceBinding type) { - do { - if (this == (type = type.superclass())) return true; - } while (type != null); - - return false; -} -/* Answer true if the receiver is deprecated (or any of its enclosing types) -*/ - -public final boolean isViewedAsDeprecated() { - return (modifiers & AccDeprecated) != 0 || - (modifiers & AccDeprecatedImplicitly) != 0; -} -public ReferenceBinding[] memberTypes() { - return NoMemberTypes; -} -public MethodBinding[] methods() { - return NoMethods; -} -/** -* Answer the source name for the type. -* In the case of member types, as the qualified name from its top level type. -* For example, for a member type N defined inside M & A: "A.M.N". -*/ - -public char[] qualifiedSourceName() { - if (isMemberType()) - return CharOperation.concat(enclosingType().qualifiedSourceName(), sourceName(), '.'); - return sourceName(); -} - -public char[] readableName() /*java.lang.Object*/ { - if (isMemberType()) - return CharOperation.concat(enclosingType().readableName(), sourceName, '.'); - return CharOperation.concatWith(compoundName, '.'); -} - -public char[] shortReadableName() /*Object*/ { - if (isMemberType()) - return CharOperation.concat(enclosingType().shortReadableName(), sourceName, '.'); - return sourceName; -} - -/* Answer the receiver's signature. -* -* NOTE: This method should only be used during/after code gen. -*/ - -public char[] signature() /* Ljava/lang/Object; */ { - if (signature != null) - return signature; - - return signature = CharOperation.concat('L', constantPoolName(), ';'); -} -public char[] sourceName() { - return sourceName; -} -public ReferenceBinding superclass() { - return null; -} -public ReferenceBinding[] superInterfaces() { - return NoSuperInterfaces; -} -public ReferenceBinding[] syntheticEnclosingInstanceTypes() { - if (isStatic()) return null; - - ReferenceBinding enclosingType = enclosingType(); - if (enclosingType == null) - return null; - return new ReferenceBinding[] {enclosingType}; -} -public SyntheticArgumentBinding[] syntheticOuterLocalVariables() { - return null; // is null if no enclosing instances are required -} -MethodBinding[] unResolvedMethods() { // for the MethodVerifier so it doesn't resolve types - return methods(); -} -}