edu.mit.ai.psg.jeva
Class TypeMethods

java.lang.Object
  |
  +--edu.mit.ai.psg.jeva.TypeMethods

public class TypeMethods
extends Object

Predicates and Methods for testing and comparing types. General type operations operate on type IClass, which includes both interpreted and wrapped compiled classes. Numeric type operations operaton only on type Class, since there are no interpreted numeric types.

Author:
CarlManning, caroma@ai.mit.edu
Copyright (c) 1997, 1998, 1999 Massachusetts Institute of Technology

Field Summary
static IClass booleanIClass
           
static IClass byteIClass
           
static IClass charIClass
           
static IClass ClassIClass
           
static IClass CloneableIClass
           
static IClass doubleIClass
           
static IClass ErrorIClass
           
static IClass floatIClass
           
static IClass intIClass
           
static IClass longIClass
           
static IClass NumberIClass
           
static IClass ObjectIClass
           
static IClass RuntimeExceptionIClass
           
static IClass shortIClass
           
static IClass StringIClass
           
static IClass ThrowableIClass
           
static IClass voidIClass
           
 
Constructor Summary
TypeMethods()
           
 
Method Summary
static IClass binaryCombineBitwiseTypes(Token operator, IClass cX, IClass cY)
           
static IClass binaryCombineNumericTypes(Token operator, IClass cX, IClass cY)
           
static IClass binaryCombineShiftTypes(Token operator, IClass leftType, IClass rightType)
           
static Class binaryPromoteType(Class cX, Class cY)
          [JavaLangSpec1.0 sec 5.6.2 Binary Numeric Promotion]
static boolean canNarrowPrimitive(Class to, Class from)
          [JavaLangSpec1.0 sec 5.1.3 Narrowing Primitive Conversions]
static boolean canNarrowPrimitiveConstant(Class receivingType, Class exprType, IExpressionNode expr, IEnv env)
          [JavaLangSpec1.0 sec 5.2, 15.24] check if expr is integer constant that fits in char, short, or byte.
static boolean canNarrowReference(IClass to, IClass from)
          [JavaLangSpec1.0 sec 5.1.5 Narrowing Reference Conversions] Uses i.isAssignableFrom(c) to test c implements interface i
static boolean canWidenPrimitive(Class to, Class from)
          [JavaLangSpec1.0 sec 5.1.2 Widening Primitive Conversions]
static boolean canWidenPrimitive(IClass to, IClass from)
           
static boolean canWidenReference(Class to, Class from)
          [JavaLangSpec1.0 sec 5.1.4 Widening Reference Conversions] null used as class of null, can be assigned to any Reference type, so more general than to.isAssignableFrom(from)
static boolean canWidenReference(IClass to, IClass from)
          implements isAssignableFrom for interpreted classes by searching
static void checkCastTypes(IClass castType, IClass exprType)
          check for impermissible casts.
static IClass getIClass(Object obj)
          get IClass for implementation class of object
static boolean isAbstractClass(IClass aClass)
           
static boolean isApplicable(IClass[] parameterTypes, IClass[] argExprTypes)
           
static boolean isApplicable(IConstructor constructor, IClass[] argExprTypes)
           
static boolean isApplicable(IMethod method, IClass[] argExprTypes)
          [JavaLangSpec 15.11.2.1 Find Methods that are applicable (& accessible)] Accessibility is not a concern, since only public methods are accessible through reflection (not necessarily true in Java1.2).
static boolean isAssignable(IClass receivingIClass, IExpressionNode expr, IEnv env)
           
static boolean isAssignableType(Class receivingType, Class exprType, IExpressionNode expr, IEnv env)
          [JavaLangSpec1.0 sec 5.2 Assignment Conversion] This checks for primitive as well as reference widenings.
static boolean isBindableType(Class receivingType, Class exprType)
          [JavaLangSpec1.0 sec 5.3 Method Invocation Conversion]
static boolean isBindableType(IClass receivingIClass, IClass exprIClass)
           
static boolean isCaughtOrDeclaredException(IClass exceptionClass, IClass[] caughtOrDeclareds)
           
static boolean isClassType(IClass type)
           
static boolean isFinalClass(IClass aClass)
           
static boolean isImplementation(IClass sub, IClass anInterface)
           
static boolean isIntegralType(Class type)
           
static boolean isIntegralType(IClass type)
           
static boolean isIntExpression(IExpressionNode expr, IEnv env)
          Check that array dims/indexes are int [JavaLangSpec1.0 sec15.9, 15.12]
