AttributeList.java revision 917cb222329ee8c035c3ffaf947e4265761b9367
1917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul/* 2917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Copyright (C) 2007 The Android Open Source Project 3917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 4917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Licensed under the Apache License, Version 2.0 (the "License"); 5917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * you may not use this file except in compliance with the License. 6917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * You may obtain a copy of the License at 7917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 8917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * http://www.apache.org/licenses/LICENSE-2.0 9917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 10917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Unless required by applicable law or agreed to in writing, software 11917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * distributed under the License is distributed on an "AS IS" BASIS, 12917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * See the License for the specific language governing permissions and 14917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * limitations under the License. 15917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 16917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 17917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulpackage com.android.dexgen.rop; 18917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 19917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul/** 20917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Interface for lists of attributes. 21917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 22917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulpublic interface AttributeList { 23917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 24917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Get whether this instance is mutable. Note that the 25917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * {@code AttributeList} interface itself doesn't provide any means 26917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * of mutation, but that doesn't mean that there isn't a non-interface 27917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * way of mutating an instance. 28917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 29917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code true} iff this instance is somehow mutable 30917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 31917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public boolean isMutable(); 32917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 33917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 34917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Get the number of attributes in the list. 35917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 36917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return the size 37917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 38917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public int size(); 39917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 40917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 41917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Get the {@code n}th attribute. 42917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 43917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @param n {@code n >= 0, n < size();} which attribute 44917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code non-null;} the attribute in question 45917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 46917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public Attribute get(int n); 47917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 48917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 49917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Get the total length of this list in bytes, when part of a 50917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * class file. The returned value includes the two bytes for the 51917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * {@code attributes_count} length indicator. 52917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 53917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code >= 2;} the total length, in bytes 54917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 55917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public int byteLength(); 56917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 57917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 58917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Get the first attribute in the list with the given name, if any. 59917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 60917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @param name {@code non-null;} attribute name 61917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code null-ok;} first attribute in the list with the given name, 62917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * or {@code null} if there is none 63917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 64917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public Attribute findFirst(String name); 65917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 66917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 67917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Get the next attribute in the list after the given one, with the same 68917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * name, if any. 69917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 70917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @param attrib {@code non-null;} attribute to start looking after 71917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code null-ok;} next attribute after {@code attrib} with the 72917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * same name as {@code attrib} 73917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 74917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public Attribute findNext(Attribute attrib); 75917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul} 76