package instantiation fixed (resolution of class/object implementation superclasses) BLD200304061630
authormmatula@netbeans.org
Fri, 04 Apr 2003 18:04:45 +0000
changeset 1269281c0db79579
parent 1268 4e65936b55bc
child 1270 5d8fad0a2f16
package instantiation fixed (resolution of class/object implementation superclasses)
mdr/src/org/netbeans/mdr/NBMDRepositoryImpl.java
mdr/src/org/netbeans/mdr/persistence/btreeimpl/btreestorage/BtreeDataFile.java
mdr/src/org/netbeans/mdr/storagemodel/BootReader.java
mdr/src/org/netbeans/mdr/storagemodel/StorableClass.java
     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