diff --git a/java.project/src/org/netbeans/spi/java/project/support/ui/PackageViewChildren.java b/java.project/src/org/netbeans/spi/java/project/support/ui/PackageViewChildren.java --- a/java.project/src/org/netbeans/spi/java/project/support/ui/PackageViewChildren.java +++ b/java.project/src/org/netbeans/spi/java/project/support/ui/PackageViewChildren.java @@ -296,8 +296,7 @@ } while ( FileUtil.isParentOf( root, parent ) ) { - PackageNode n = get( parent ); - if ( n != null && n.isLeaf() ) { + if (isEmpty(parent)) { // System.out.println("Cleaning " + parent); remove( parent ); } @@ -354,6 +353,16 @@ } } + private boolean isEmpty( FileObject fo) { + String path = FileUtil.getRelativePath( root, fo ); + assert path != null : "Asking for wrong folder" + fo; + Object o = names2nodes.get( path ); + if (isNodeCreated(o)) { + return ((Node)o).isLeaf(); + } + return o == NODE_NOT_CREATED_EMPTY; + } + private PackageNode get( FileObject fo ) { String path = FileUtil.getRelativePath( root, fo ); assert path != null : "Asking for wrong folder" + fo; @@ -394,7 +403,7 @@ public void fileChanged( FileEvent fe ) {} - public void fileFolderCreated(final FileEvent fe ) { + public void fileFolderCreated(final FileEvent fe ) { FileObject fo = fe.getFile(); if ( FileUtil.isParentOf( root, fo ) && isVisible( root, fo ) ) { if (ProjectManager.mutex().isReadAccess() || ProjectManager.mutex().isWriteAccess()) { @@ -405,9 +414,11 @@ }); return; } - cleanEmptyKeys( fo ); + synchronized (names2nodes) { + cleanEmptyKeys( fo ); // add( fo, false); - findNonExcludedPackages( fo ); + findNonExcludedPackages( fo ); + } refreshKeysAsync(); } }