/** * Frees the {@link Archive} for given root. * @param root the root for which the {@link Archive} should be freed. */ public synchronized void removeArchive (@NonNull final URL root) { final URI rootURI = toURI(root); final Archive archive = archives.remove(rootURI); for (Iterator<Map.Entry<URI,URI>> it = ctSymToJar.entrySet().iterator(); it.hasNext();) { final Map.Entry<URI,URI> e = it.next(); if (e.getValue().equals(rootURI)) { it.remove(); break; } } if (archive != null) { archive.clear(); } }
@Override public Enumeration<URL> call() throws Exception { @SuppressWarnings("UseOfObsoleteCollectionType") final Vector<URL> v = new Vector<URL>(); for (final Pair<URL,Archive> p : archives) { final Archive archive = p.second(); final FileObject file = archive.getFile(name); if (file != null) { v.add(file.toUri().toURL()); usedRoots .map((c) -> RES_PROCESSORS.equals(name) ? null : c) .ifPresent((c) -> c.accept(p.first())); } } return v.elements(); } });
Archive archive = provider.getArchive( entry.getURL(), cacheFile ); if (archive != null) { Iterable<JavaFileObject> entries = archive.getFiles( folderName, ignoreExcludes?null:entry, kinds, filter); idxs.add(entries); if (LOG.isLoggable(Level.FINEST)) {
@Override public javax.tools.FileObject getFileForOutput( Location l, String pkgName, String relativeName, javax.tools.FileObject sibling ) throws IOException, UnsupportedOperationException, IllegalArgumentException { if (!allowOutput) { throw new UnsupportedOperationException("Output is unsupported."); //NOI18N } javax.tools.JavaFileObject file = findFile (pkgName, relativeName); if (file == null) { final List<ClassPath.Entry> entries = this.cp.entries(); if (!entries.isEmpty()) { final String resourceName = FileObjects.resolveRelativePath(pkgName, relativeName); file = provider.getArchive(entries.get(0).getURL(), cacheFile).create(resourceName, filter); } } return file; //todo: wrap to make read only }
@Override public JavaFileObject getJavaFileForInput(Location location, String className, JavaFileObject.Kind kind) throws IOException { if (!hasLocation(location)) { throw new IllegalArgumentException(String.valueOf(location)); } final String [] names = FileObjects.getParentRelativePathAndName(className); if (kind == JavaFileObject.Kind.CLASS) { javax.tools.FileObject fo = tx.readFileObject(location, names[0], names[1]); if (fo != null) { return (JavaFileObject)fo; } } names[1] = names[1] + kind.extension; try { final File root = new File (outputRoot); Archive archive = provider.getArchive (BaseUtilities.toURI(root).toURL(), false); if (archive != null) { Iterable<JavaFileObject> files = archive.getFiles(names[0], null, null, null); for (JavaFileObject e : files) { if (names[1].equals(e.getName())) { return e; } } } } catch (IOException e) { Exceptions.printStackTrace(e); } return null; }
private FileObject findFileObject(final String resName) { assert LOCK.getReadLockCount() > 0; for (final Pair<URL,Archive> p : archives) { final Archive archive = p.second(); try { final FileObject file = archive.getFile(resName); if (file != null) { usedRoots.ifPresent((c) -> c.accept(p.first())); return file; } } catch (IOException ex) { LOG.log( Level.INFO, "Cannot read: " + archive, //NOI18N ex); } } return null; }
@Override public JavaFileObject getJavaFileForInput (Location l, String className, JavaFileObject.Kind kind) { final String[] namePair = FileObjects.getParentRelativePathAndName(className); namePair[1] = namePair[1] + kind.extension; for( ClassPath.Entry root : this.cp.entries()) { try { Archive archive = provider.getArchive (root.getURL(), cacheFile); if (archive != null) { Iterable<JavaFileObject> files = archive.getFiles(namePair[0], ignoreExcludes?null:root, null, filter); for (JavaFileObject e : files) { if (namePair[1].equals(e.getName())) { return e; } } } } catch (IOException e) { Exceptions.printStackTrace(e); } } return null; }
/** * Clears the in memory cached {@link Archive} data for given root. * @param root the root for which the {@link Archive} data should be cleared. * @see Archive#clear() */ public synchronized void clearArchive (@NonNull final URL root) { Archive archive = archives.get(toURI(root)); if (archive != null) { archive.clear(); } }
@Override public FileObject getFileForInput(Location location, String packageName, String relativeName) throws IOException { if (!hasLocation(location)) { throw new IllegalArgumentException(String.valueOf(location)); } final File root = new File(outputRoot); final String path = FileObjects.resolveRelativePath(packageName, relativeName); final String[] names = FileObjects.getFolderAndBaseName(path, FileObjects.NBFS_SEPARATOR_CHAR); final javax.tools.FileObject jfo = tx.readFileObject(location, names[0], names[1]); if (jfo != null) { return (JavaFileObject) jfo; } final Archive archive = provider.getArchive(BaseUtilities.toURI(root).toURL(), false); return archive != null ? archive.getFile(path) : null; }
private javax.tools.JavaFileObject findFile(final String pkgName, String relativeName) { assert pkgName != null; assert relativeName != null; final String resourceName = FileObjects.resolveRelativePath(pkgName,relativeName); for( ClassPath.Entry root : this.cp.entries()) { try { final Archive archive = provider.getArchive (root.getURL(), cacheFile); if (archive != null) { final JavaFileObject file = archive.getFile(resourceName); if (file != null) { return file; } } } catch (IOException e) { Exceptions.printStackTrace(e); } } return null; } }
sb.append(FileObjects.CLASS); try { final JavaFileObject jfo = ctSym.getFile(sb.toString()); if (jfo != null) { try (InputStream in = jfo.openInputStream()) {