static boolean isMoreSpecific(IConstructor c1, IConstructor c2)
           
static boolean isMoreSpecific(IMethod m1, IMethod m2)
          [JavaLangSpec 15.11.2.2 Choose Most Specific Method] assumes method name matches
static boolean isNumericType(Class type)
           
static boolean isNumericType(IClass type)
           
static boolean isReferenceType(Class type)
           
static boolean isReferenceType(IClass type)
           
static boolean isSubclass(IClass sub, IClass aSuper)
           
static boolean isSubinterface(IClass sub, IClass aSuper)
           
static boolean isUncheckedException(IClass exceptionClass)
           
static IClass makeArrayType(IClass baseType, int nDims)
           
static IClass nameToPrimitiveIClass(String name)
           
static Class nameToPrimitiveType(String name)
           
static IClass toPrimitiveIClass(IClass wrapperType)
           
static Class toPrimitiveType(Class wrapperType)
           
static String toSourceString(Class type)
           
static String toSourceString(IClass type)
          Return source code declaration string for class even if it is an array, e.g., "int[][]" instead of "[[I", which is what type.getName() returns
static Class unaryPromoteType(Class type)
          [JavaLangSpec1.0 sec 5.6.1 Unary Numeric Promotion]
static IClass unaryPromoteType(IClass type)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ObjectIClass

public static final IClass ObjectIClass

ClassIClass

public static final IClass ClassIClass

StringIClass

public static final IClass StringIClass

CloneableIClass

public static final IClass CloneableIClass

NumberIClass

public static final IClass NumberIClass

booleanIClass

public static final IClass booleanIClass

intIClass

public static final IClass intIClass

longIClass

public static final IClass longIClass

doubleIClass

public static final IClass doubleIClass

floatIClass

public static final IClass floatIClass

charIClass

public static final IClass charIClass

byteIClass

public static final IClass byteIClass

shortIClass

public static final IClass shortIClass

voidIClass

public static final IClass voidIClass

ThrowableIClass

public static final IClass ThrowableIClass

ErrorIClass

public static final IClass ErrorIClass

RuntimeExceptionIClass

public static final IClass RuntimeExceptionIClass
Constructor Detail

TypeMethods

public TypeMethods()
Method Detail

isReferenceType

public static final boolean isReferenceType(Class type)

isReferenceType

public static final boolean isReferenceType(IClass type)

isClassType

public static final boolean isClassType(IClass type)

isNumericType

public static final boolean isNumericType(Class type)

isNumericType

public static final boolean isNumericType(IClass type)

isIntegralType

public static final boolean isIntegralType(Class type)

isIntegralType

public static final boolean isIntegralType(IClass type)

unaryPromoteType

public static final Class unaryPromoteType(Class type)
[JavaLangSpec1.0 sec 5.6.1 Unary Numeric Promotion]

unaryPromoteType

public static final IClass unaryPromoteType(IClass type)

binaryPromoteType

public static final Class binaryPromoteType(Class cX,
                                            Class cY)
[JavaLangSpec1.0 sec 5.6.2 Binary Numeric Promotion]

binaryCombineNumericTypes

public static final IClass binaryCombineNumericTypes(Token operator,
                                                     IClass cX,
                                                     IClass cY)
Throws:
IllegalArgumentException - if given non-numeric type

binaryCombineBitwiseTypes

public static final IClass binaryCombineBitwiseTypes(Token operator,
                                                     IClass cX,
                                                     IClass cY)
Throws:
IllegalArgumentException - if given non-numeric non-boolean type

binaryCombineShiftTypes

public static final IClass binaryCombineShiftTypes(Token operator,
                                                   IClass leftType,
                                                   IClass rightType)
Throws:
IllegalArgumentException - if given non-integral types

isAssignableType

public static final boolean isAssignableType(Class receivingType,
                                             Class exprType,
                                             IExpressionNode expr,
                                             IEnv env)
                                      throws VerifyingException
[JavaLangSpec1.0 sec 5.2 Assignment Conversion] This checks for primitive as well as reference widenings.

isAssignable

public static final boolean isAssignable(IClass receivingIClass,
                                         IExpressionNode expr,
                                         IEnv env)
                                  throws VerifyingException

isBindableType

public static final boolean isBindableType(Class receivingType,
                                           Class exprType)
[JavaLangSpec1.0 sec 5.3 Method Invocation Conversion]

isBindableType

public static final boolean isBindableType(IClass receivingIClass,
                                           IClass exprIClass)

