package org.eclipse.jdt.internal.compiler.lookup; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved. | |
*/ | |
import org.eclipse.jdt.internal.compiler.impl.Constant; | |
public final class BaseTypeBinding extends TypeBinding { | |
public char[] simpleName; | |
private char [] constantPoolName; | |
BaseTypeBinding(int id, char[] name, char[] constantPoolName) { | |
this.tagBits |= IsBaseType; | |
this.id = id; | |
this.simpleName = name; | |
this.constantPoolName = constantPoolName; | |
} | |
/* Answer the receiver's constant pool name. | |
*/ | |
public char[] constantPoolName() { | |
return constantPoolName; | |
} | |
public PackageBinding getPackage() { | |
return null; | |
} | |
/* Answer true if the receiver type can be assigned to the argument type (right) | |
*/ | |
final boolean isCompatibleWith(TypeBinding right) { | |
if (this == right) | |
return true; | |
if (!right.isBaseType()) | |
return this == NullBinding; | |
switch (right.id) { | |
case T_boolean : | |
case T_byte : | |
case T_char : | |
return false; | |
case T_double : | |
switch (id) { | |
case T_byte : | |
case T_char : | |
case T_short : | |
case T_int : | |
case T_long : | |
case T_float : | |
return true; | |
default : | |
return false; | |
} | |
case T_float : | |
switch (id) { | |
case T_byte : | |
case T_char : | |
case T_short : | |
case T_int : | |
case T_long : | |
return true; | |
default : | |
return false; | |
} | |
case T_long : | |
switch (id) { | |
case T_byte : | |
case T_char : | |
case T_short : | |
case T_int : | |
return true; | |
default : | |
return false; | |
} | |
case T_int : | |
switch (id) { | |
case T_byte : | |
case T_char : | |
case T_short : | |
return true; | |
default : | |
return false; | |
} | |
case T_short : | |
return (id == T_byte); | |
} | |
return false; | |
} | |
public static final boolean isNarrowing(int left, int right) { | |
//can "left" store a "right" using some narrowing conversion | |
//(is left smaller than right) | |
switch (left) { | |
case T_boolean : | |
return right == T_boolean; | |
case T_char : | |
case T_byte : | |
if (right == T_byte) return true; | |
case T_short : | |
if (right == T_short) return true; | |
if (right == T_char) return true; | |
case T_int : | |
if (right == T_int) return true; | |
case T_long : | |
if (right == T_long) return true; | |
case T_float : | |
if (right == T_float) return true; | |
case T_double : | |
if (right == T_double) return true; | |
default : | |
return false; | |
} | |
} | |
public static final boolean isWidening(int left, int right) { | |
//can "left" store a "right" using some widening conversion | |
//(is left "bigger" than right) | |
switch (left) { | |
case T_boolean : | |
return right == T_boolean; | |
case T_char : | |
return right == T_char; | |
case T_double : | |
if (right == T_double) return true; | |
case T_float : | |
if (right == T_float) return true; | |
case T_long : | |
if (right == T_long) return true; | |
case T_int : | |
if (right == T_int) return true; | |
if (right == T_char) return true; | |
case T_short : | |
if (right == T_short) return true; | |
case T_byte : | |
if (right == T_byte) return true; | |
default : | |
return false; | |
} | |
} | |
public char[] qualifiedSourceName() { | |
return simpleName; | |
} | |
public char[] readableName() { | |
return simpleName; | |
} | |
public char[] sourceName() { | |
return simpleName; | |
} | |
public String toString() { | |
return new String(constantPoolName) + " (id="/*nonNLS*/ + id + ")"/*nonNLS*/; | |
} | |
} |