--- a/ant.debugger/src/org/netbeans/modules/ant/debugger/Utils.java +++ a/ant.debugger/src/org/netbeans/modules/ant/debugger/Utils.java @@ -65,7 +65,6 @@ import org.openide.cookies.EditorCookie; import org.openide.cookies.LineCookie; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; @@ -405,11 +404,7 @@ } InputSource in = new InputSource (new StringReader (w.toString ())); if (fo != null) { // #10348 - try { in.setSystemId (fo.getURL ().toExternalForm ()); - } catch (FileStateInvalidException e) { - assert false : e; - } // [PENDING] Ant's ProjectHelper has an elaborate set of work- // arounds for inconsistent parser behavior, e.g. file:foo.xml // works in Ant but not with Xerces parser. You must use just foo.xml --- a/ant.debugger/src/org/netbeans/modules/ant/debugger/breakpoints/BreakpointsReader.java +++ a/ant.debugger/src/org/netbeans/modules/ant/debugger/breakpoints/BreakpointsReader.java @@ -49,11 +49,9 @@ import java.net.MalformedURLException; import java.net.URL; import org.netbeans.api.debugger.Breakpoint; -import org.netbeans.api.debugger.DebuggerManager; import org.netbeans.api.debugger.Properties; import org.openide.cookies.LineCookie; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.URLMapper; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; @@ -105,7 +103,6 @@ AntBreakpoint b = (AntBreakpoint) object; FileObject fo = (FileObject) b.getLine ().getLookup (). lookup (FileObject.class); - try { properties.setString ("url", fo.getURL ().toString ()); properties.setInt ( "lineNumber", @@ -119,9 +116,6 @@ properties.setInt(Breakpoint.PROP_HIT_COUNT_FILTER, b.getHitCountFilter()); Breakpoint.HIT_COUNT_FILTERING_STYLE style = b.getHitCountFilteringStyle(); properties.setInt(Breakpoint.PROP_HIT_COUNT_FILTER+"_style", style != null ? style.ordinal() : 0); // NOI18N - } catch (FileStateInvalidException ex) { - ex.printStackTrace (); - } } --- a/api.debugger.jpda/src/org/netbeans/api/debugger/jpda/LineBreakpoint.java +++ a/api.debugger.jpda/src/org/netbeans/api/debugger/jpda/LineBreakpoint.java @@ -49,9 +49,7 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.Map; import java.util.WeakHashMap; import javax.swing.event.ChangeEvent; @@ -67,7 +65,6 @@ import org.openide.filesystems.FileEvent; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileRenameEvent; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.URLMapper; import org.openide.loaders.DataObject; import org.openide.util.NbBundle; @@ -518,11 +515,7 @@ } public void fileRenamed(FileRenameEvent fe) { - try { this.setURL(((FileObject) fe.getSource()).getURL().toString()); - } catch (FileStateInvalidException ex) { - ErrorManager.getDefault().notify(ex); - } } public void fileAttributeChanged(FileAttributeEvent fe) { @@ -562,11 +555,7 @@ FileObject newFO = ((DataObject) evt.getSource()).getPrimaryFile(); fileListener = WeakListeners.create(FileChangeListener.class, this, newFO); newFO.addFileChangeListener(fileListener); - try { this.setURL(newFO.getURL().toString()); - } catch (FileStateInvalidException ex) { - ErrorManager.getDefault().notify(ex); - } fo = newFO; DebuggerManager.getDebuggerManager().addBreakpoint(this); firePropertyChange(PROP_GROUP_PROPERTIES, null, null); --- a/api.java.classpath/nbproject/project.xml +++ a/api.java.classpath/nbproject/project.xml @@ -19,7 +19,7 @@ - 1.12 + 1.26 --- a/api.java.classpath/src/org/netbeans/api/java/classpath/ClassLoaderSupport.java +++ a/api.java.classpath/src/org/netbeans/api/java/classpath/ClassLoaderSupport.java @@ -68,12 +68,7 @@ } static ClassLoader create (final ClassPath cp, final ClassLoader parentClassLoader) { - try { - return new ClassLoaderSupport(cp, parentClassLoader); - } catch (FileStateInvalidException e) { - // Should not happen, we already trimmed unused roots: - throw new AssertionError(e); - } + return new ClassLoaderSupport(cp, parentClassLoader); } /** change listener */ @@ -97,7 +92,7 @@ /** Constructor that attaches itself to the filesystem pool. */ @SuppressWarnings("LeakingThisInConstructor") - private ClassLoaderSupport (final ClassPath cp, final ClassLoader parentClassLoader) throws FileStateInvalidException { + private ClassLoaderSupport (final ClassPath cp, final ClassLoader parentClassLoader) { super(cp.getRoots(), parentClassLoader, null); this.classPath = cp; --- a/api.java.classpath/src/org/netbeans/api/java/classpath/ClassPath.java +++ a/api.java.classpath/src/org/netbeans/api/java/classpath/ClassPath.java @@ -83,7 +83,6 @@ import org.openide.filesystems.FileEvent; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileRenameEvent; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.filesystems.URLMapper; import org.openide.util.Lookup; @@ -559,11 +558,7 @@ if (f.isFolder()) { path += "/"; // NOI18N } - try { - return filter.includes(root.getURL(), path); - } catch (FileStateInvalidException x) { - throw new AssertionError(x); - } + return filter.includes(root.getURL(), path); } /** @@ -1047,7 +1042,6 @@ f = findPath(roots[ridx], nameComponents); FilteringPathResourceImplementation filter = root2Filter.get(roots[ridx]); if (filter != null) { - try { if (f != null) { String path = FileUtil.getRelativePath(roots[ridx], f); assert path != null : String.format("FileUtil.getRelativePath(%s(%b),%s(%b)) returned null", @@ -1062,9 +1056,6 @@ f = null; } } - } catch (FileStateInvalidException x) { - throw new AssertionError(x); - } } } rootIndex[0] = ridx; --- a/api.java.classpath/src/org/netbeans/api/java/queries/BinaryForSourceQuery.java +++ a/api.java.classpath/src/org/netbeans/api/java/queries/BinaryForSourceQuery.java @@ -50,10 +50,8 @@ import org.netbeans.api.java.classpath.ClassPath; import org.netbeans.spi.java.queries.BinaryForSourceQueryImplementation; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.filesystems.URLMapper; -import org.openide.util.Exceptions; import org.openide.util.Lookup; /** @@ -138,13 +136,9 @@ for (ClassPath.Entry e : exec.entries()) { FileObject[] roots = SourceForBinaryQuery.findSourceRoots(e.getURL()).getRoots(); for (FileObject root : roots) { - try { if (sourceRoot.equals (root.getURL())) { result.add (e.getURL()); } - } catch (FileStateInvalidException fsie) { - Exceptions.printStackTrace(fsie); - } } } return result.toArray(new URL[result.size()]); --- a/api.java.classpath/src/org/netbeans/spi/java/classpath/support/ClassPathSupport.java +++ a/api.java.classpath/src/org/netbeans/spi/java/classpath/support/ClassPathSupport.java @@ -54,9 +54,7 @@ import java.net.URL; import java.util.List; import java.util.ArrayList; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; -import org.openide.util.Exceptions; /** * Convenience factory for creating classpaths of common sorts. @@ -124,12 +122,8 @@ if (root == null || !root.isValid()) { continue; } - try { URL u = root.getURL(); l.add(createResource(u)); - } catch (FileStateInvalidException e) { - Exceptions.printStackTrace (e); - } } return createClassPath (l); } --- a/api.java.classpath/test/unit/src/org/netbeans/api/java/classpath/GlobalPathRegistryTest.java +++ a/api.java.classpath/test/unit/src/org/netbeans/api/java/classpath/GlobalPathRegistryTest.java @@ -222,11 +222,7 @@ FileObject src2excluded1 = FileUtil.createData(src2, "excluded/file1"); class PRI extends PathResourceBase implements FilteringPathResourceImplementation { public URL[] getRoots() { - try { return new URL[] {src1.getURL()}; - } catch (FileStateInvalidException x) { - throw new AssertionError(x); - } } public boolean includes(URL root, String resource) { return resource.startsWith("incl"); --- a/api.xml/nbproject/project.xml +++ a/api.xml/nbproject/project.xml @@ -50,17 +50,33 @@ org.netbeans.api.xml + org.openide.filesystems + + + + 7.57 + + + org.openide.loaders - org.openide.filesystems + org.openide.nodes - 6.2 + 7.23 + + + + org.openide.text + + + + 6.16 @@ -79,22 +95,6 @@ 8.0 - - org.openide.nodes - - - - 7.23 - - - - org.openide.text - - - - 6.16 - - --- a/api.xml/src/org/netbeans/api/xml/parsers/DocumentInputSource.java +++ a/api.xml/src/org/netbeans/api/xml/parsers/DocumentInputSource.java @@ -46,7 +46,6 @@ import java.io.*; import java.net.URL; -import java.util.*; import javax.swing.text.Document; @@ -112,15 +111,10 @@ if (system == null) { Object obj = doc.getProperty(Document.StreamDescriptionProperty); if (obj instanceof DataObject) { - try { DataObject dobj = (DataObject) obj; FileObject fo = dobj.getPrimaryFile(); URL url = fo.getURL(); system = url.toExternalForm(); - } catch (IOException io) { - ErrorManager emgr = (ErrorManager) Lookup.getDefault().lookup(ErrorManager.class); - emgr.notify(io); - } } else { ErrorManager emgr = (ErrorManager) Lookup.getDefault().lookup(ErrorManager.class); emgr.log("XML:DocumentInputSource:Unknown stream description:" + obj); --- a/api.xml/src/org/netbeans/spi/xml/cookies/DataObjectAdapters.java +++ a/api.xml/src/org/netbeans/spi/xml/cookies/DataObjectAdapters.java @@ -45,9 +45,6 @@ package org.netbeans.spi.xml.cookies; import java.io.Reader; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; import javax.swing.text.Document; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; @@ -57,8 +54,6 @@ import org.netbeans.api.xml.parsers.DocumentInputSource; import org.netbeans.api.xml.services.UserCatalog; import org.openide.cookies.EditorCookie; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.loaders.DataObject; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; @@ -179,24 +174,7 @@ * @return system Id of dataObject */ private static String getSystemId (DataObject dataObject) { - String systemId = null; - try { - FileObject fileObject = dataObject.getPrimaryFile(); - URL url = fileObject.getURL(); - try { - systemId = new URI(url.toString()).toASCIIString(); - } catch (URISyntaxException ex) { - // if cannot be converted to URI, return at least external form - // instead of returning null - systemId = url.toExternalForm(); - Util.THIS.debug(ex); - } - } catch (FileStateInvalidException exc) { - if ( Util.THIS.isLoggable() ) /* then */ Util.THIS.debug (exc); - - // nothing to do -> return null; //??? - } - return systemId; + return dataObject.getPrimaryFile().toURI().toASCIIString(); } private static synchronized SAXParserFactory getSAXParserFactory () throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException { --- a/apisupport.ant/src/org/netbeans/modules/apisupport/project/queries/ClassPathProviderImpl.java +++ a/apisupport.ant/src/org/netbeans/modules/apisupport/project/queries/ClassPathProviderImpl.java @@ -72,9 +72,7 @@ import org.netbeans.spi.project.support.ant.AntProjectEvent; import org.netbeans.spi.project.support.ant.AntProjectListener; import org.netbeans.spi.project.support.ant.PropertyUtils; -import org.openide.ErrorManager; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.util.WeakListeners; import org.openide.xml.XMLUtil; @@ -128,13 +126,7 @@ URL generatedClasses = FileUtil.urlForArchiveOrDir(project.getGeneratedClassesDirectory()); URL generatedUnitTestClasses = FileUtil.urlForArchiveOrDir(project.getTestGeneratedClassesDirectory("unit")); URL generatedFunctionalTestClasses = FileUtil.urlForArchiveOrDir(project.getTestGeneratedClassesDirectory("qa-functional")); - String fileU; - try { - fileU = file.getURL().toString(); - } catch (FileStateInvalidException x) { - LOG.log(Level.INFO, null, x); - return null; - } + String fileU = file.getURL().toString(); if (srcDir != null && (FileUtil.isParentOf(srcDir, file) || file == srcDir || fileU.startsWith(generatedClasses.toString()))) { // Regular sources. @@ -151,11 +143,7 @@ return execute; } else if (type.equals(ClassPath.SOURCE)) { if (source == null) { - try { - source = ClassPathSupport.createClassPath(srcDir.getURL(), generatedClasses); - } catch (FileStateInvalidException x) { - LOG.log(Level.INFO, null, x); - } + source = ClassPathSupport.createClassPath(srcDir.getURL(), generatedClasses); } return source; } @@ -177,11 +165,7 @@ return testExecute; } else if (type.equals(ClassPath.SOURCE)) { if (testSource == null) { - try { - testSource = ClassPathSupport.createClassPath(testSrcDir.getURL(), generatedUnitTestClasses); - } catch (FileStateInvalidException x) { - LOG.log(Level.INFO, null, x); - } + testSource = ClassPathSupport.createClassPath(testSrcDir.getURL(), generatedUnitTestClasses); } return testSource; } @@ -190,11 +174,7 @@ // Functional tests. if (type.equals(ClassPath.SOURCE)) { if (funcTestSource == null) { - try { - funcTestSource = ClassPathSupport.createClassPath(funcTestSrcDir.getURL(), generatedFunctionalTestClasses); - } catch (FileStateInvalidException x) { - LOG.log(Level.INFO, null, x); - } + funcTestSource = ClassPathSupport.createClassPath(funcTestSrcDir.getURL(), generatedFunctionalTestClasses); } return funcTestSource; } else if (type.equals(ClassPath.COMPILE)) { @@ -212,15 +192,10 @@ } } else if (classesDir != null && (classesDir.equals(file) || FileUtil.isParentOf(classesDir,file))) { if (ClassPath.EXECUTE.equals(type)) { - try { - List roots = new ArrayList(); - roots.add ( ClassPathSupport.createResource(classesDir.getURL())); - roots.addAll(createCompileClasspath().getResources()); - return ClassPathSupport.createClassPath (roots); - } catch (FileStateInvalidException e) { - ErrorManager.getDefault().notify (e); - return null; - } + List roots = new ArrayList(); + roots.add ( ClassPathSupport.createResource(classesDir.getURL())); + roots.addAll(createCompileClasspath().getResources()); + return ClassPathSupport.createClassPath (roots); } } else if (testClassesDir != null && (testClassesDir.equals(file) || FileUtil.isParentOf(testClassesDir,file))) { if (ClassPath.EXECUTE.equals(type)) { --- a/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/ActionFilterNode.java +++ a/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/ActionFilterNode.java @@ -50,13 +50,11 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.Action; -import org.openide.ErrorManager; import org.openide.actions.EditAction; import org.openide.actions.FindAction; import org.openide.loaders.DataObject; import org.openide.actions.OpenAction; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; @@ -204,17 +202,12 @@ } public boolean hasJavadoc() { - try { - boolean rNotNull = resource != null; - int jLength = JavadocForBinaryQuery.findJavadoc(cpRoot.getURL()).getRoots().length; - return rNotNull && jLength > 0; - } catch (FileStateInvalidException fsi) { - return false; - } + boolean rNotNull = resource != null; + int jLength = JavadocForBinaryQuery.findJavadoc(cpRoot.getURL()).getRoots().length; + return rNotNull && jLength > 0; } public void showJavadoc() { - try { String relativeName = FileUtil.getRelativePath(cpRoot, resource); URL[] urls = JavadocForBinaryQuery.findJavadoc(cpRoot.getURL()).getRoots(); URL pageURL; @@ -231,9 +224,6 @@ pageURL = ShowJavadocAction.findJavadoc(javadocFileName, urls); } ShowJavadocAction.showJavaDoc(pageURL,relativeName.replace('/','.')); //NOI18N - } catch (FileStateInvalidException fsi) { - ErrorManager.getDefault().notify(fsi); - } } } --- a/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/LibrariesSourceGroup.java +++ a/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/LibrariesSourceGroup.java @@ -47,9 +47,7 @@ import java.beans.PropertyChangeListener; import javax.swing.Icon; import org.netbeans.api.project.SourceGroup; -import org.openide.ErrorManager; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; // XXX this class is more or less copy-pasted from j2seproject. @@ -88,12 +86,7 @@ } public String getName() { - try { - return root.getURL().toExternalForm(); - } catch (FileStateInvalidException fsi) { - ErrorManager.getDefault().notify(fsi); - return root.toString(); - } + return root.getURL().toExternalForm(); } public String getDisplayName() { --- a/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/PlatformNode.java +++ a/apisupport.ant/src/org/netbeans/modules/apisupport/project/ui/PlatformNode.java @@ -58,13 +58,11 @@ import java.util.Set; import javax.swing.Action; import javax.swing.Icon; -import javax.swing.ImageIcon; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.netbeans.api.java.classpath.ClassPath; import org.netbeans.api.java.queries.JavadocForBinaryQuery; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.nodes.Children; import org.openide.nodes.AbstractNode; @@ -72,7 +70,6 @@ import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; import org.openide.util.RequestProcessor; -import org.openide.util.Utilities; import org.openide.util.WeakListeners; import org.openide.ErrorManager; import org.netbeans.api.java.platform.JavaPlatform; @@ -205,7 +202,6 @@ FileObject[] roots = platform.getBootstrapLibraries().getRoots(); List result = new ArrayList(roots.length); for (int i=0; i errors = new ArrayList(); RunnableFuture> linesFuture = new FutureTask>(new Callable>() { --- a/autoupdate.services/src/org/netbeans/modules/autoupdate/updateprovider/DummyModuleInfo.java +++ a/autoupdate.services/src/org/netbeans/modules/autoupdate/updateprovider/DummyModuleInfo.java @@ -73,12 +73,7 @@ // List urls = new ArrayList(Math.max(kids.length, 1)); // List // for (int i = 0; i < kids.length; i++) { // if (kids[i].hasExt("xml")) { -// try { -// urls.add(kids[i].getURL()); -// } -// catch (FileStateInvalidException e) { -// Exceptions.printStackTrace(e); -// } +// urls.add(kids[i].getURL()); // } // } // try { --- a/java.api.common/nbproject/project.xml +++ a/java.api.common/nbproject/project.xml @@ -174,7 +174,7 @@ - 7.20 + 7.57 --- a/java.api.common/src/org/netbeans/modules/java/api/common/applet/AppletSupport.java +++ a/java.api.common/src/org/netbeans/modules/java/api/common/applet/AppletSupport.java @@ -252,11 +252,7 @@ } } else { - try { - url = htmlFile.getURL(); - } catch (FileStateInvalidException f) { - ErrorManager.getDefault().notify(f); - } + url = htmlFile.getURL(); } return url; } --- a/java.api.common/src/org/netbeans/modules/java/api/common/classpath/ClassPathExtender.java +++ a/java.api.common/src/org/netbeans/modules/java/api/common/classpath/ClassPathExtender.java @@ -46,7 +46,6 @@ import java.io.IOException; import java.net.URI; -import java.net.URISyntaxException; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; @@ -90,13 +89,7 @@ } URI[] archiveFileURIs = new URI[archiveFiles.length]; for (int i = 0; i < archiveFiles.length; i++) { - try { - archiveFileURIs[i] = archiveFiles[i].getURL().toURI(); - } catch (URISyntaxException ex) { - IOException ioe = new IOException(); - ioe.initCause(ex); - throw ioe; - } + archiveFileURIs[i] = archiveFiles[i].toURI(); } return this.delegate.handleRoots(archiveFileURIs, classPathId, projectXMLElementName, ClassPathModifier.ADD); } --- a/java.api.common/src/org/netbeans/modules/java/api/common/project/ui/ActionFilterNode.java +++ a/java.api.common/src/org/netbeans/modules/java/api/common/project/ui/ActionFilterNode.java @@ -59,7 +59,6 @@ import org.openide.loaders.DataObject; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; @@ -391,11 +390,7 @@ RP.execute(new Runnable() { @Override public void run() { - try { - JavadocForBinaryQuery.findJavadoc(cpRoot.getURL()); - } catch (FileStateInvalidException ex) { - Exceptions.printStackTrace(ex); - } + JavadocForBinaryQuery.findJavadoc(cpRoot.getURL()); } }); } @@ -403,16 +398,11 @@ @Override public boolean hasJavadoc() { - try { - return resource != null && JavadocForBinaryQuery.findJavadoc(cpRoot.getURL()).getRoots().length>0; - } catch (FileStateInvalidException fsi) { - return false; - } + return resource != null && JavadocForBinaryQuery.findJavadoc(cpRoot.getURL()).getRoots().length>0; } @Override public void showJavadoc() { - try { String relativeName = FileUtil.getRelativePath(cpRoot,resource); URL[] urls = JavadocForBinaryQuery.findJavadoc(cpRoot.getURL()).getRoots(); URL pageURL; @@ -431,9 +421,6 @@ pageURL = ShowJavadocAction.findJavadoc (javadocFileName,urls); } ShowJavadocAction.showJavaDoc(pageURL,relativeName.replace('/','.')); //NOI18N - } catch (FileStateInvalidException fsi) { - Exceptions.printStackTrace(fsi); - } } } --- a/java.api.common/src/org/netbeans/modules/java/api/common/project/ui/LibrariesSourceGroup.java +++ a/java.api.common/src/org/netbeans/modules/java/api/common/project/ui/LibrariesSourceGroup.java @@ -47,10 +47,8 @@ import java.beans.PropertyChangeListener; import javax.swing.Icon; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.netbeans.api.project.SourceGroup; -import org.openide.util.Exceptions; /** @@ -96,12 +94,7 @@ } public String getName() { - try { - return root.getURL().toExternalForm(); - } catch (FileStateInvalidException fsi) { - Exceptions.printStackTrace(fsi); - return root.toString(); - } + return root.getURL().toExternalForm(); } public String getDisplayName() { --- a/java.api.common/src/org/netbeans/modules/java/api/common/project/ui/PlatformNode.java +++ a/java.api.common/src/org/netbeans/modules/java/api/common/project/ui/PlatformNode.java @@ -65,7 +65,6 @@ import org.netbeans.api.java.classpath.ClassPath; import org.netbeans.api.java.queries.JavadocForBinaryQuery; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.loaders.DataObjectNotFoundException; import org.openide.nodes.Children; @@ -84,7 +83,6 @@ import org.openide.loaders.DataFolder; import org.openide.loaders.DataObject; import org.openide.util.ChangeSupport; -import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.Parameters; import org.openide.util.actions.SystemAction; @@ -240,7 +238,6 @@ FileObject[] roots = platform.getBootstrapLibraries().getRoots(); List result = new ArrayList(roots.length); for (int i = 0; i < roots.length; i++) { - try { FileObject file; Icon icon; Icon openedIcon; @@ -257,9 +254,6 @@ if (file.isValid()) { result.add (new LibrariesSourceGroup(roots[i],file.getNameExt(),icon, openedIcon)); } - } catch (FileStateInvalidException e) { - Exceptions.printStackTrace(e); - } } return result; } --- a/java.j2seproject/test/unit/src/org/netbeans/modules/java/j2seproject/classpath/J2SEProjectClassPathModifierTest.java +++ a/java.j2seproject/test/unit/src/org/netbeans/modules/java/j2seproject/classpath/J2SEProjectClassPathModifierTest.java @@ -303,7 +303,7 @@ final ClassPath cp = ClassPath.getClassPath(srcGrp.getRootFolder(), JavaClassPathConstants.PROCESSOR_PATH); assertFalse(Arrays.asList(cp.getRoots()).contains(libRoot)); ProjectClassPathModifier.addRoots( - new URI[] {libRoot.getURL().toURI()}, + new URI[] {libRoot.toURI()}, srcGrp.getRootFolder(), JavaClassPathConstants.PROCESSOR_PATH); assertTrue("No lib on processor path!", Arrays.asList(cp.getRoots()).contains(libRoot)); //NOI18N --- a/openide.execution/apichanges.xml +++ a/openide.execution/apichanges.xml @@ -57,6 +57,26 @@ + + + NbClassLoader(FileObject[], ...) does not throw FileStateInvalidException + + + + +

+ No NbClassLoader constructor throws FileStateInvalidException any longer, + which can cause some existing source code to not compile. +

+
+ +

+ NbClassLoader(FileObject[], ClassLoader, InputOutput) does not throw FileStateInvalidException ahy more. +

+
+ + +
No need to require ExecutionEngine token anymore --- a/openide.execution/manifest.mf +++ a/openide.execution/manifest.mf @@ -1,6 +1,6 @@ Manifest-Version: 1.0 OpenIDE-Module: org.openide.execution -OpenIDE-Module-Specification-Version: 1.25 +OpenIDE-Module-Specification-Version: 1.26 OpenIDE-Module-Localizing-Bundle: org/openide/execution/Bundle.properties OpenIDE-Module-Recommends: org.openide.execution.ExecutionEngine AutoUpdate-Essential-Module: true --- a/openide.execution/nbproject/project.xml +++ a/openide.execution/nbproject/project.xml @@ -54,7 +54,15 @@ - 6.2 + 7.57 + +
+ + org.openide.io + + + + 1.0 @@ -73,14 +81,6 @@ 8.0 - - org.openide.io - - - - 1.0 - - --- a/openide.execution/src/org/openide/execution/NbClassLoader.java +++ a/openide.execution/src/org/openide/execution/NbClassLoader.java @@ -54,13 +54,12 @@ import java.security.PermissionCollection; import java.util.Enumeration; import java.util.HashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.jar.Manifest; import java.util.logging.Level; import java.util.logging.Logger; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileSystem; +import org.openide.filesystems.FileSystemCapability; import org.openide.filesystems.FileUtil; import org.openide.filesystems.URLMapper; import org.openide.util.Exceptions; @@ -115,11 +114,10 @@ * @param roots a set of package roots * @param parent a parent loader * @param io an I/O tab in the Output Window, or null - * @throws FileStateInvalidException if some of the roots are not valid * @since XXX */ static ThreadLocal f = new ThreadLocal(); - public NbClassLoader(FileObject[] roots, ClassLoader parent, InputOutput io) throws FileStateInvalidException { + public NbClassLoader(FileObject[] roots, ClassLoader parent, InputOutput io) { super(createRootURLs(roots), parent); fast = canOptimize(getURLs()); inout = io; @@ -286,7 +284,7 @@ * @param roots file roots * @return array of URLs */ - private static URL[] createRootURLs(FileObject[] roots) throws FileStateInvalidException { + private static URL[] createRootURLs(FileObject[] roots) { URL[] urls = new URL[roots.length]; for (int i = 0; i < roots.length; i++) { urls[i] = roots[i].getURL(); --- a/openide.filesystems/apichanges.xml +++ a/openide.filesystems/apichanges.xml @@ -49,6 +49,31 @@ Filesystems API + + + Introduced FileObject.toURI + + + + +

+ FileObject.getURL no longer throws FileStateInvalidException, + which can cause some existing source code to not compile. +

+
+ +

+ Added FileObject.toURI for convenience. +

+

+ Also removed checked exception from FileObject.getURL, + and clarified that URLMapper.findURL(fo, INTERNAL) + will never return null. +

+
+ + +
Provides default line separator --- a/openide.filesystems/manifest.mf +++ a/openide.filesystems/manifest.mf @@ -2,5 +2,5 @@ OpenIDE-Module: org.openide.filesystems OpenIDE-Module-Localizing-Bundle: org/openide/filesystems/Bundle.properties OpenIDE-Module-Layer: org/openide/filesystems/resources/layer.xml -OpenIDE-Module-Specification-Version: 7.56 +OpenIDE-Module-Specification-Version: 7.57 --- a/openide.filesystems/src/META-INF/upgrade/FileObject.hint +++ a/openide.filesystems/src/META-INF/upgrade/FileObject.hint @@ -2,3 +2,24 @@ => !$f.canWrite() ;; + +/* XXX cannot get this to work: +try { + $body1$; + $f.getURL(); + $body2$; +} catch (org.openide.filesystems.FileStateInvalidException $e) { + $impossible$; +} +:: $f instanceof org.openide.filesystems.FileObject +=> +$body1$; +$f.getURL() :: $f instanceof org.openide.filesystems.FileObject; +$body2$; +;; +*/ + +$f.getURL().toURI() :: $f instanceof org.openide.filesystems.FileObject +=> +$f.toURI() +;; --- a/openide.filesystems/src/org/openide/filesystems/FileObject.java +++ a/openide.filesystems/src/org/openide/filesystems/FileObject.java @@ -51,6 +51,8 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.nio.charset.Charset; import java.util.Arrays; @@ -1133,16 +1135,31 @@ * the URL will only be usable within NetBeans as it uses a special protocol handler. * Otherwise an attempt is made to produce an external URL. * @return URL of this file object - * @exception FileStateInvalidException if the file is not valid * @see URLMapper#findURL * @see URLMapper#INTERNAL */ - public final URL getURL() throws FileStateInvalidException { - // XXX why does this still throw FSIE? need not + public final URL getURL() { return URLMapper.findURL(this, URLMapper.INTERNAL); } /** + * Gets a URI for this file. + * Similar to {@link #getURL}. + * @return an absolute URI representing this file location + * @since 7.57 + */ + public final URI toURI() { + try { + URI uri = getURL().toURI(); + assert uri.isAbsolute() : uri; + assert uri.equals(uri.normalize()) : uri; + return uri; + } catch (URISyntaxException x) { + throw new IllegalStateException(x); + } + } + + /** * Tests if file really exists or is missing. Some operation on it may be restricted. * @return true indicates that the file is missing. * @since 1.9 --- a/openide.filesystems/src/org/openide/filesystems/FileURL.java +++ a/openide.filesystems/src/org/openide/filesystems/FileURL.java @@ -99,9 +99,8 @@ /** Provides a URL to access a file object. * @param fo the file object * @return a URL using the correct syntax and {@link #PROTOCOL protocol} - * @exception FileStateInvalidException if the file object is not valid (typically, if its filesystem is inconsistent or no longer present) */ - public static URL encodeFileObject(FileObject fo) throws FileStateInvalidException { + public static URL encodeFileObject(FileObject fo) { return NbfsUtil.getURL(fo); } --- a/openide.filesystems/src/org/openide/filesystems/NbfsUtil.java +++ a/openide.filesystems/src/org/openide/filesystems/NbfsUtil.java @@ -65,10 +65,14 @@ * Gets URL with nbfs protocol for passes fo * @param fo * @return url with nbfs protocol - * @throws FileStateInvalidException if FileObject somehow corrupted */ - static URL getURL(FileObject fo) throws FileStateInvalidException { - final String fsPart = encodeFsPart(fo); + static URL getURL(FileObject fo) { + String fsPart; + try { + fsPart = encodeFsPart(fo); + } catch (FileStateInvalidException x) { + fsPart = "invalid"; + } final String foPart = encodeFoPart(fo); final String host = "nbhost"; //NOI18N --- a/openide.filesystems/src/org/openide/filesystems/URLMapper.java +++ a/openide.filesystems/src/org/openide/filesystems/URLMapper.java @@ -130,7 +130,7 @@ *
  • inside this machine *
  • from networked machines * - * @return a suitable URL, or null + * @return a suitable URL, or (only if not {@link #INTERNAL}) null */ public static URL findURL(FileObject fo, int type) { @@ -146,11 +146,7 @@ // if not resolved yet then internal URL with nbfs protocol is returned // XXX this would be better handled by making DefaultURLMapper just return nbfs for INTERNAL when necessary! if (type == INTERNAL) { - try { - return FileURL.encodeFileObject(fo); - } catch (FileStateInvalidException iex) { - // ignore - } + return FileURL.encodeFileObject(fo); } return null; --- a/openide.filesystems/test/unit/src/META-INF/upgrade/FileObject.test +++ a/openide.filesystems/test/unit/src/META-INF/upgrade/FileObject.test @@ -0,0 +1,38 @@ +%%TestCase toURI +package test; +class C { + org.openide.filesystems.FileObject f; + java.net.URI u() throws Exception { + return f.getURL().toURI(); + } +} +%%=> +package test; +class C { + org.openide.filesystems.FileObject f; + java.net.URI u() throws Exception { + return f.toURI(); + } +} + +%%TestCase remove-catch +// XXX +package test; +class C { + org.openide.filesystems.FileObject f; + String n() { + try { + return f.getURL().toExternalForm(); + } catch (org.openide.filesystems.FileStateInvalidException e) { + return e.toString(); + } + } +} +%%=> +package test; +class C { + org.openide.filesystems.FileObject f; + String n() { + return f.getURL().toExternalForm(); + } +} --- a/openide.filesystems/test/unit/src/org/openide/filesystems/FileObjectTestHid.java +++ a/openide.filesystems/test/unit/src/org/openide/filesystems/FileObjectTestHid.java @@ -1697,7 +1697,7 @@ } - public void testNbfsTransformation () throws FileStateInvalidException{ + public void testNbfsTransformation () { checkSetUp(); // additional check String sysName = fs.getSystemName(); @@ -3094,7 +3094,8 @@ URL url = null; url = fo1.getURL(); /** Only invalid files may fire FileStateInvalidException*/ - fsAssert ("Expected valid url",url != null); + fsAssert ("Expected valid url",url != null); + fsAssert("same URI", url.toURI().equals(fo1.toURI())); // #39613: check that it actually works! // Note that since getURL now produces a file: URL for files with File's, --- a/project.ant/nbproject/project.xml +++ a/project.ant/nbproject/project.xml @@ -140,7 +140,7 @@ - 7.50 + 7.57 --- a/project.ant/src/org/netbeans/modules/project/ant/ProjectLibraryProvider.java +++ a/project.ant/src/org/netbeans/modules/project/ant/ProjectLibraryProvider.java @@ -1178,13 +1178,7 @@ URI u; FileObject newFO; String name; - URI libEntryU; - try { - libEntryU = libEntryFO.getURL().toURI(); - } catch (Exception x) { - libEntryU = null; - } - if (libEntryU != null && CollocationQuery.areCollocated(libBaseFolder.toURI(), libEntryU)) { + if (CollocationQuery.areCollocated(libBaseFolder.toURI(), libEntryFO.toURI())) { // if the jar/folder is in relation to the library folder (parent+child/same vcs) // don't replicate it but reference the original file. newFO = libEntryFO; --- a/project.ant/src/org/netbeans/modules/project/ant/ProjectXMLCatalogReader.java +++ a/project.ant/src/org/netbeans/modules/project/ant/ProjectXMLCatalogReader.java @@ -63,7 +63,6 @@ import org.netbeans.modules.xml.catalog.spi.CatalogListener; import org.netbeans.modules.xml.catalog.spi.CatalogReader; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.util.Exceptions; import org.openide.util.ImageUtilities; @@ -96,11 +95,7 @@ if (name.startsWith(PREFIX)) { FileObject rsrc = FileUtil.getConfigFile(CATALOG + "/" + name.substring(PREFIX.length()) + "." + EXTENSION); if (rsrc != null) { - try { - return rsrc.getURL().toString(); - } catch (FileStateInvalidException x) { - Exceptions.printStackTrace(x); - } + return rsrc.getURL().toString(); } } return null; --- a/project.ant/src/org/netbeans/spi/project/support/ant/SourcesHelper.java +++ a/project.ant/src/org/netbeans/spi/project/support/ant/SourcesHelper.java @@ -69,6 +69,7 @@ import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.SourceGroup; +import org.netbeans.api.project.SourceGroupModifier; import org.netbeans.api.project.Sources; import org.netbeans.api.queries.SharabilityQuery; import org.netbeans.modules.project.ant.AntBasedProjectFactorySingleton; @@ -78,7 +79,6 @@ import org.openide.filesystems.FileEvent; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileRenameEvent; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.util.ChangeSupport; import org.openide.util.Parameters; @@ -1019,11 +1019,7 @@ // Remember what we computed here so we know whether to fire changes later. List rootURLs = new ArrayList(groups.size()); for (SourceGroup g : groups) { - try { - rootURLs.add(g.getRootFolder().getURL()); - } catch (FileStateInvalidException e) { - assert false : e; // should be a valid file object! - } + rootURLs.add(g.getRootFolder().getURL()); } lastComputedRoots.put(type, rootURLs); return groups.toArray(new SourceGroup[groups.size()]); --- a/project.ant/test/unit/src/org/netbeans/spi/project/support/ant/ReferenceHelperTest.java +++ a/project.ant/test/unit/src/org/netbeans/spi/project/support/ant/ReferenceHelperTest.java @@ -171,7 +171,7 @@ assertNotNull("found ref helper for " + p, r); sisterprojdir = FileUtil.createFolder(scratch, "proj2"); assertTrue("projdir and sisterprojdir collocated", - CollocationQuery.areCollocated(projdir.getURL().toURI(), sisterprojdir.getURL().toURI())); + CollocationQuery.areCollocated(projdir.toURI(), sisterprojdir.toURI())); sisterh = ProjectGenerator.createProject(sisterprojdir, "test"); setCodeNameOfTestProject(sisterh, "proj2"); EditableProperties props = sisterh.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH); @@ -183,7 +183,7 @@ sisterprojdir2 = FileUtil.createFolder(scratch, "proj2-copy"); assertTrue("projdir and sisterprojdir2 collocated", - CollocationQuery.areCollocated(projdir.getURL().toURI(), sisterprojdir2.getURL().toURI())); + CollocationQuery.areCollocated(projdir.toURI(), sisterprojdir2.toURI())); sisterh2 = ProjectGenerator.createProject(sisterprojdir2, "test"); setCodeNameOfTestProject(sisterh2, "proj2"); props = sisterh2.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH); @@ -198,7 +198,7 @@ // similarly as it is done for SampleCVSCollocationQueryImpl // in META-INF/services. assertFalse("" + projdir + " and " + sepprojdir + " cannot be collocated", - CollocationQuery.areCollocated(projdir.getURL().toURI(), sepprojdir.getURL().toURI())); + CollocationQuery.areCollocated(projdir.toURI(), sepprojdir.toURI())); seph = ProjectGenerator.createProject(sepprojdir, "test"); setCodeNameOfTestProject(seph, "proj3"); props = seph.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH); --- a/projectapi/nbproject/project.xml +++ a/projectapi/nbproject/project.xml @@ -63,7 +63,7 @@ - 7.50 + 7.57 --- a/projectapi/src/org/netbeans/api/project/ProjectUtils.java +++ a/projectapi/src/org/netbeans/api/project/ProjectUtils.java @@ -67,7 +67,6 @@ import org.netbeans.spi.project.SubprojectProvider; import org.netbeans.spi.project.support.GenericSources; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; @@ -235,11 +234,7 @@ } public String getName() { - try { - return p.getProjectDirectory().getURL().toExternalForm(); - } catch (FileStateInvalidException e) { - return e.toString(); - } + return p.getProjectDirectory().getURL().toExternalForm(); } public String getDisplayName() { --- a/projectapi/src/org/netbeans/modules/projectapi/SimpleFileOwnerQueryImplementation.java +++ a/projectapi/src/org/netbeans/modules/projectapi/SimpleFileOwnerQueryImplementation.java @@ -51,13 +51,10 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.LinkedList; import java.util.Map; import java.util.Set; -import java.util.WeakHashMap; import java.util.logging.Level; import java.util.logging.Logger; import java.util.prefs.BackingStoreException; @@ -66,7 +63,6 @@ import org.netbeans.api.project.ProjectManager; import org.netbeans.spi.project.FileOwnerQueryImplementation; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.URLMapper; import org.openide.util.NbPreferences; import org.openide.util.Utilities; @@ -146,7 +142,7 @@ } if (!externalOwners.isEmpty() && (folder || externalRootsIncludeNonFolders)) { - URI externalOwnersURI = externalOwners.get(fileObject2URI(f)); + URI externalOwnersURI = externalOwners.get(f.toURI()); if (externalOwnersURI != null) { FileObject externalOwner = uri2FileObject(externalOwnersURI); @@ -169,7 +165,7 @@ } } if (!deserializedExternalOwners.isEmpty() && (folder || externalRootsIncludeNonFolders)) { - FileObject externalOwner = deserializedExternalOwners.get(fileObject2URI(f)); + FileObject externalOwner = deserializedExternalOwners.get(f.toURI()); if (externalOwner != null && externalOwner.isValid()) { try { // Note: will be null if there is no such project. @@ -241,17 +237,9 @@ externalOwners.clear(); } - private static URI fileObject2URI(FileObject f) { - try { - return URI.create(f.getURL().toString()); - } catch (FileStateInvalidException e) { - throw (IllegalArgumentException) new IllegalArgumentException(e.toString()).initCause(e); - } - } - /** @see FileOwnerQuery#markExternalOwner */ public static void markExternalOwnerTransient(FileObject root, Project owner) { - markExternalOwnerTransient(fileObject2URI(root), owner); + markExternalOwnerTransient(root.toURI(), owner); } /** @see FileOwnerQuery#markExternalOwner */ @@ -259,7 +247,7 @@ externalRootsIncludeNonFolders |= !root.getPath().endsWith("/"); if (owner != null) { FileObject fo = owner.getProjectDirectory(); - externalOwners.put(root, fileObject2URI(fo)); + externalOwners.put(root, fo.toURI()); deserializedExternalOwners.remove(root); } else { externalOwners.remove(root); --- a/projectapi/test/unit/src/org/netbeans/modules/projectapi/FileOwnerCollocationQueryImplTest.java +++ a/projectapi/test/unit/src/org/netbeans/modules/projectapi/FileOwnerCollocationQueryImplTest.java @@ -74,7 +74,7 @@ //root/prj1/foo FileOwnerCollocationQueryImpl instance = new FileOwnerCollocationQueryImpl(); - assertEquals(projdir.getURL().toURI(), instance.findRoot(projdir.createData("foo").getURL().toURI())); + assertEquals(projdir.toURI(), instance.findRoot(projdir.createData("foo").toURI())); //root/prj2/foo/prj3/bar projdir = root.createFolder("prj2"); @@ -82,10 +82,10 @@ projdir.createFolder("testproject"); projdir = projdir.createFolder("foo").createFolder("prj3"); projdir.createFolder("testproject"); - assertEquals(expected.getURL().toURI(), instance.findRoot(projdir.createData("bar").getURL().toURI())); + assertEquals(expected.toURI(), instance.findRoot(projdir.createData("bar").toURI())); //root - assertEquals(null, instance.findRoot(root.getURL().toURI())); + assertEquals(null, instance.findRoot(root.toURI())); } /** @@ -101,14 +101,14 @@ FileObject file1 = lib.createData("pron"); FileObject file2 = projdir.createData("xxx"); FileOwnerCollocationQueryImpl instance = new FileOwnerCollocationQueryImpl(); - assertFalse(instance.areCollocated(file1.getURL().toURI(), file2.getURL().toURI())); + assertFalse(instance.areCollocated(file1.toURI(), file2.toURI())); file1 = projdir.createData("pron"); - assertTrue(instance.areCollocated(file1.getURL().toURI(), file2.getURL().toURI())); + assertTrue(instance.areCollocated(file1.toURI(), file2.toURI())); file1 = projdir; file2 = lib; - assertFalse(instance.areCollocated(file1.getURL().toURI(), file2.getURL().toURI())); + assertFalse(instance.areCollocated(file1.toURI(), file2.toURI())); projdir = root.createFolder("noproj").createFolder("proj1"); projdir.createFolder("testproject"); @@ -118,7 +118,7 @@ file2 = projdir2.createData("bar"); // System.out.println("root1=" + instance.findRoot(file1.getURL().toURI())); // System.out.println("root2=" + instance.findRoot(file2.getURL().toURI())); - assertFalse(instance.areCollocated(file1.getURL().toURI(), file2.getURL().toURI())); + assertFalse(instance.areCollocated(file1.toURI(), file2.toURI())); } --- a/queries/nbproject/project.xml +++ a/queries/nbproject/project.xml @@ -54,7 +54,7 @@ - 7.19 + 7.57 --- a/queries/src/org/netbeans/api/queries/SharabilityQuery.java +++ a/queries/src/org/netbeans/api/queries/SharabilityQuery.java @@ -46,12 +46,9 @@ import java.io.File; import java.net.URI; -import java.net.URISyntaxException; -import java.util.logging.Level; import java.util.logging.Logger; import org.netbeans.spi.queries.SharabilityQueryImplementation2; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileUtil; import org.openide.util.Lookup; import org.openide.util.Parameters; @@ -232,13 +229,6 @@ * @since 1.27 */ public static Sharability getSharability(FileObject fo) { - try { - return getSharability(fo.getURL().toURI()); - } catch (URISyntaxException ex) { - LOG.log(Level.FINE, null, ex); - } catch (FileStateInvalidException ex) { - LOG.log(Level.FINE, null, ex); - } - return Sharability.UNKNOWN; + return getSharability(fo.toURI()); } }