canWidenPrimitive

public static final boolean canWidenPrimitive(Class to,
                                              Class from)
[JavaLangSpec1.0 sec 5.1.2 Widening Primitive Conversions]

canWidenPrimitive

public static final boolean canWidenPrimitive(IClass to,
                                              IClass from)

canNarrowPrimitiveConstant

public static final boolean canNarrowPrimitiveConstant(Class receivingType,
                                                       Class exprType,
                                                       IExpressionNode expr,
                                                       IEnv env)
                                                throws VerifyingException
[JavaLangSpec1.0 sec 5.2, 15.24] check if expr is integer constant that fits in char, short, or byte.

canNarrowPrimitive

public static final boolean canNarrowPrimitive(Class to,
                                               Class from)
[JavaLangSpec1.0 sec 5.1.3 Narrowing Primitive Conversions]

canWidenReference

public static final boolean canWidenReference(Class to,
                                              Class from)
[JavaLangSpec1.0 sec 5.1.4 Widening Reference Conversions] null used as class of null, can be assigned to any Reference type, so more general than to.isAssignableFrom(from)

canWidenReference

public static final boolean canWidenReference(IClass to,
                                              IClass from)
implements isAssignableFrom for interpreted classes by searching

isFinalClass

public static final boolean isFinalClass(IClass aClass)

isAbstractClass

public static final boolean isAbstractClass(IClass aClass)

isSubinterface

public static final boolean isSubinterface(IClass sub,
                                           IClass aSuper)

isSubclass

public static final boolean isSubclass(IClass sub,
                                       IClass aSuper)

isImplementation

public static final boolean isImplementation(IClass sub,
                                             IClass anInterface)

canNarrowReference

public static final boolean canNarrowReference(IClass to,
                                               IClass from)
[JavaLangSpec1.0 sec 5.1.5 Narrowing Reference Conversions] Uses i.isAssignableFrom(c) to test c implements interface i

toPrimitiveType

public static final Class toPrimitiveType(Class wrapperType)

toPrimitiveIClass

public static final IClass toPrimitiveIClass(IClass wrapperType)

nameToPrimitiveType

public static final Class nameToPrimitiveType(String name)
                                       throws ClassNotFoundException

nameToPrimitiveIClass

public static final IClass nameToPrimitiveIClass(String name)
                                          throws ClassNotFoundException

toSourceString

public static final String toSourceString(IClass type)
Return source code declaration string for class even if it is an array, e.g., "int[][]" instead of "[[I", which is what type.getName() returns

toSourceString

public static final String toSourceString(Class type)

makeArrayType

public static final IClass makeArrayType(IClass baseType,
                                         int nDims)

checkCastTypes

public static final void checkCastTypes(IClass castType,
                                        IClass exprType)
check for impermissible casts. [JavaLangSpec1.0 sec 5.4 Casting Conversion] Throws ClassCastException if a check fails. Many type mismatches are compile time errors, not runtime errors, so caller may want to catch the ClassCastException and throw an IllegalTypeException instead.

isApplicable

public static final boolean isApplicable(IMethod method,
                                         IClass[] argExprTypes)
[JavaLangSpec 15.11.2.1 Find Methods that are applicable (& accessible)] Accessibility is not a concern, since only public methods are accessible through reflection (not necessarily true in Java1.2).

isApplicable

public static final boolean isApplicable(IConstructor constructor,
                                         IClass[] argExprTypes)

isApplicable

public static final boolean isApplicable(IClass[] parameterTypes,
                                         IClass[] argExprTypes)

isMoreSpecific

public static final boolean isMoreSpecific(IMethod m1,
                                           IMethod m2)
[JavaLangSpec 15.11.2.2 Choose Most Specific Method] assumes method name matches

isMoreSpecific

public static final boolean isMoreSpecific(IConstructor c1,
                                           IConstructor c2)

isIntExpression

public static final boolean isIntExpression(IExpressionNode expr,
                                            IEnv env)
                                     throws VerifyingException
Check that array dims/indexes are int [JavaLangSpec1.0 sec15.9, 15.12]

isUncheckedException

public static boolean isUncheckedException(IClass exceptionClass)

isCaughtOrDeclaredException

public static boolean isCaughtOrDeclaredException(IClass exceptionClass,
                                                  IClass[] caughtOrDeclareds)

getIClass

public static IClass getIClass(Object obj)
get IClass for implementation class of object

Copyright (c) 1996-1999
Massachusetts Institute of Technology

Feedback: jeva-bugs@ai.mit.edu