Package com.oracle.truffle.api.dsl

## Annotation Type TypeCheck

    @Retention(CLASS)
    @Target(METHOD)
    public @interface TypeCheck

Provides a way to define a custom type check for a defined type. The name of the annotated method must fit to the pattern is${typeName} (eg. isInteger), where ${typeName} must be a valid type defined in the parent `TypeSystem`. The annotated method must have exactly one argument where the type of the argument is the generic type `Object` or a more specific one from the `TypeSystem`. You can define multiple overloaded `TypeCheck` methods for the same type. This can be used to reduce the boxing overhead in type conversions.

By default the system generates type checks for all types in the parent `TypeSystem` which look like the follows:

     @TypeCheck
     boolean is${typeName}(Object value) {
             return value instanceof ${typeName};
     }

Example:

A type check for BigInteger with one overloaded optimized variant to reduce boxing.

     @TypeSystem(types = {int.class, BigInteger.class, String.class}, nodeBaseClass = TypedNode.class)
     public abstract class Types {

         @TypeCheck
         public boolean isBigInteger(Object value) {
             return value instanceof Integer || value instanceof BigInteger;
         }

         @TypeCheck
         public boolean isBigInteger(int value) {
             return true;
         }

     }