1 19 package org.netbeans.modules.javacore.jmiimpl.javamodel; 20 21 import java.util.Collection ; 22 import java.util.Collections ; 23 import javax.jmi.reflect.ConstraintViolationException; 24 import org.netbeans.jmi.javamodel.*; 25 import org.netbeans.mdr.handlers.ClassProxyHandler; 26 import org.netbeans.mdr.persistence.MOFID; 27 import org.netbeans.mdr.persistence.StorageException; 28 import org.netbeans.mdr.storagemodel.StorableBaseObject; 29 import org.netbeans.mdr.storagemodel.StorableClass; 30 import org.netbeans.mdr.util.DebugException; 31 32 36 public abstract class ArrayClassImpl extends ClassProxyHandler implements ArrayClass { 37 private static final String MOFID_PREFIX = "array:"; private static final InstanceMap allInstances = new InstanceMap(); 39 40 public ArrayClassImpl(StorableClass s) { 41 super(s); 42 } 43 44 public Array createArray() { 45 throw new ConstraintViolationException(this, refMetaObject(), "Cannot create instance of Array directly - use resolveArray instead."); } 47 48 public Array createArray(String name, java.util.List contents, org.netbeans.jmi.javamodel.MultipartId superClassName, java.util.List interfaceNames) { 49 throw new ConstraintViolationException(this, refMetaObject(), "Cannot create instance of Array directly - use resolveArray instead."); } 51 52 public Array resolveArray(Type type) { 53 if (type == null) return null; 54 _lock(false); 55 try { 56 ArrayImpl result = (ArrayImpl) allInstances.get(type); 57 if (result == null) { 58 try { 59 StorableBaseObject s = _getDelegate(); 61 MOFID mofId = new MOFID(type.hashCode(), MOFID_PREFIX + type.refMofId()); 62 DeferredObject o = new DeferredObject(mofId, s.getMdrStorage(), s.getImmediatePackageId(), s.getOutermostPackageId(), s.getMetaObject(), (StorableClass) s, null); 63 result = (ArrayImpl) _getRepository().getHandler(o); 64 result.type = type; 65 allInstances.put(type, result); 66 } catch (StorageException e) { 67 throw new DebugException(); 68 } 69 } 70 return result; 71 } finally { 72 _unlock(); 73 } 74 } 75 76 public org.netbeans.jmi.javamodel.Type resolve(java.lang.String name) { 77 JavaModelPackage pkg = (JavaModelPackage) refImmediatePackage(); 78 return pkg.getType().resolve(name); 79 } 80 81 protected Collection _allOfClass(boolean recursive) { 82 return Collections.unmodifiableCollection(allInstances.values()); 83 } 84 } 85 | Popular Tags |