langtools/src/share/classes/com/sun/tools/apt/mirror/declaration/Constants.java
changeset 11914 d1311b0c757f
parent 11913 be61e1597cc6
parent 11872 c51754cddc03
child 11915 33f703959597
child 11986 6f383069eb6d
--- a/langtools/src/share/classes/com/sun/tools/apt/mirror/declaration/Constants.java	Tue Feb 21 05:44:29 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,294 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.tools.apt.mirror.declaration;
-
-
-import java.util.Collection;
-
-import com.sun.mirror.declaration.*;
-import com.sun.mirror.type.TypeMirror;
-import com.sun.tools.apt.mirror.type.TypeMirrorImpl;
-import com.sun.tools.javac.code.Type;
-
-import static com.sun.tools.javac.code.TypeTags.*;
-
-
-/**
- * Utility class for operating on constant expressions.
- */
-@SuppressWarnings("deprecation")
-class Constants {
-
-    /**
-     * Converts a constant in javac's internal representation (in which
-     * boolean, char, byte, short, and int are each represented by an Integer)
-     * into standard representation.  Other values (including null) are
-     * returned unchanged.
-     */
-    static Object decodeConstant(Object value, Type type) {
-        if (value instanceof Integer) {
-            int i = ((Integer) value).intValue();
-            switch (type.tag) {
-            case BOOLEAN:  return Boolean.valueOf(i != 0);
-            case CHAR:     return Character.valueOf((char) i);
-            case BYTE:     return Byte.valueOf((byte) i);
-            case SHORT:    return Short.valueOf((short) i);
-            }
-        }
-        return value;
-    }
-
-    /**
-     * Returns a formatter for generating the text of constant
-     * expressions.  Equivalent to
-     * <tt>getFormatter(new StringBuilder())</tt>.
-     */
-    static Formatter getFormatter() {
-        return new Formatter(new StringBuilder());
-    }
-
-    /**
-     * Returns a formatter for generating the text of constant
-     * expressions.  Also generates the text of constant
-     * "pseudo-expressions" for annotations and array-valued
-     * annotation elements.
-     *
-     * @param buf  where the expression is written
-     */
-    static Formatter getFormatter(StringBuilder buf) {
-        return new Formatter(buf);
-    }
-
-
-    /**
-     * Utility class used to generate the text of constant
-     * expressions.  Also generates the text of constant
-     * "pseudo-expressions" for annotations and array-valued
-     * annotation elements.
-     */
-    static class Formatter {
-
-        private StringBuilder buf;      // where the output goes
-
-        private Formatter(StringBuilder buf) {
-            this.buf = buf;
-        }
-
-
-        public String toString() {
-            return buf.toString();
-        }
-
-        /**
-         * Appends a constant whose type is not statically known
-         * by dispatching to the appropriate overloaded append method.
-         */
-        void append(Object val) {
-            if (val instanceof String) {
-                append((String) val);
-            } else if (val instanceof Character) {
-                append((Character) val);
-            } else if (val instanceof Boolean) {
-                append((Boolean) val);
-            } else if (val instanceof Byte) {
-                append((Byte) val);
-            } else if (val instanceof Short) {
-                append((Short) val);
-            } else if (val instanceof Integer) {
-                append((Integer) val);
-            } else if (val instanceof Long) {
-                append((Long) val);
-            } else if (val instanceof Float) {
-                append((Float) val);
-            } else if (val instanceof Double) {
-                append((Double) val);
-            } else if (val instanceof TypeMirror) {
-                append((TypeMirrorImpl) val);
-            } else if (val instanceof EnumConstantDeclaration) {
-                append((EnumConstantDeclarationImpl) val);
-            } else if (val instanceof AnnotationMirror) {
-                append((AnnotationMirrorImpl) val);
-            } else if (val instanceof Collection<?>) {
-                append((Collection<?>) val);
-            } else {
-                appendUnquoted(val.toString());
-            }
-        }
-
-        /**
-         * Appends a string, escaped (as needed) and quoted.
-         */
-        void append(String val) {
-            buf.append('"');
-            appendUnquoted(val);
-            buf.append('"');
-        }
-
-        /**
-         * Appends a Character, escaped (as needed) and quoted.
-         */
-        void append(Character val) {
-            buf.append('\'');
-            appendUnquoted(val.charValue());
-            buf.append('\'');
-        }
-
-        void append(Boolean val) {
-            buf.append(val);
-        }
-
-        void append(Byte val) {
-            buf.append(String.format("0x%02x", val));
-        }
-
-        void append(Short val) {
-            buf.append(val);
-        }
-
-        void append(Integer val) {
-            buf.append(val);
-        }
-
-        void append(Long val) {
-            buf.append(val).append('L');
-        }
-
-        void append(Float val) {
-            if (val.isNaN()) {
-                buf.append("0.0f/0.0f");
-            } else if (val.isInfinite()) {
-                if (val.floatValue() < 0) {
-                    buf.append('-');
-                }
-                buf.append("1.0f/0.0f");
-            } else {
-                buf.append(val).append('f');
-            }
-        }
-
-        void append(Double val) {
-            if (val.isNaN()) {
-                buf.append("0.0/0.0");
-            } else if (val.isInfinite()) {
-                if (val.doubleValue() < 0) {
-                    buf.append('-');
-                }
-                buf.append("1.0/0.0");
-            } else {
-                buf.append(val);
-            }
-        }
-
-        /**
-         * Appends the class literal corresponding to a type.  Should
-         * only be invoked for types that have an associated literal.
-         * e.g:  "java.lang.String.class"
-         *       "boolean.class"
-         *       "int[].class"
-         */
-        void append(TypeMirrorImpl t) {
-            appendUnquoted(t.type.toString());
-            buf.append(".class");
-        }
-
-        /**
-         * Appends the fully qualified name of an enum constant.
-         * e.g:  "java.math.RoundingMode.UP"
-         */
-        void append(EnumConstantDeclarationImpl e) {
-            appendUnquoted(e.sym.enclClass() + "." + e);
-        }
-
-        /**
-         * Appends the text of an annotation pseudo-expression.
-         * e.g:  "@pkg.Format(linesep='\n')"
-         */
-        void append(AnnotationMirrorImpl anno) {
-            appendUnquoted(anno.toString());
-        }
-
-        /**
-         * Appends the elements of a collection, enclosed within braces
-         * and separated by ", ".  Useful for array-valued annotation
-         * elements.
-         */
-        void append(Collection<?> vals) {
-            buf.append('{');
-            boolean first = true;
-            for (Object val : vals) {
-                if (first) {
-                    first = false;
-                } else {
-                    buf.append(", ");
-                }
-                append(((AnnotationValue) val).getValue());
-            }
-            buf.append('}');
-        }
-
-
-        /**
-         * For each char of a string, append using appendUnquoted(char).
-         */
-        private void appendUnquoted(String s) {
-            for (char c : s.toCharArray()) {
-                appendUnquoted(c);
-            }
-        }
-
-        /**
-         * Appends a char (unquoted), using escapes for those that are not
-         * printable ASCII.  We don't know what is actually printable in
-         * the locale in which this result will be used, so ASCII is our
-         * best guess as to the least common denominator.
-         */
-        private void appendUnquoted(char c) {
-            switch (c) {
-            case '\b': buf.append("\\b");  break;
-            case '\t': buf.append("\\t");  break;
-            case '\n': buf.append("\\n");  break;
-            case '\f': buf.append("\\f");  break;
-            case '\r': buf.append("\\r");  break;
-            case '\"': buf.append("\\\""); break;
-            case '\'': buf.append("\\\'"); break;
-            case '\\': buf.append("\\\\"); break;
-            default:
-                if (isPrintableAscii(c)) {
-                    buf.append(c);
-                } else {
-                    buf.append(String.format("\\u%04x", (int) c));
-                }
-            }
-        }
-
-        /**
-         * Is c a printable ASCII character?
-         */
-        private static boolean isPrintableAscii(char c) {
-            return c >= ' ' && c <= '~';
-        }
-    }
-}