1 /* 2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. 3 * @LastModified: Oct 2017 4 */ 5 /* 6 * Licensed to the Apache Software Foundation (ASF) under one or more 7 * contributor license agreements. See the NOTICE file distributed with 8 * this work for additional information regarding copyright ownership. 9 * The ASF licenses this file to You under the Apache License, Version 2.0 10 * (the "License"); you may not use this file except in compliance with 11 * the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 */ 21 22 package com.sun.org.apache.xerces.internal.impl.xs.util; 23 24 import com.sun.org.apache.xerces.internal.xs.datatypes.ObjectList; 25 import java.lang.reflect.Array; 26 import java.util.AbstractList; 27 28 /** 29 * Contains a list of Objects. 30 * 31 * @xerces.internal 32 * 33 */ 34 @SuppressWarnings("unchecked") // method <T>toArray(T[]) 35 public final class ObjectListImpl extends AbstractList<Object> implements ObjectList { 36 37 /** 38 * An immutable empty list. 39 */ 40 public static final ObjectListImpl EMPTY_LIST = new ObjectListImpl(new Object[0], 0); 41 42 // The array to hold all data 43 private final Object[] fArray; 44 45 // Number of elements in this list 46 private final int fLength; 47 48 public ObjectListImpl(Object[] array, int length) { 49 fArray = array; 50 fLength = length; 51 } 52 53 public int getLength() { 54 return fLength; 55 } 56 57 public boolean contains(Object item) { 58 if (item == null) { 59 for (int i = 0; i < fLength; i++) { 60 if (fArray[i] == null) 61 return true; 62 } 63 } 64 else { 65 for (int i = 0; i < fLength; i++) { 66 if (item.equals(fArray[i])) 67 return true; 68 } 69 } 70 return false; 71 } 72 73 public Object item(int index) { 74 if (index < 0 || index >= fLength) { 75 return null; 76 } 77 return fArray[index]; 78 } 79 80 /* 81 * List methods 82 */ 83 public Object get(int index) { 84 if (index >= 0 && index < fLength) { 85 return fArray[index]; 86 } 87 throw new IndexOutOfBoundsException("Index: " + index); 88 } 89 90 public int size() { 91 return getLength(); 92 } 93 94 public Object[] toArray() { 95 Object[] a = new Object[fLength]; 96 toArray0(a); 97 return a; 98 } 99 100 public Object[] toArray(Object[] a) { 101 if (a.length < fLength) { 102 Class<?> arrayClass = a.getClass(); 103 Class<?> componentType = arrayClass.getComponentType(); 104 a = (Object[]) Array.newInstance(componentType, fLength); 105 } 106 toArray0(a); 107 if (a.length > fLength) { 108 a[fLength] = null; 109 } 110 return a; 111 } 112 113 private void toArray0(Object[] a) { 114 if (fLength > 0) { 115 System.arraycopy(fArray, 0, a, 0, fLength); 116 } 117 } 118 }