AnnotationEncodedValueAdaptor.java revision 4b72225e9d81201838f387171a68a832486903f9
10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/*
20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * [The "BSD licence"]
30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Copyright (c) 2010 Ben Gruver (JesusFreke)
40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * All rights reserved.
50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Redistribution and use in source and binary forms, with or without
70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * modification, are permitted provided that the following conditions
80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * are met:
90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * 1. Redistributions of source code must retain the above copyright
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *    notice, this list of conditions and the following disclaimer.
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright
120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *    notice, this list of conditions and the following disclaimer in the
130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *    documentation and/or other materials provided with the distribution.
140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * 3. The name of the author may not be used to endorse or promote products
150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *    derived from this software without specific prior written permission.
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochpackage org.jf.baksmali.Adaptors.EncodedValue;
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochimport org.jf.baksmali.Adaptors.ReferenceFormatter;
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochimport org.jf.util.IndentingWriter;
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochimport org.jf.dexlib.EncodedValue.AnnotationEncodedSubValue;
340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochimport java.io.IOException;
360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochpublic abstract class AnnotationEncodedValueAdaptor {
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public static void writeTo(IndentingWriter writer, AnnotationEncodedSubValue encodedAnnotation)
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                               throws IOException {
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        writer.write(".subannotation ");
420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        ReferenceFormatter.writeTypeReference(writer, encodedAnnotation.annotationType);
430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        writer.write('\n');
440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        writeElementsTo(writer, encodedAnnotation);
460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        writer.write(".end subannotation");
470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    }
480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public static void writeElementsTo(IndentingWriter writer, AnnotationEncodedSubValue encodedAnnotation)
500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                                throws IOException {
510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        writer.indent(4);
520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        for (int i=0; i<encodedAnnotation.names.length; i++) {
530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            writer.write(encodedAnnotation.names[i].getStringValue());
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            writer.write(" = ");
550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            EncodedValueAdaptor.writeTo(writer, encodedAnnotation.values[i]);
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            writer.write('\n');
580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        }
590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        writer.deindent(4);
600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    }
610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch