1 19 20 package org.netbeans.modules.javacore.jmiimpl.javamodel; 21 22 import java.util.ArrayList ; 23 import java.util.AbstractList ; 24 import java.util.List ; 25 import org.netbeans.api.mdr.events.AttributeEvent; 26 import org.netbeans.jmi.javamodel.TypeClass; 27 import org.netbeans.jmi.javamodel.Type; 28 import org.netbeans.modules.javacore.parser.TypeRef; 29 30 33 public class TypeList extends AbstractList { 34 protected final List innerList; 35 protected final SemiPersistentElement parent; 36 37 public TypeList(SemiPersistentElement parent) { 38 this(parent, new ArrayList ()); 39 } 40 41 public TypeList(SemiPersistentElement parent, ArrayList innerList) { 42 this.parent = parent; 43 this.innerList = innerList; 44 } 45 46 public Object get(int index) { 47 return wrap(innerList.get(index)); 48 } 49 50 public Object remove(int index) { 51 try { 52 fireChange(AttributeEvent.EVENT_ATTRIBUTE_REMOVE, null, index); 53 return wrap(innerList.remove(index)); 54 } finally { 55 updateParent(); 56 } 57 } 58 59 public void add(int index, Object element) { 60 try { 61 TypeRef tr = unwrap(element); 62 fireChange(AttributeEvent.EVENT_ATTRIBUTE_ADD, tr, index); 63 innerList.add(index, tr); 64 } finally { 65 updateParent(); 66 } 67 } 68 69 public Object set(int index, Object element) { 70 try { 71 TypeRef tr = unwrap(element); 72 fireChange(AttributeEvent.EVENT_ATTRIBUTE_SET, tr, index); 73 return wrap(innerList.set(index, tr)); 74 } finally { 75 updateParent(); 76 } 77 } 78 79 public int size() { 80 return innerList.size(); 81 } 82 83 private TypeRef unwrap(Object element) { 84 return SemiPersistentElement.typeToTypeRef((Type) element); 85 } 86 87 private Object wrap(Object o) { 88 return parent.resolveType((TypeRef) o); 89 } 90 91 void addTypeRef(TypeRef typeRef) { 92 innerList.add(typeRef); 93 } 94 95 protected void fireChange(int attrType, TypeRef newValue, int position) { 96 } 97 98 protected void updateParent() { 99 } 100 } 101 | Popular Tags |