package instantiation fixed (resolution of class/object implementation superclasses)
1.1 --- a/mdr/src/org/netbeans/mdr/NBMDRepositoryImpl.java Fri Apr 04 14:53:24 2003 +0000
1.2 +++ b/mdr/src/org/netbeans/mdr/NBMDRepositoryImpl.java Fri Apr 04 18:04:45 2003 +0000
1.3 @@ -363,7 +363,7 @@
1.4 } catch (RuntimeException e) {
1.5 throw (CreationFailedException) Logger.getDefault().annotate(new CreationFailedException("Cannot instantiate package because of unexpected exception: " + e), e);
1.6 }
1.7 -
1.8 +
1.9 classProxies = null;
1.10 associationProxies = null;
1.11 classProxiesMofIds = null;
1.12 @@ -543,9 +543,9 @@
1.13 Logger.getDefault().log("new package: " + newPackage.getMofId() + ", metapackage: " + metaPackage.refMofId());
1.14
1.15 Set localAssocProxies = new HashSet();
1.16 - Map localClassProxies = new HashMap();
1.17 + List localClassProxies = new ArrayList();
1.18 instantiatePackageContent(metaPackage, newPackage, clusteredInstances, localClassProxies, localAssocProxies, storageId);
1.19 - resolveSuperclasses(localClassProxies);
1.20 + resolveSuperclasses(metaPackage, localClassProxies);
1.21
1.22 // [PENDING] need to fix the mutex ordering and NPE and then uncomment this
1.23 /*
1.24 @@ -562,7 +562,7 @@
1.25 /**
1.26 * @param localClassProxies
1.27 */
1.28 - private void resolveSuperclasses(Map localClassProxies) {
1.29 + private void resolveSuperclasses(MofPackage metaPackage, List localClassProxies) {
1.30 StorableClass sc;
1.31 ModelElement me;
1.32 AssociationEnd end;
1.33 @@ -572,8 +572,7 @@
1.34
1.35 Map indexes = new HashMap ();
1.36 if (!localClassProxies.isEmpty ()) {
1.37 - MofClass mofClass = (MofClass) localClassProxies.keySet().iterator().next();
1.38 - ModelPackage modelPackage = (ModelPackage) mofClass.refOutermostPackage();
1.39 + ModelPackage modelPackage = (ModelPackage) metaPackage.refOutermostPackage();
1.40 Iterator iter = modelPackage.getTag ().refAllOfClass ().iterator ();
1.41 while (iter.hasNext ()) {
1.42 Tag tag = (Tag) iter.next ();
1.43 @@ -608,9 +607,13 @@
1.44 } // while
1.45 } // if
1.46
1.47 - for (Iterator it = localClassProxies.keySet().iterator(); it.hasNext();) {
1.48 - cls = (MofClass) it.next();
1.49 - sc = (StorableClass) localClassProxies.get(cls);
1.50 + for (Iterator it = localClassProxies.iterator(); it.hasNext();) {
1.51 + sc = (StorableClass) it.next();
1.52 + try {
1.53 + cls = (MofClass) BaseObjectHandler.getHandler(sc.getMetaObject());
1.54 + } catch (StorageException e) {
1.55 + throw (DebugException) Logger.getDefault().annotate(new DebugException(), e);
1.56 + }
1.57 for (Iterator supers = cls.getSupertypes().iterator(); supers.hasNext();) {
1.58 Object superMeta = supers.next();
1.59 current = ((StorableClass) classProxies.get(superMeta));
1.60 @@ -654,7 +657,18 @@
1.61 }
1.62 */
1.63 } // for
1.64 -
1.65 +
1.66 + Class iface[] = new Class[1];
1.67 + for (Iterator it = localClassProxies.iterator(); it.hasNext();) {
1.68 + sc = (StorableClass) it.next();
1.69 + try {
1.70 + iface[0] = null;
1.71 + sc.initInstanceSuperclass(iface);
1.72 + sc.initClassSuperclass(null);
1.73 + } catch (Exception e) {
1.74 + throw (DebugException) Logger.getDefault().annotate(new DebugException(), e);
1.75 + }
1.76 + }
1.77 }
1.78
1.79 /**
1.80 @@ -664,7 +678,7 @@
1.81 * @param localClassProxies
1.82 * @param localAssocProxies
1.83 */
1.84 - private void instantiatePackageContent(MofPackage metaPackage, StorablePackage newPackage, Map clusteredInstances, Map localClassProxies, Set localAssocProxies, String storageId) {
1.85 + private void instantiatePackageContent(MofPackage metaPackage, StorablePackage newPackage, Map clusteredInstances, List localClassProxies, Set localAssocProxies, String storageId) {
1.86 Iterator superTypes = metaPackage.allSupertypes().iterator();
1.87 boolean thisTypeNotProcessed = true;
1.88 while (thisTypeNotProcessed || superTypes.hasNext()) {
1.89 @@ -900,7 +914,7 @@
1.90 }
1.91
1.92 /** Creates handler for Class Proxy */
1.93 - private StorableClass createClassProxyHandler(MofClass metaObject, StorablePackage immediatePackage, Map localClassProxies) {
1.94 + private StorableClass createClassProxyHandler(MofClass metaObject, StorablePackage immediatePackage, List localClassProxies) {
1.95 ModelElement element;
1.96 StorableClass storable;
1.97 boolean classDerived = false;
1.98 @@ -983,7 +997,7 @@
1.99 immediatePackage.addClass(metaObject.getName(), storable.getMofId());
1.100 classProxies.put(metaObject, storable);
1.101 classProxiesMofIds.put(((BaseObjectHandler)metaObject)._getDelegate().getMofId(), storable.getMofId());
1.102 - localClassProxies.put(metaObject, storable);
1.103 + localClassProxies.add(storable);
1.104 return storable;
1.105 } catch ( StorageException e ) {
1.106 throw (DebugException) Logger.getDefault().annotate(new DebugException(), e);
2.1 --- a/mdr/src/org/netbeans/mdr/persistence/btreeimpl/btreestorage/BtreeDataFile.java Fri Apr 04 14:53:24 2003 +0000
2.2 +++ b/mdr/src/org/netbeans/mdr/persistence/btreeimpl/btreestorage/BtreeDataFile.java Fri Apr 04 18:04:45 2003 +0000
2.3 @@ -579,7 +579,6 @@
2.4 public void prepareToCommit() throws StorageException {
2.5 if (!dirty)
2.6 return;
2.7 -
2.8 CachedPage page = cache.getPage(fileIndex, 0);
2.9 try {
2.10 page.setWritable();
2.11 @@ -615,6 +614,7 @@
2.12
2.13 /** allocate some number of objects using the persistent counter */
2.14 public synchronized long allocateObjects(int number) {
2.15 + if (number < 0) Thread.dumpStack();
2.16 counter += number;
2.17 dirty = true;
2.18 return counter;
2.19 @@ -640,6 +640,7 @@
2.20
2.21 /** Set value of counter. Used in transaction cache to perform rollback on mof id generator. */
2.22 void setMofIdCounter (long counter) {
2.23 + Thread.dumpStack();
2.24 this.counter = counter;
2.25 dirty = true;
2.26 }
3.1 --- a/mdr/src/org/netbeans/mdr/storagemodel/BootReader.java Fri Apr 04 14:53:24 2003 +0000
3.2 +++ b/mdr/src/org/netbeans/mdr/storagemodel/BootReader.java Fri Apr 04 18:04:45 2003 +0000
3.3 @@ -129,12 +129,31 @@
3.4 createProxies(xmiContent);
3.5 Collection result = createInstances(xmiContent);
3.6 rebuildMetas();
3.7 + initSuperClasses();
3.8 return result;
3.9 } catch (ParserConfigurationException e) {
3.10 Logger.getDefault().log("Unable to parse document. "+e.getMessage() );
3.11 return null;
3.12 }
3.13 }
3.14 +
3.15 + private void initSuperClasses() {
3.16 + Object sc;
3.17 + Class iface[] = new Class[1];
3.18 + for (Iterator it = proxyById.values().iterator(); it.hasNext();) {
3.19 + sc = it.next();
3.20 + if (sc instanceof StorableClass) {
3.21 + try {
3.22 + iface[0] = null;
3.23 + ((StorableClass) sc).initClassSuperclass(iface);
3.24 + iface[0] = null;
3.25 + ((StorableClass) sc).initInstanceSuperclass(iface);
3.26 + } catch (Exception e) {
3.27 + throw (DebugException) Logger.getDefault().annotate(new DebugException(), e);
3.28 + }
3.29 + }
3.30 + }
3.31 + }
3.32
3.33 /** Goes through the whole XMI document and creates all needed proxies
3.34 * (for all packages, classes and associations in the document).
3.35 @@ -805,8 +824,9 @@
3.36 if ((!(resolved.contains( classId ))) && (sc instanceof StorableClass) ) {
3.37 resolved.add( classId );
3.38 superclasses.addAll( getAllSuperClasses( classId ) );
3.39 + StorableClass storable = (StorableClass) sc;
3.40 for (Iterator foundSuperClasses = superclasses.iterator(); foundSuperClasses.hasNext(); ) {
3.41 - ((StorableClass)sc).addSuperclass( (MOFID)foundSuperClasses.next() );
3.42 + storable.addSuperclass( (MOFID)foundSuperClasses.next() );
3.43 }
3.44 }
3.45 }
4.1 --- a/mdr/src/org/netbeans/mdr/storagemodel/StorableClass.java Fri Apr 04 14:53:24 2003 +0000
4.2 +++ b/mdr/src/org/netbeans/mdr/storagemodel/StorableClass.java Fri Apr 04 18:04:45 2003 +0000
4.3 @@ -465,29 +465,18 @@
4.4 /**
4.5 * Returns the super-class for generated handler classes.
4.6 */
4.7 - public synchronized Class getClassSuperclass() throws StorageException, ClassNotFoundException {
4.8 - if (classSuperclass == null) {
4.9 - objectWillChange();
4.10 - classSuperclass = resolveClassSuperclass(new Class[1]).getName();
4.11 - objectChanged();
4.12 - }
4.13 + public Class getClassSuperclass() throws StorageException, ClassNotFoundException {
4.14 return resolveClass(classSuperclass);
4.15 }
4.16
4.17 public Class getClassCustomImpl() {
4.18 try {
4.19 - Class sup = getClassSuperclass();
4.20 - return sup == ClassProxyHandler.class ? null : sup;
4.21 + return getClassSuperclass();
4.22 } catch (Exception e) {}
4.23 return null;
4.24 }
4.25
4.26 - public synchronized Class getInstanceSuperclass() throws StorageException, ClassNotFoundException {
4.27 - if (instanceSuperclass == null) {
4.28 - objectWillChange();
4.29 - instanceSuperclass = resolveInstanceSuperclass(new Class[1]).getName();
4.30 - objectChanged();
4.31 - }
4.32 + public Class getInstanceSuperclass() throws StorageException, ClassNotFoundException {
4.33 return resolveClass(instanceSuperclass);
4.34 }
4.35
4.36 @@ -528,28 +517,36 @@
4.37 * <p>If non of the cases above applies, <code>ClassProxyHandler.class</code>
4.38 * is returned as default value.</p>
4.39 */
4.40 - private Class resolveClassSuperclass(Class iface[]) throws StorageException, ClassNotFoundException {
4.41 + public Class initClassSuperclass(Class iface[]) throws StorageException, ClassNotFoundException {
4.42 Class result = null;
4.43 - try {
4.44 - result = resolveClass(this, TagSupport.CLASS);
4.45 - iface[0] = resolveInterface(this, TagSupport.CLASS);
4.46 - } catch (ClassNotFoundException e) {
4.47 -// if (classDerived)
4.48 -// throw e;
4.49 - Class current;
4.50 - Class currentIface[] = new Class[1];
4.51 - for (Iterator it = superclasses.iterator(); it.hasNext();) {
4.52 - current = ((StorableClass) getMdrStorage().getObject((org.netbeans.mdr.persistence.MOFID) it.next())).resolveClassSuperclass(currentIface);
4.53 - if (result == null || iface[0] == null || iface[0].isAssignableFrom(currentIface[0])) {
4.54 - result = current;
4.55 - iface[0] = currentIface[0];
4.56 - } else if (!currentIface[0].isAssignableFrom(iface[0]))
4.57 - throw e;
4.58 + if (classSuperclass == null) {
4.59 + try {
4.60 + result = resolveClass(this, TagSupport.CLASS);
4.61 + // iface[0] = resolveInterface(this, TagSupport.CLASS);
4.62 + } catch (ClassNotFoundException e) {
4.63 + // if (classDerived)
4.64 + // throw e;
4.65 + // Class current;
4.66 + // Class currentIface[] = new Class[1];
4.67 + // for (Iterator it = superclasses.iterator(); it.hasNext();) {
4.68 + // current = ((StorableClass) getMdrStorage().getObject((org.netbeans.mdr.persistence.MOFID) it.next())).initClassSuperclass(currentIface);
4.69 + // if (result == null || iface[0] == null || iface[0].isAssignableFrom(currentIface[0])) {
4.70 + // result = current;
4.71 + // iface[0] = currentIface[0];
4.72 + // } else if (!currentIface[0].isAssignableFrom(iface[0])) {
4.73 + // throw e;
4.74 + // }
4.75 + // }
4.76 + // if (result == null) {
4.77 + result = ClassProxyHandler.class;
4.78 + // iface[0] = RefClass.class;
4.79 + // }
4.80 }
4.81 - if (result == null) {
4.82 - result = ClassProxyHandler.class;
4.83 - iface[0] = RefClass.class;
4.84 - }
4.85 + objectWillChange();
4.86 + classSuperclass = result.getName();
4.87 + objectChanged();
4.88 +// } else {
4.89 +// result = resolveClass(classSuperclass);
4.90 }
4.91 return result;
4.92 }
4.93 @@ -566,7 +563,7 @@
4.94 return BaseObjectHandler.resolveInterface(TagSupport.getTypeFullName(cls.getMetaObject(), type));
4.95 }
4.96
4.97 - private Class resolveInstanceSuperclass(Class iface[]) throws StorageException, ClassNotFoundException {
4.98 + public Class initInstanceSuperclass(Class iface[]) throws StorageException, ClassNotFoundException {
4.99 Class result = null;
4.100 try {
4.101 result = resolveClass(this, TagSupport.INSTANCE);
4.102 @@ -577,7 +574,7 @@
4.103 Class current;
4.104 Class currentIface[] = new Class[1];
4.105 for (Iterator it = superclasses.iterator(); it.hasNext();) {
4.106 - current = ((StorableClass) getMdrStorage().getObject((org.netbeans.mdr.persistence.MOFID) it.next())).resolveInstanceSuperclass(currentIface);
4.107 + current = ((StorableClass) getMdrStorage().getObject((org.netbeans.mdr.persistence.MOFID) it.next())).initInstanceSuperclass(currentIface);
4.108 if (result == null || iface[0] == null || iface[0].isAssignableFrom(currentIface[0])) {
4.109 result = current;
4.110 iface[0] = currentIface[0];
4.111 @@ -589,6 +586,11 @@
4.112 iface[0] = RefObject.class;
4.113 }
4.114 }
4.115 + if (instanceSuperclass == null) {
4.116 + objectWillChange();
4.117 + this.instanceSuperclass = result.getName();
4.118 + objectChanged();
4.119 + }
4.120 return result;
4.121 }
4.122