From 6bc45fd509a55b0b003a4e004335ac2d3e91377d Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Tue, 1 Apr 2014 18:14:22 -0400 Subject: Add sangria-core module. --- .../com/tavianator/sangria/core/PrettyTypes.java | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 sangria-core/src/main/java/com/tavianator/sangria/core/PrettyTypes.java (limited to 'sangria-core/src/main/java/com/tavianator/sangria/core/PrettyTypes.java') diff --git a/sangria-core/src/main/java/com/tavianator/sangria/core/PrettyTypes.java b/sangria-core/src/main/java/com/tavianator/sangria/core/PrettyTypes.java new file mode 100644 index 0000000..12721a4 --- /dev/null +++ b/sangria-core/src/main/java/com/tavianator/sangria/core/PrettyTypes.java @@ -0,0 +1,75 @@ +/********************************************************************* + * Sangria * + * Copyright (C) 2014 Tavian Barnes * + * * + * This library is free software. It comes without any warranty, to * + * the extent permitted by applicable law. You can redistribute it * + * and/or modify it under the terms of the Do What The Fuck You Want * + * To Public License, Version 2, as published by Sam Hocevar. See * + * the COPYING file or http://www.wtfpl.net/ for more details. * + *********************************************************************/ + +package com.tavianator.sangria.core; + +import com.google.inject.Key; + +/** + * Utility class for pretty-printing messages containing types. + * + * @author Tavian Barnes (tavianator@tavianator.com) + * @version 1.0 + * @since 1.0 + */ +public class PrettyTypes { + private PrettyTypes() { + // Not for instantiating + } + + /** + * Format a message. + * + * @param message The format string. + * @param args The format arguments, possibly containing {@link Class} or {@link Key} instances to be + * pretty-printed. + * @return A formatted message. + * @see String#format(String, Object...) + */ + public static String format(String message, Object... args) { + // This is like Guice's internal Errors.format() + Object[] prettyArgs = new Object[args.length]; + for (int i = 0; i < args.length; ++i) { + Object arg = args[i]; + Object prettyArg; + + if (arg instanceof Class) { + prettyArg = format((Class)arg); + } else if (arg instanceof Key) { + prettyArg = format((Key)arg); + } else { + prettyArg = arg; + } + + prettyArgs[i] = prettyArg; + } + + return String.format(message, prettyArgs); + } + + private static String format(Class type) { + return type.getCanonicalName(); + } + + private static String format(Key key) { + StringBuilder builder = new StringBuilder(key.getTypeLiteral().toString()); + if (key.getAnnotationType() != null) { + builder.append(" annotated with "); + if (key.getAnnotation() != null) { + builder.append(key.getAnnotation()); + } else { + builder.append("@") + .append(format(key.getAnnotationType())); + } + } + return builder.toString(); + } +} -- cgit v1.2.3