diff --git a/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/SharedRootData.java b/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/SharedRootData.java index 9939a96e8152..3c9d9099224a 100644 --- a/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/SharedRootData.java +++ b/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/SharedRootData.java @@ -25,6 +25,8 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.stream.Collectors; import org.netbeans.api.annotations.common.CheckForNull; import org.netbeans.modules.java.file.launcher.api.SourceLauncher; @@ -43,6 +45,8 @@ */ public class SharedRootData { + private static final Logger LOG = Logger.getLogger(SharedRootData.class.getName()); + private static final Map root2Data = new HashMap<>(); public static synchronized void ensureRootRegistered(FileObject root) { @@ -104,11 +108,14 @@ private synchronized void setNewProperties(Map newProperties) { } String joinedCommandLine = SourceLauncher.joinCommandLines(options.values()); try { - if (!joinedCommandLine.equals(root.getAttribute(SingleSourceFileUtil.FILE_VM_OPTIONS))) { + if ( + !root.getFileSystem().isReadOnly() // Skip read-only FSes (like JarFileSystem) + && !joinedCommandLine.equals(root.getAttribute(SingleSourceFileUtil.FILE_VM_OPTIONS)) + ) { root.setAttribute(SingleSourceFileUtil.FILE_VM_OPTIONS, joinedCommandLine); } } catch (IOException ex) { - Exceptions.printStackTrace(ex); + LOG.log(Level.INFO, "Failed to set " + SingleSourceFileUtil.FILE_VM_OPTIONS + " for " + root.getPath(), ex); } } diff --git a/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProvider.java b/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProvider.java index 47a8bad00c02..7f5061d3fac4 100644 --- a/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProvider.java +++ b/java/java.file.launcher/src/org/netbeans/modules/java/file/launcher/queries/MultiSourceRootProvider.java @@ -92,7 +92,7 @@ private ClassPath getSourcePath(FileObject file) { if (DISABLE_MULTI_SOURCE_ROOT) return null; synchronized (this) { //XXX: what happens if there's a Java file in user's home??? - if (file.isData() && "text/x-java".equals(file.getMIMEType())) { + if (file.isValid() && file.isData() && "text/x-java".equals(file.getMIMEType())) { return file2SourceCP.computeIfAbsent(file, f -> { try { String content = new String(file.asBytes(), FileEncodingQuery.getEncoding(file));