Package javarepl.rendering

Source Code of javarepl.rendering.TypeRenderer

package javarepl.rendering;

import com.googlecode.totallylazy.Mapper;
import com.googlecode.totallylazy.annotations.multimethod;
import com.googlecode.totallylazy.multi;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;

import static com.googlecode.totallylazy.Sequences.sequence;
import static java.lang.String.format;
import static javarepl.Utils.extractType;

public class TypeRenderer {

    @multimethod
    public static String renderType(Type type) {
        Type extractedType = extractType(type);
        return new multi() {
        }.<String>methodOption(extractedType)
                .getOrElse(extractedType.toString());
    }

    @multimethod
    private static String renderType(Class type) {
        return type.getCanonicalName();
    }

    @multimethod
    private static String renderType(TypeVariable typeVariable) {
        return "Object";
    }

    @multimethod
    private static String renderType(ParameterizedType type) {
        return format("%s<%s>",
                renderType(type.getRawType()),
                sequence(type.getActualTypeArguments()).map(renderType()).toString(", "));
    }

    public static Mapper<Type, String> renderType() {
        return new Mapper<Type, String>() {
            public String call(Type type) throws Exception {
                return renderType(type);
            }
        };
    }
}
TOP

Related Classes of javarepl.rendering.TypeRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.