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.annotation; 18917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 19917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulimport com.android.dexgen.util.FixedSizeList; 20917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 21917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul/** 22917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * List of {@link Annotations} instances. 23917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 24917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulpublic final class AnnotationsList 25917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul extends FixedSizeList { 26917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** {@code non-null;} immutable empty instance */ 27917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public static final AnnotationsList EMPTY = new AnnotationsList(0); 28917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 29917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 30917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Constructs an immutable instance which is the combination of 31917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * the two given instances. The two instances must each have the 32917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * same number of elements, and each pair of elements must contain 33917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * disjoint sets of types. 34917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 35917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @param list1 {@code non-null;} an instance 36917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @param list2 {@code non-null;} the other instance 37917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code non-null;} the combination 38917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 39917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public static AnnotationsList combine(AnnotationsList list1, 40917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul AnnotationsList list2) { 41917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul int size = list1.size(); 42917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 43917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul if (size != list2.size()) { 44917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul throw new IllegalArgumentException("list1.size() != list2.size()"); 45917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul } 46917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 47917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul AnnotationsList result = new AnnotationsList(size); 48917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 49917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul for (int i = 0; i < size; i++) { 50917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul Annotations a1 = list1.get(i); 51917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul Annotations a2 = list2.get(i); 52917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul result.set(i, Annotations.combine(a1, a2)); 53917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul } 54917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 55917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul result.setImmutable(); 56917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul return result; 57917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul } 58917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 59917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 60917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Constructs an instance. All indices initially contain {@code null}. 61917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 62917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @param size the size of the list 63917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 64917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public AnnotationsList(int size) { 65917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul super(size); 66917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul } 67917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 68917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 69917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Gets the element at the given index. It is an error to call 70917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * this with the index for an element which was never set; if you 71917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * do that, this will throw {@code NullPointerException}. 72917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 73917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @param n {@code >= 0, < size();} which index 74917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code non-null;} element at that index 75917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 76917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public Annotations get(int n) { 77917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul return (Annotations) get0(n); 78917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul } 79917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 80917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 81917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Sets the element at the given index. The given element must be 82917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * immutable. 83917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 84917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @param n {@code >= 0, < size();} which index 85917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @param a {@code null-ok;} the element to set at {@code n} 86917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 87917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public void set(int n, Annotations a) { 88917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul a.throwIfMutable(); 89917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul set0(n, a); 90917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul } 91917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul} 92