Index: AbstractFolder.java =================================================================== RCS file: /cvs/openide/src/org/openide/filesystems/AbstractFolder.java,v retrieving revision 1.69 diff -r1.69 AbstractFolder.java 63c63 < private HashMap map; --- > private Map map; 204c204,205 < FileObject[] arr = new FileObject[size]; --- > //FileObject[] arr = new FileObject[size]; > ArrayList aList = new ArrayList(); 207c208,209 < arr[i] = getChild (children[i]); --- > FileObject f = getChild (children[i]); > if (f != null) aList.add(f); 210c212 < return arr; --- > return (FileObject [])aList.toArray(new FileObject [0]); 286c288,289 < map.put (name, createReference(fo)); --- > Reference reference = (fo != null) ? createReference(fo) : null; > map.put (name, reference); 313,326c316,332 < Iterator it = map.values ().iterator (); < ArrayList ll = new ArrayList(map.size() + 2); < while (it.hasNext ()) { < Reference r = (Reference)it.next (); < if (r == null) { < continue; < } < AbstractFolder fo = (AbstractFolder)r.get (); < if (fo != null /*&& (!fo.isFolder () || fo.map != null)*/) { < // if the file object exists and either is not folder (then < // we have to check the time) or it is folder and it has < // some children < // => use it < ll.add (fo); --- > ArrayList ll; > synchronized (map) { > Iterator it = map.values ().iterator (); > ll = new ArrayList(map.size() + 2); > while (it.hasNext ()) { > Reference r = (Reference)it.next (); > if (r == null) { > continue; > } > AbstractFolder fo = (AbstractFolder)r.get (); > if (fo != null /*&& (!fo.isFolder () || fo.map != null)*/) { > // if the file object exists and either is not folder (the n > // we have to check the time) or it is folder and it has > // some children > // => use it > ll.add (fo); > } 652c658 < HashMap m; --- > Map m; 661c667 < m = new HashMap (size * 4 / 3 + 1, 0.75f); --- > m = Collections.synchronizedMap(new HashMap (size * 4 / 3 + 1, 0.75f)); 701c707 < HashMap disappeared = null; --- > Map disappeared = null; 716,721c722,734 < disappeared = map; < Iterator it = map.entrySet ().iterator (); < while (it.hasNext ()) { < Map.Entry entry = (Map.Entry)it.next (); < // uses the value and replaces it immediatelly < entry.setValue (getChild ((String)entry.getKey ()) ); --- > disappeared = new HashMap (); > synchronized (map) { > Iterator it = map.entrySet ().iterator (); > while (it.hasNext ()) { > Map.Entry entry = (Map.Entry)it.next (); > // uses the value and replaces it immediatelly > String name = (String)entry.getKey (); > AbstractFolder child = getChild (name); > if (child != null) { > disappeared.put(name, child); > //entry.setValue (child); > } > } Index: MultiFileObject.java =================================================================== RCS file: /cvs/openide/src/org/openide/filesystems/MultiFileObject.java,v retrieving revision 1.113 diff -r1.113 MultiFileObject.java 389c389,390 < return new MultiFileObject (getMultiFileSystem (), this, name); --- > MultiFileObject retVal = new MultiFileObject (getMultiFileSystem (), t his, name); > return (retVal.leader.isValid()) ? retVal : null;