EncodedValueAdaptor.java revision 280fc21738416a1bb1f11643770f67b4f0be0351
1/* 2 * [The "BSD licence"] 3 * Copyright (c) 2009 Ben Gruver 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29package org.jf.baksmali.Adaptors.EncodedValue; 30 31import org.jf.dexlib.EncodedValue.*; 32import org.jf.dexlib.StringIdItem; 33import org.jf.dexlib.TypeIdItem; 34import org.jf.dexlib.MethodIdItem; 35import org.jf.dexlib.FieldIdItem; 36import org.jf.baksmali.Adaptors.Reference.*; 37 38public abstract class EncodedValueAdaptor { 39 public static EncodedValueAdaptor make(EncodedValue encodedValue) { 40 switch (encodedValue.getValueType()) { 41 case VALUE_ANNOTATION: 42 return new AnnotationEncodedValueAdaptor((AnnotationEncodedValueSubField)encodedValue.getValue()); 43 case VALUE_ARRAY: 44 return new ArrayEncodedValueAdaptor((ArrayEncodedValueSubField)encodedValue.getValue()); 45 case VALUE_BOOLEAN: 46 return new SimpleEncodedValueAdaptor(((BoolEncodedValueSubField)encodedValue.getValue()).getValue()); 47 case VALUE_BYTE: 48 return new SimpleEncodedValueAdaptor(((ByteEncodedValueSubField)encodedValue.getValue()).getValue()); 49 case VALUE_CHAR: 50 return new SimpleEncodedValueAdaptor(((CharEncodedValueSubField)encodedValue.getValue()).getValue()); 51 case VALUE_DOUBLE: 52 return new SimpleEncodedValueAdaptor(((DoubleEncodedValueSubField)encodedValue.getValue()).getValue()); 53 case VALUE_ENUM: 54 EncodedIndexedItemReference enumEncodedReference = (EncodedIndexedItemReference)encodedValue.getValue(); 55 return new EnumEncodedValueAdaptor(new FieldReference((FieldIdItem)enumEncodedReference.getValue())); 56 case VALUE_FIELD: 57 EncodedIndexedItemReference fieldEncodedReference = (EncodedIndexedItemReference)encodedValue.getValue(); 58 return new EncodedIndexedItemAdaptor(new FieldReference((FieldIdItem)fieldEncodedReference.getValue())); 59 case VALUE_FLOAT: 60 return new SimpleEncodedValueAdaptor(((FloatEncodedValueSubField)encodedValue.getValue()).getValue()); 61 case VALUE_INT: 62 return new SimpleEncodedValueAdaptor(((IntEncodedValueSubField)encodedValue.getValue()).getValue()); 63 case VALUE_LONG: 64 return new SimpleEncodedValueAdaptor(((LongEncodedValueSubField)encodedValue.getValue()).getValue()); 65 case VALUE_METHOD: 66 EncodedIndexedItemReference methodEncodedReference = (EncodedIndexedItemReference)encodedValue.getValue(); 67 return new EncodedIndexedItemAdaptor(new MethodReference((MethodIdItem)methodEncodedReference.getValue())); 68 case VALUE_NULL: 69 return new SimpleEncodedValueAdaptor("null"); 70 case VALUE_SHORT: 71 return new SimpleEncodedValueAdaptor(((ShortEncodedValueSubField)encodedValue.getValue()).getValue()); 72 case VALUE_STRING: 73 EncodedIndexedItemReference stringEncodedReference = (EncodedIndexedItemReference)encodedValue.getValue(); 74 return new EncodedIndexedItemAdaptor(new StringReference((StringIdItem)stringEncodedReference.getValue())); 75 case VALUE_TYPE: 76 EncodedIndexedItemReference typeEncodedReference = (EncodedIndexedItemReference)encodedValue.getValue(); 77 return new EncodedIndexedItemAdaptor(new TypeReference((TypeIdItem)typeEncodedReference.getValue())); 78 } 79 return null; 80 } 81 82 public abstract String getFormat(); 83 84 public abstract Object getValue(); 85} 86