Example usage for com.google.gwt.core.ext.typeinfo JParameterizedType isAssignableFrom

List of usage examples for com.google.gwt.core.ext.typeinfo JParameterizedType isAssignableFrom

Introduction

In this page you can find the example usage for com.google.gwt.core.ext.typeinfo JParameterizedType isAssignableFrom.

Prototype

boolean isAssignableFrom(JClassType possibleSubtype);

Source Link

Document

Returns true if this JClassType is assignable from the specified JClassType parameter.

Usage

From source file:com.hiramchirino.restygwt.rebind.JsonEncoderDecoderInstanceLocator.java

License:Apache License

private String encodeDecodeExpression(JType type, String expression, Style style, String encoderMethod,
        String mapMethod, String setMethod, String listMethod) throws UnableToCompleteException {

    if (null != type.isEnum()) {
        return type.getQualifiedSourceName() + ".valueOf(" + encodeDecodeExpression(STRING_TYPE, expression,
                style, encoderMethod, mapMethod, setMethod, listMethod);
    }//  w  w  w  . ja v  a 2 s .c  o  m

    String encoderDecoder = getEncoderDecoder(type, logger);
    if (encoderDecoder != null) {
        return encoderDecoder + "." + encoderMethod + "(" + expression + ")";
    }

    JClassType clazz = type.isClassOrInterface();
    if (isCollectionType(clazz)) {
        JParameterizedType parameterizedType = type.isParameterized();
        if (parameterizedType == null || parameterizedType.getTypeArgs() == null) {
            error("Collection types must be parameterized.");
        }
        JClassType[] types = parameterizedType.getTypeArgs();

        if (parameterizedType.isAssignableTo(MAP_TYPE)) {
            if (types.length != 2) {
                error("Map must define two and only two type parameters");
            }
            if (types[0] != STRING_TYPE) {
                error("Map's first type parameter must be of type String");
            }
            encoderDecoder = getEncoderDecoder(types[1], logger);
            if (encoderDecoder != null) {
                return mapMethod + "(" + expression + ", " + encoderDecoder + ", " + JSON_CLASS + ".Style."
                        + style.name() + ")";
            }
        } else if (parameterizedType.isAssignableTo(SET_TYPE)) {
            if (types.length != 1) {
                error("Set must define one and only one type parameter");
            }
            encoderDecoder = getEncoderDecoder(types[0], logger);
            if (encoderDecoder != null) {
                return setMethod + "(" + expression + ", " + encoderDecoder + ")";
            }
        } else if (parameterizedType.isAssignableFrom(LIST_TYPE)) {
            if (types.length != 1) {
                error("List must define one and only one type parameter");
            }
            encoderDecoder = getEncoderDecoder(types[0], logger);
            debug("type encoder for: " + types[0] + " is " + encoderDecoder);
            if (encoderDecoder != null) {
                return listMethod + "(" + expression + ", " + encoderDecoder + ")";
            }
        }
    }

    error("Do not know how to encode/decode " + type);
    return null;
}

From source file:org.fusesource.restygwt.rebind.JsonEncoderDecoderInstanceLocator.java

License:Apache License

private String encodeDecodeExpression(JType type, String expression, Style style, String encoderMethod,
        String mapMethod, String setMethod, String listMethod) throws UnableToCompleteException {

    if (null != type.isEnum()) {
        if (encoderMethod.equals("encode")) {
            return encodeDecodeExpression(STRING_TYPE, expression + ".toString()", style, encoderMethod,
                    mapMethod, setMethod, listMethod);
        } else {/*from  w  w  w. j  a  v  a2s.c  om*/
            return type.getQualifiedSourceName() + ".valueOf(" + encodeDecodeExpression(STRING_TYPE, expression,
                    style, encoderMethod, mapMethod, setMethod, listMethod) + ")";
        }
    }

    String encoderDecoder = getEncoderDecoder(type, logger);
    if (encoderDecoder != null) {
        return encoderDecoder + "." + encoderMethod + "(" + expression + ")";
    }

    JClassType clazz = type.isClassOrInterface();
    if (isCollectionType(clazz)) {
        JParameterizedType parameterizedType = type.isParameterized();
        if (parameterizedType == null || parameterizedType.getTypeArgs() == null) {
            error("Collection types must be parameterized.");
        }
        JClassType[] types = parameterizedType.getTypeArgs();

        if (parameterizedType.isAssignableTo(MAP_TYPE)) {
            if (types.length != 2) {
                error("Map must define two and only two type parameters");
            }
            if (types[0] != STRING_TYPE) {
                error("Map's first type parameter must be of type String");
            }
            encoderDecoder = getEncoderDecoder(types[1], logger);
            if (encoderDecoder != null) {
                return mapMethod + "(" + expression + ", " + encoderDecoder + ", " + JSON_CLASS + ".Style."
                        + style.name() + ")";
            }
        } else if (parameterizedType.isAssignableTo(SET_TYPE)) {
            if (types.length != 1) {
                error("Set must define one and only one type parameter");
            }
            encoderDecoder = getEncoderDecoder(types[0], logger);
            if (encoderDecoder != null) {
                return setMethod + "(" + expression + ", " + encoderDecoder + ")";
            }
        } else if (parameterizedType.isAssignableFrom(LIST_TYPE)) {
            if (types.length != 1) {
                error("List must define one and only one type parameter");
            }
            encoderDecoder = getEncoderDecoder(types[0], logger);
            debug("type encoder for: " + types[0] + " is " + encoderDecoder);
            if (encoderDecoder != null) {
                return listMethod + "(" + expression + ", " + encoderDecoder + ")";
            }
        }
    }

    error("Do not know how to encode/decode " + type);
    return null;
}