public static ActionScriptDecoder getDecoder()

in core/src/main/java/flex/messaging/io/amf/translator/decoder/DecoderFactory.java [113:175]


    public static ActionScriptDecoder getDecoder(Object encodedObject, Class desiredClass) {
        if (encodedObject != null) {
            // If we already have a suitable instance, return immediately!
            if (desiredClass.isAssignableFrom(encodedObject.getClass()))
                return nativeDecoder;

            if (String.class.equals(desiredClass))
                return stringDecoder;

            // We check Number and Boolean here as well as the encodedObejct == null case
            // as they're very common property types...
            if (isNumber(desiredClass))
                return numberDecoder;

            if (isBoolean(desiredClass))
                return booleanDecoder;

            if (Collection.class.isAssignableFrom(desiredClass))
                return collectionDecoder;

            if (Map.class.isAssignableFrom(desiredClass))
                return mapDecoder;

            if (desiredClass.isArray())
                return arrayDecoder;

            // Special Case - we have a typed ASObject and we're expecting it to
            // be converted into a new class... this would be an usual situation
            // for Mistral, however, since we now create strongly typed instances
            // from a stream
            if (isTypedObject(encodedObject))
                return typedObjectDecoder;

            if (Date.class.isAssignableFrom(desiredClass))
                return dateDecoder;

            if (Calendar.class.isAssignableFrom(desiredClass))
                return calendarDecoder;
        }

        // Null may have been sent to a primitive Java type, in which case
        // we create a default value, such as new Integer(0) for int rather
        // than create a null Integer() instance...
        if (isNumber(desiredClass))
            return numberDecoder;

        if (isBoolean(desiredClass))
            return booleanDecoder;

        if (isCharacter(desiredClass))
            return characterDecoder;

        if (encodedObject == null)
            return nullDecoder;

        if (desiredClass.isEnum())
            return enumDecoder;

        DecoderFactory.invalidType(encodedObject, desiredClass);

        // Never reached...
        return nativeDecoder;
    }