FieldDefinition.java revision 6ef13753e78bb7abc7e7683d5e533c3395d4a9b6
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.dexlib.ClassDataItem;
32import org.jf.dexlib.FieldIdItem;
33import org.jf.dexlib.EncodedValue.EncodedValue;
34import org.jf.dexlib.util.AccessFlags;
35import org.jf.baksmali.Adaptors.EncodedValue.EncodedValueAdaptor;
36
37import java.util.List;
38import java.util.ArrayList;
39
40public class FieldDefinition {
41    private ClassDataItem.EncodedField encodedField;
42    private FieldIdItem fieldIdItem;
43    private EncodedValue initialValue;
44
45    public FieldDefinition(ClassDataItem.EncodedField encodedField) {
46        this(encodedField, null);
47    }
48
49    public FieldDefinition(ClassDataItem.EncodedField encodedField, EncodedValue initialValue) {
50        this.encodedField = encodedField;
51        this.fieldIdItem = encodedField.getFieldReference();
52        this.initialValue = initialValue;
53    }
54
55    private List<String> accessFlags = null;
56    public List<String> getAccessFlags() {
57        if (accessFlags == null) {
58            accessFlags = new ArrayList<String>();
59
60            for (AccessFlags accessFlag: AccessFlags.getAccessFlagsForField(encodedField.getAccessFlags())) {
61                accessFlags.add(accessFlag.toString());
62            }
63        }
64        return accessFlags;
65    }
66
67    private String fieldName = null;
68    public String getFieldName() {
69        if (fieldName == null) {
70            fieldName = fieldIdItem.getFieldName().getStringValue();
71        }
72        return fieldName;
73    }
74
75    private String fieldType = null;
76    public String getFieldType() {
77        if (fieldType == null) {
78            fieldType = fieldIdItem.getFieldType().getTypeDescriptor();
79        }
80        return fieldType;
81    }
82
83    private EncodedValueAdaptor encodedValueAdaptor = null;
84    public EncodedValueAdaptor getInitialValue() {
85        if (encodedValueAdaptor == null && initialValue != null) {
86            encodedValueAdaptor = EncodedValueAdaptor.make(initialValue);
87        }
88        return encodedValueAdaptor;
89    }
90}
91