X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Feclipse%2Fjdt%2Finternal%2Fcompiler%2Flookup%2FTypeBinding.java;fp=src%2Forg%2Feclipse%2Fjdt%2Finternal%2Fcompiler%2Flookup%2FTypeBinding.java;h=c6cd627c2f1bdfde4b0b0e2499116f4d16fc9e61;hb=040fa5af2cd00017cf3575950cdaade34a6d7f6c;hp=0000000000000000000000000000000000000000;hpb=a580fb8376d315d05e4d6bfdff9ff1101a151cd6;p=org.ibex.tool.git diff --git a/src/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java b/src/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java new file mode 100644 index 0000000..c6cd627 --- /dev/null +++ b/src/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java @@ -0,0 +1,165 @@ +/******************************************************************************* + * 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; + +/* + * 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 TypeBinding extends Binding implements BaseTypes, TagBits, TypeConstants, TypeIds { + public int id = NoId; + public int tagBits = 0; // See values in the interface TagBits below +/* API + * Answer the receiver's binding type from Binding.BindingID. + */ + +public final int bindingType() { + return TYPE; +} +/* Answer true if the receiver can be instantiated + */ +public boolean canBeInstantiated() { + return !isBaseType(); +} +/** + * Answer the receiver's constant pool name. + * NOTE: This method should only be used during/after code gen. + * e.g. 'java/lang/Object' + */ +public abstract char[] constantPoolName(); + +String debugName() { + return new String(readableName()); +} +/* + * Answer the receiver's dimensions - 0 for non-array types + */ +public int dimensions(){ + return 0; +} +public abstract PackageBinding getPackage(); +/* Answer true if the receiver is an array +*/ + +public final boolean isArrayType() { + return (tagBits & IsArrayType) != 0; +} +/* Answer true if the receiver is a base type +*/ + +public final boolean isBaseType() { + return (tagBits & IsBaseType) != 0; +} +public boolean isClass() { + return false; +} +/* Answer true if the receiver type can be assigned to the argument type (right) +*/ + +public abstract boolean isCompatibleWith(TypeBinding right); +/* Answer true if the receiver's hierarchy has problems (always false for arrays & base types) +*/ + +public final boolean isHierarchyInconsistent() { + return (tagBits & HierarchyHasProblems) != 0; +} +public boolean isInterface() { + return false; +} +public final boolean isNumericType() { + switch (id) { + case T_int : + case T_float : + case T_double : + case T_short : + case T_byte : + case T_long : + case T_char : + return true; + default : + return false; + } +} + +public TypeBinding leafComponentType(){ + return this; +} + +/** + * Answer the qualified name of the receiver's package separated by periods + * or an empty string if its the default package. + * + * For example, {java.util.Hashtable}. + */ + +public char[] qualifiedPackageName() { + PackageBinding packageBinding = getPackage(); + return packageBinding == null || packageBinding.compoundName == CharOperation.NO_CHAR_CHAR + ? CharOperation.NO_CHAR + : packageBinding.readableName(); +} +/** +* 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 abstract char[] qualifiedSourceName(); +/* Answer the receiver's signature. +* +* Arrays & base types do not distinguish between signature() & constantPoolName(). +* +* NOTE: This method should only be used during/after code gen. +*/ + +public char[] signature() { + return constantPoolName(); +} +public abstract char[] sourceName(); + +/** + * Match a well-known type id to its binding + */ +public static final TypeBinding wellKnownType(Scope scope, int id) { + switch (id) { + case T_boolean : + return BooleanBinding; + case T_byte : + return ByteBinding; + case T_char : + return CharBinding; + case T_short : + return ShortBinding; + case T_double : + return DoubleBinding; + case T_float : + return FloatBinding; + case T_int : + return IntBinding; + case T_long : + return LongBinding; + case T_Object : + return scope.getJavaLangObject(); + case T_String : + return scope.getJavaLangString(); + default : + return null; + } + } +}