langtools/src/jdk.compiler/share/classes/com/sun/tools/javap/AnnotationWriter.java
changeset 30848 c275389a3680
parent 30842 b02fa8bb730c
parent 30847 9385b9c8506b
child 30849 fcfa8eb95c23
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javap/AnnotationWriter.java	Thu May 28 16:13:55 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,291 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.javap;
-
-import com.sun.tools.classfile.Annotation;
-import com.sun.tools.classfile.TypeAnnotation;
-import com.sun.tools.classfile.Annotation.Annotation_element_value;
-import com.sun.tools.classfile.Annotation.Array_element_value;
-import com.sun.tools.classfile.Annotation.Class_element_value;
-import com.sun.tools.classfile.Annotation.Enum_element_value;
-import com.sun.tools.classfile.Annotation.Primitive_element_value;
-import com.sun.tools.classfile.ConstantPool;
-import com.sun.tools.classfile.ConstantPoolException;
-import com.sun.tools.classfile.Descriptor;
-import com.sun.tools.classfile.Descriptor.InvalidDescriptor;
-
-/**
- *  A writer for writing annotations as text.
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- */
-public class AnnotationWriter extends BasicWriter {
-    static AnnotationWriter instance(Context context) {
-        AnnotationWriter instance = context.get(AnnotationWriter.class);
-        if (instance == null)
-            instance = new AnnotationWriter(context);
-        return instance;
-    }
-
-    protected AnnotationWriter(Context context) {
-        super(context);
-        classWriter = ClassWriter.instance(context);
-        constantWriter = ConstantWriter.instance(context);
-    }
-
-    public void write(Annotation annot) {
-        write(annot, false);
-    }
-
-    public void write(Annotation annot, boolean resolveIndices) {
-        writeDescriptor(annot.type_index, resolveIndices);
-        boolean showParens = annot.num_element_value_pairs > 0 || !resolveIndices;
-        if (showParens)
-            print("(");
-        for (int i = 0; i < annot.num_element_value_pairs; i++) {
-            if (i > 0)
-                print(",");
-            write(annot.element_value_pairs[i], resolveIndices);
-        }
-        if (showParens)
-            print(")");
-    }
-
-    public void write(TypeAnnotation annot) {
-        write(annot, true, false);
-    }
-
-    public void write(TypeAnnotation annot, boolean showOffsets, boolean resolveIndices) {
-        write(annot.annotation, resolveIndices);
-        print(": ");
-        write(annot.position, showOffsets);
-    }
-
-    public void write(TypeAnnotation.Position pos, boolean showOffsets) {
-        print(pos.type);
-
-        switch (pos.type) {
-        // instanceof
-        case INSTANCEOF:
-        // new expression
-        case NEW:
-        // constructor/method reference receiver
-        case CONSTRUCTOR_REFERENCE:
-        case METHOD_REFERENCE:
-            if (showOffsets) {
-                print(", offset=");
-                print(pos.offset);
-            }
-            break;
-        // local variable
-        case LOCAL_VARIABLE:
-        // resource variable
-        case RESOURCE_VARIABLE:
-            if (pos.lvarOffset == null) {
-                print(", lvarOffset is Null!");
-                break;
-            }
-            print(", {");
-            for (int i = 0; i < pos.lvarOffset.length; ++i) {
-                if (i != 0) print("; ");
-                if (showOffsets) {
-                    print("start_pc=");
-                    print(pos.lvarOffset[i]);
-                }
-                print(", length=");
-                print(pos.lvarLength[i]);
-                print(", index=");
-                print(pos.lvarIndex[i]);
-            }
-            print("}");
-            break;
-        // exception parameter
-        case EXCEPTION_PARAMETER:
-            print(", exception_index=");
-            print(pos.exception_index);
-            break;
-        // method receiver
-        case METHOD_RECEIVER:
-            // Do nothing
-            break;
-        // type parameter
-        case CLASS_TYPE_PARAMETER:
-        case METHOD_TYPE_PARAMETER:
-            print(", param_index=");
-            print(pos.parameter_index);
-            break;
-        // type parameter bound
-        case CLASS_TYPE_PARAMETER_BOUND:
-        case METHOD_TYPE_PARAMETER_BOUND:
-            print(", param_index=");
-            print(pos.parameter_index);
-            print(", bound_index=");
-            print(pos.bound_index);
-            break;
-        // class extends or implements clause
-        case CLASS_EXTENDS:
-            print(", type_index=");
-            print(pos.type_index);
-            break;
-        // throws
-        case THROWS:
-            print(", type_index=");
-            print(pos.type_index);
-            break;
-        // method parameter
-        case METHOD_FORMAL_PARAMETER:
-            print(", param_index=");
-            print(pos.parameter_index);
-            break;
-        // type cast
-        case CAST:
-        // method/constructor/reference type argument
-        case CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT:
-        case METHOD_INVOCATION_TYPE_ARGUMENT:
-        case CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT:
-        case METHOD_REFERENCE_TYPE_ARGUMENT:
-            if (showOffsets) {
-                print(", offset=");
-                print(pos.offset);
-            }
-            print(", type_index=");
-            print(pos.type_index);
-            break;
-        // We don't need to worry about these
-        case METHOD_RETURN:
-        case FIELD:
-            break;
-        case UNKNOWN:
-            throw new AssertionError("AnnotationWriter: UNKNOWN target type should never occur!");
-        default:
-            throw new AssertionError("AnnotationWriter: Unknown target type for position: " + pos);
-        }
-
-        // Append location data for generics/arrays.
-        if (!pos.location.isEmpty()) {
-            print(", location=");
-            print(pos.location);
-        }
-    }
-
-    public void write(Annotation.element_value_pair pair) {
-        write(pair, false);
-    }
-
-    public void write(Annotation.element_value_pair pair, boolean resolveIndices) {
-        writeIndex(pair.element_name_index, resolveIndices);
-        print("=");
-        write(pair.value, resolveIndices);
-    }
-
-    public void write(Annotation.element_value value) {
-        write(value, false);
-    }
-
-    public void write(Annotation.element_value value, boolean resolveIndices) {
-        ev_writer.write(value, resolveIndices);
-    }
-
-    private void writeDescriptor(int index, boolean resolveIndices) {
-        if (resolveIndices) {
-            try {
-                ConstantPool constant_pool = classWriter.getClassFile().constant_pool;
-                Descriptor d = new Descriptor(index);
-                print(d.getFieldType(constant_pool));
-                return;
-            } catch (ConstantPoolException | InvalidDescriptor ignore) {
-            }
-        }
-
-        print("#" + index);
-    }
-
-    private void writeIndex(int index, boolean resolveIndices) {
-        if (resolveIndices) {
-            print(constantWriter.stringValue(index));
-        } else
-            print("#" + index);
-    }
-
-    element_value_Writer ev_writer = new element_value_Writer();
-
-    class element_value_Writer implements Annotation.element_value.Visitor<Void,Boolean> {
-        public void write(Annotation.element_value value, boolean resolveIndices) {
-            value.accept(this, resolveIndices);
-        }
-
-        public Void visitPrimitive(Primitive_element_value ev, Boolean resolveIndices) {
-            if (resolveIndices)
-                writeIndex(ev.const_value_index, resolveIndices);
-            else
-                print(((char) ev.tag) + "#" + ev.const_value_index);
-            return null;
-        }
-
-        public Void visitEnum(Enum_element_value ev, Boolean resolveIndices) {
-            if (resolveIndices) {
-                writeIndex(ev.type_name_index, resolveIndices);
-                print(".");
-                writeIndex(ev.const_name_index, resolveIndices);
-            } else
-                print(((char) ev.tag) + "#" + ev.type_name_index + ".#" + ev.const_name_index);
-            return null;
-        }
-
-        public Void visitClass(Class_element_value ev, Boolean resolveIndices) {
-            if (resolveIndices) {
-                writeIndex(ev.class_info_index, resolveIndices);
-                print(".class");
-            } else
-                print(((char) ev.tag) + "#" + ev.class_info_index);
-            return null;
-        }
-
-        public Void visitAnnotation(Annotation_element_value ev, Boolean resolveIndices) {
-            print((char) ev.tag);
-            AnnotationWriter.this.write(ev.annotation_value, resolveIndices);
-            return null;
-        }
-
-        public Void visitArray(Array_element_value ev, Boolean resolveIndices) {
-            print("[");
-            for (int i = 0; i < ev.num_values; i++) {
-                if (i > 0)
-                    print(",");
-                write(ev.values[i], resolveIndices);
-            }
-            print("]");
-            return null;
-        }
-
-    }
-
-    private ClassWriter classWriter;
-    private ConstantWriter constantWriter;
-}