diff -r 3c00e093bbe4 core.startup/src/org/netbeans/core/startup/layers/ParsingLayerCacheManager.java --- a/core.startup/src/org/netbeans/core/startup/layers/ParsingLayerCacheManager.java Mon Dec 17 15:43:27 2012 +0100 +++ b/core.startup/src/org/netbeans/core/startup/layers/ParsingLayerCacheManager.java Mon Dec 17 16:46:18 2012 +0100 @@ -222,20 +222,21 @@ fileOrFolder(qname, attrs); } else if (qname.equals("file")) { MemFileOrFolder mfof = fileOrFolder(qname, attrs); - if (!(mfof instanceof MemFile)) { // a collision between modules - throw new ClassCastException("mfof: " + mfof + " stack: " + curr); // NOI18N + if (!(mfof instanceof MemFile)) { + // a collision between modules + } else { + buf.setLength(0); + ref = null; + String u = attrs.getValue("url"); + if (u != null) { + try { + ref = new URL(base, u); + } catch (MalformedURLException mfue) { + throw (SAXException) new SAXException(mfue.toString()).initCause(mfue); + } + } + weight = 0; } - buf.setLength(0); - ref = null; - String u = attrs.getValue("url"); - if (u != null) { - try { - ref = new URL(base, u); - } catch (MalformedURLException mfue) { - throw (SAXException) new SAXException(mfue.toString()).initCause(mfue); - } - } - weight = 0; } else if (qname.equals("attr")) { attrCount++; MemAttr attr = new MemAttr(); @@ -341,8 +342,9 @@ } public void endElement(String ns, String lname, String qname) throws SAXException { - if (qname.equals("file")) { - MemFile file = (MemFile) curr.peek(); + Object poke; + if (qname.equals("file") && (poke = curr.peek()) instanceof MemFile) { + MemFile file = (MemFile) poke; if (weight /* #23609: reversed, so not > */>= file.weight) { file.weight = weight; file.contents = null; diff -r 3c00e093bbe4 core.startup/test/unit/src/org/netbeans/core/startup/layers/CacheManagerTestBaseHid.java --- a/core.startup/test/unit/src/org/netbeans/core/startup/layers/CacheManagerTestBaseHid.java Mon Dec 17 15:43:27 2012 +0100 +++ b/core.startup/test/unit/src/org/netbeans/core/startup/layers/CacheManagerTestBaseHid.java Mon Dec 17 16:46:18 2012 +0100 @@ -145,12 +145,12 @@ List urls = Arrays.asList( loadResource("data/folder2.xml"), loadResource("data/folder1.xml")); - try { - FileSystem f = BinaryCacheManagerTest.store(m, urls); - fail("Should throw an exception"); - } catch (IOException ex) { - // OK, collision - } + + FileSystem f = BinaryCacheManagerTest.store(m, urls); + final FileObject fld = f.findResource("folder"); + + assertTrue("Is folder", fld.isFolder()); + assertEquals("No content", 0, fld.getSize()); } private void checkLastModified (FileSystem f, String file, String resource) throws Exception { diff -r 3c00e093bbe4 o.n.bootstrap/test/unit/data/layers/data/folder2.xml --- a/o.n.bootstrap/test/unit/data/layers/data/folder2.xml Mon Dec 17 15:43:27 2012 +0100 +++ b/o.n.bootstrap/test/unit/data/layers/data/folder2.xml Mon Dec 17 16:46:18 2012 +0100 @@ -1,5 +1,5 @@ - + NotEmpty \ No newline at end of file diff -r 3c00e093bbe4 openide.filesystems/src/org/openide/filesystems/XMLFileSystem.java --- a/openide.filesystems/src/org/openide/filesystems/XMLFileSystem.java Mon Dec 17 15:43:27 2012 +0100 +++ b/openide.filesystems/src/org/openide/filesystems/XMLFileSystem.java Mon Dec 17 16:46:18 2012 +0100 @@ -615,7 +615,7 @@ private boolean isFolder; private String uri; - public ResourceElem(boolean isFolder, URL[] urlContext) { + public ResourceElem(boolean isFolder, URL... urlContext) { this.isFolder = isFolder; this.urlContext.addAll(Arrays.asList(urlContext)); @@ -625,19 +625,12 @@ } } - public ResourceElem(boolean isFolder, URL urlContext) { - this.isFolder = isFolder; - this.urlContext.add(urlContext); - - if (isFolder) { + ResourceElem addChild(String name, ResourceElem child) { + if (!isFolder) { children = new ArrayList(); names = new ArrayList(); - } - } - - ResourceElem addChild(String name, ResourceElem child) { - if (!isFolder) { - throw new IllegalArgumentException("not a folder"); // NOI18N + content = null; + isFolder = true; } assert name != null && name.indexOf("/") == -1:(child.isFolder ? " arr = Arrays.asList(r.getChildren()); + assertEquals("Four " + arr, 4, arr.size()); // org.openide.filesystems.resources.layer.xml, test-layer-1.xml, test-layer-2.xml, test/generated-layer.xml assertNotNull(r.getFileObject("foo")); assertNotNull(r.getFileObject("bar")); }