RawAttribute.java revision 2ad60cfc28e14ee8f0bb038720836a4696c478ad
1/* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.dx.cf.attrib; 18 19import com.android.dx.rop.cst.ConstantPool; 20import com.android.dx.util.ByteArray; 21 22/** 23 * Raw attribute, for holding onto attributes that are unrecognized. 24 */ 25public final class RawAttribute extends BaseAttribute { 26 /** non-null; attribute data */ 27 private final ByteArray data; 28 29 /** 30 * null-ok; constant pool to use for resolution of cpis in {@link 31 * #data} 32 */ 33 private final ConstantPool pool; 34 35 /** 36 * Constructs an instance. 37 * 38 * @param name non-null; attribute name 39 * @param data non-null; attribute data 40 * @param pool null-ok; constant pool to use for cpi resolution 41 */ 42 public RawAttribute(String name, ByteArray data, ConstantPool pool) { 43 super(name); 44 45 if (data == null) { 46 throw new NullPointerException("data == null"); 47 } 48 49 this.data = data; 50 this.pool = pool; 51 } 52 53 /** 54 * Constructs an instance from a sub-array of a {@link ByteArray}. 55 * 56 * @param name non-null; attribute name 57 * @param data non-null; array containing the attribute data 58 * @param offset offset in <code>data</code> to the attribute data 59 * @param length length of the attribute data, in bytes 60 * @param pool null-ok; constant pool to use for cpi resolution 61 */ 62 public RawAttribute(String name, ByteArray data, int offset, 63 int length, ConstantPool pool) { 64 this(name, data.slice(offset, offset + length), pool); 65 } 66 67 /** 68 * Get the raw data of the attribute. 69 * 70 * @return non-null; the data 71 */ 72 public ByteArray getData() { 73 return data; 74 } 75 76 /** {@inheritDoc} */ 77 public int byteLength() { 78 return data.size() + 6; 79 } 80 81 /** 82 * Gets the constant pool to use for cpi resolution, if any. It 83 * presumably came from the class file that this attribute came 84 * from. 85 * 86 * @return null-ok; the constant pool 87 */ 88 public ConstantPool getPool() { 89 return pool; 90 } 91} 92