/*
* @(#)JavaFileManager.java 1.17 06/09/25
*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package javax.tools;
import java.io.Closeable;
import java.io.Flushable;
import java.io.IOException;
import java.util.Iterator;
import java.util.Set;
import static javax.tools.JavaFileObject.Kind;
/**
* File manager for tools operating on Java™ programming language
* source and class files. In this context, <em>file</em> means an
* abstraction of regular files and other sources of data.
*
* <p>When constructing new JavaFileObjects, the file manager must
* determine where to create them. For example, if a file manager
* manages regular files on a file system, it would most likely have a
* current/working directory to use as default location when creating
* or finding files. A number of hints can be provided to a file
* manager as to where to create files. Any file manager might choose
* to ignore these hints.
*
* <p>Some methods in this interface use class names. Such class
* names must be given in the Java Virtual Machine internal form of
* fully qualified class and interface names. For convenience '.'
* and '/' are interchangeable. The internal form is defined in
* chapter four of the
* <a href="http://java.sun.com/docs/books/vmspec/2nd-edition/jvms-maintenance.html">Java
* Virtual Machine Specification</a>.
* <blockquote><p>
* <i>Discussion:</i> this means that the names
* "java/lang.package-info", "java/lang/package-info",
* "java.lang.package-info", are valid and equivalent. Compare to
* binary name as defined in the
* <a href="http://java.sun.com/docs/books/jls/">Java Language
* Specification (JLS)</a> section 13.1 "The Form of a Binary".
* </p></blockquote>
*
* <p>The case of names is significant. All names should be treated
* as case-sensitive. For example, some file systems have
* case-insensitive, case-aware file names. File objects representing
* such files should take care to preserve case by using {@link
* java.io.File#getCanonicalFile} or similar means. If the system is
* not case-aware, file objects must use other means to preserve case.
*
* <p><em><a name="relative_name">Relative names</a>:</em> some
* methods in this interface use relative names. A relative name is a
* non-null, non-empty sequence of path segments separated by '/'.
* '.' or '..' are invalid path segments. A valid relative name must
* match the "path-rootless" rule of <a
* href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986</a>,
* section 3.3. Informally, this should be true:
*
* <!-- URI.create(relativeName).normalize().getPath().equals(relativeName) -->
* <pre> URI.{@linkplain java.net.URI#create create}(relativeName).{@linkplain java.net.URI#normalize
normalize}().{@linkplain java.net.URI#getPath getPath}().equals(relativeName)</pre>
*
* <p>All methods in this interface might throw a SecurityException.
*
* <p>An object of this interface is not required to support
* multi-threaded access, that is, be synchronized. However, it must
* support concurrent access to different file objects created by this
* object.
*
* <p><em>Implementation note:</em> a consequence of this requirement
* is that a trivial implementation of output to a {@linkplain
* java.util.jar.JarOutputStream} is not a sufficient implementation.
* That is, rather than creating a JavaFileObject that returns the
* JarOutputStream directly, the contents must be cached until closed
* and then written to the JarOutputStream.
*
* <p>Unless explicitly allowed, all methods in this interface might
* throw a NullPointerException if given a {@code null} argument.
*
* @author Peter von der Ahé
* @author Jonathan Gibbons
* @see JavaFileObject
* @see FileObject
* @since 1.6
*/
public interface JavaFileManager extends Closeable, Flushable, OptionChecker {
/**
* Interface for locations of file objects. Used by file managers
* to determine where to place or search for file objects.
*/
interface Location {
/**
* Gets the name of this location.
*
* @return a name
*/
String getName();
=1= |