Index: FolderOrder.java =================================================================== RCS file: /cvs/openide/src/org/openide/loaders/FolderOrder.java,v retrieving revision 1.6 diff -u -t -r1.6 FolderOrder.java --- FolderOrder.java 27 Sep 2001 14:01:11 -0000 1.6 +++ FolderOrder.java 5 Oct 2001 17:44:20 -0000 @@ -37,10 +37,19 @@ /** a static map with (FileObject, Reference (Folder)) */ private static final WeakHashMap map = new WeakHashMap (101); + /** A static of known folder orders. Though we hold the + * FolderOrder with a soft reference which can be collected, even + * if this happens we would like the new FolderOrder to have any + * previously determined order attribute. Otherwise under obscure + * circumstances (#15381) it is possible for the IDE to go into an + * endless loop recalculating folder orders, since they keep + * getting collected. + */ + private static final Map knownOrders = Collections.synchronizedMap(new WeakHashMap(50)); // Map - /** map of primary files of objects to their index or null */ - private Map order; // Map + /** map of names of primary files of objects to their index or null */ + private Map order; // Map /** file to store data in */ private FileObject folder; /** if true, partial orderings on disk should be ignored for files in the order */ @@ -269,6 +278,9 @@ doRead (o); previous = o; + if (previous != null) { + knownOrders.put(folder, previous); + } FolderList.changedFolderOrder (folder); } @@ -384,6 +396,8 @@ FolderOrder order = ref == null ? null : (FolderOrder)ref.get (); if (order == null) { order = new FolderOrder (folder); + order.previous = knownOrders.get(folder); + order.doRead(order.previous); map.put (folder, new SoftReference (order)); }