FieldDefinition.java revision bf4ca730cc857f76ee703e9efa73ad3e408c6c37
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; 30 31import org.jf.baksmali.Adaptors.EncodedValue.EncodedValueAdaptor; 32import org.jf.dexlib.ClassDataItem; 33import org.jf.dexlib.EncodedValue.EncodedValue; 34import org.jf.dexlib.FieldIdItem; 35import org.jf.dexlib.AnnotationSetItem; 36import org.jf.dexlib.AnnotationItem; 37import org.jf.dexlib.Util.AccessFlags; 38 39import java.util.ArrayList; 40import java.util.List; 41 42public class FieldDefinition { 43 private ClassDataItem.EncodedField encodedField; 44 private FieldIdItem fieldIdItem; 45 private EncodedValue initialValue; 46 private AnnotationSetItem annotationSet; 47 48 public FieldDefinition(ClassDataItem.EncodedField encodedField, AnnotationSetItem annotationSet) { 49 this(encodedField, null, annotationSet); 50 } 51 52 public FieldDefinition(ClassDataItem.EncodedField encodedField, EncodedValue initialValue, 53 AnnotationSetItem annotationSet) { 54 this.encodedField = encodedField; 55 this.fieldIdItem = encodedField.getField(); 56 this.initialValue = initialValue; 57 this.annotationSet = annotationSet; 58 } 59 60 private List<String> accessFlags = null; 61 public List<String> getAccessFlags() { 62 if (accessFlags == null) { 63 accessFlags = new ArrayList<String>(); 64 65 for (AccessFlags accessFlag: AccessFlags.getAccessFlagsForField(encodedField.getAccessFlags())) { 66 accessFlags.add(accessFlag.toString()); 67 } 68 } 69 return accessFlags; 70 } 71 72 private String fieldName = null; 73 public String getFieldName() { 74 if (fieldName == null) { 75 fieldName = fieldIdItem.getFieldName().getStringValue(); 76 } 77 return fieldName; 78 } 79 80 private String fieldType = null; 81 public String getFieldType() { 82 if (fieldType == null) { 83 fieldType = fieldIdItem.getFieldType().getTypeDescriptor(); 84 } 85 return fieldType; 86 } 87 88 private EncodedValueAdaptor encodedValueAdaptor = null; 89 public EncodedValueAdaptor getInitialValue() { 90 if (encodedValueAdaptor == null && initialValue != null) { 91 encodedValueAdaptor = EncodedValueAdaptor.make(initialValue); 92 } 93 return encodedValueAdaptor; 94 } 95 96 public List<AnnotationAdaptor> getAnnotations() { 97 if (annotationSet == null) { 98 return null; 99 } 100 101 List<AnnotationAdaptor> annotationAdaptors = new ArrayList<AnnotationAdaptor>(); 102 103 for (AnnotationItem annotationItem: annotationSet.getAnnotationItems()) { 104 annotationAdaptors.add(new AnnotationAdaptor(annotationItem)); 105 } 106 return annotationAdaptors; 107 } 108} 109