-
public interface Filer
This interface supports the creation of new files by an annotation processor. Files created in this way will be known to the annotation processing tool implementing this interface, better enabling the tool to manage them. Source and class files so created will be considered for processing by the tool in a subsequent round of processing after theclose
method has been called on theWriter
orOutputStream
used to write the contents of the file. Three kinds of files are distinguished: source files, class files, and auxiliary resource files.There are two distinguished supported locations (subtrees within the logical file system) where newly created files are placed: one for new source files, and one for new class files. (These might be specified on a tool's command line, for example, using flags such as
-s
and-d
.) The actual locations for new source files and new class files may or may not be distinct on a particular run of the tool. Resource files may be created in either location. The methods for reading and writing resources take a relative name argument. A relative name is a non-null, non-empty sequence of path segments separated by'/'
;'.'
and'..'
are invalid path segments. A valid relative name must match the "path-rootless" rule of RFC 3986, section 3.3.The file creation methods take a variable number of arguments to allow the originating elements to be provided as hints to the tool infrastructure to better manage dependencies. The originating elements are the types or packages (representing
package-info
files) which caused an annotation processor to attempt to create a new file. For example, if an annotation processor tries to create a source file,GeneratedFromUserSource
, in response to processing
the type element for@Generate public class UserSource {}
UserSource
should be passed as part of the creation method call as in:
If there are no originating elements, none need to be passed. This information may be used in an incremental environment to determine the need to rerun processors or remove generated files. Non-incremental environments may ignore the originating element information.filer.createSourceFile("GeneratedFromUserSource", eltUtils.getTypeElement("UserSource"));
During each run of an annotation processing tool, a file with a given pathname may be created only once. If that file already exists before the first attempt to create it, the old contents will be deleted. Any subsequent attempt to create the same file during a run will throw a
FilerException
, as will attempting to create both a class file and source file for the same type name or same package name. The initial inputs to the tool are considered to be created by the zeroth round; therefore, attempting to create a source or class file corresponding to one of those inputs will result in aFilerException
.In general, processors must not knowingly attempt to overwrite existing files that were not generated by some processor. A
Filer
may reject attempts to open a file corresponding to an existing type, likejava.lang.Object
. Likewise, the invoker of the annotation processing tool must not knowingly configure the tool such that the discovered processors will attempt to overwrite existing files that were not generated.Processors can indicate a source or class file is generated by including an
@Generated
annotation.Note that some of the effect of overwriting a file can be achieved by using a decorator-style pattern. Instead of modifying a class directly, the class is designed so that either its superclass is generated by annotation processing or subclasses of the class are generated by annotation processing. If the subclasses are generated, the parent class may be designed to use factories instead of public constructors so that only subclass instances would be presented to clients of the parent class.
- Since:
- 1.6
-
-
Method Summary
Methods Modifier and Type Method and Description JavaFileObject
createClassFile(CharSequence name, Element... originatingElements)
Creates a new class file, and returns an object to allow writing to it.FileObject
createResource(JavaFileManager.Location location, CharSequence pkg, CharSequence relativeName, Element... originatingElements)
Creates a new auxiliary resource file for writing and returns a file object for it.JavaFileObject
createSourceFile(CharSequence name, Element... originatingElements)
Creates a new source file and returns an object to allow writing to it.FileObject
getResource(JavaFileManager.Location location, CharSequence pkg, CharSequence relativeName)
Returns an object for reading an existing resource.
-
-
-
Method Detail
-
createSourceFile
JavaFileObject createSourceFile(CharSequence name, Element... originatingElements) throws IOException
Creates a new source file and returns an object to allow writing to it. The file's name and path (relative to the root output location for source files) are based on the type to be declared in that file. If more than one type is being declared, the name of the principal top-level type (the public one, for example) should be used. A source file can also be created to hold information about a package, including package annotations. To create a source file for a named package, havename
be the package's name followed by".package-info"
; to create a source file for an unnamed package, use"package-info"
.Note that to use a particular charset to encode the contents of the file, an
OutputStreamWriter
with the chosen charset can be created from theOutputStream
from the returned object. If theWriter
from the returned object is directly used for writing, its charset is determined by the implementation. An annotation processing tool may have an-encoding
flag or analogous option for specifying this; otherwise, it will typically be the platform's default encoding.To avoid subsequent errors, the contents of the source file should be compatible with the source version being used for this run.
- Parameters:
name
- canonical (fully qualified) name of the principal type being declared in this file or a package name followed by".package-info"
for a package information fileoriginatingElements
- type or package elements causally associated with the creation of this file, may be elided ornull
- Returns:
- a
JavaFileObject
to write the new source file - Throws:
FilerException
- if the same pathname has already been created, the same type has already been created, or the name is not valid for a typeIOException
- if the file cannot be created
-
createClassFile
JavaFileObject createClassFile(CharSequence name, Element... originatingElements) throws IOException
Creates a new class file, and returns an object to allow writing to it. The file's name and path (relative to the root output location for class files) are based on the name of the type being written. A class file can also be created to hold information about a package, including package annotations. To create a class file for a named package, havename
be the package's name followed by".package-info"
; creating a class file for an unnamed package is not supported.To avoid subsequent errors, the contents of the class file should be compatible with the source version being used for this run.
- Parameters:
name
- binary name of the type being written or a package name followed by".package-info"
for a package information fileoriginatingElements
- type or package elements causally associated with the creation of this file, may be elided ornull
- Returns:
- a
JavaFileObject
to write the new class file - Throws:
FilerException
- if the same pathname has already been created, the same type has already been created, or the name is not valid for a typeIOException
- if the file cannot be created
-
createResource
FileObject createResource(JavaFileManager.Location location, CharSequence pkg, CharSequence relativeName, Element... originatingElements) throws IOException
Creates a new auxiliary resource file for writing and returns a file object for it. The file may be located along with the newly created source files, newly created binary files, or other supported location. The locationsCLASS_OUTPUT
andSOURCE_OUTPUT
must be supported. The resource may be named relative to some package (as are source and class files), and from there by a relative pathname. In a loose sense, the full pathname of the new file will be the concatenation oflocation
,pkg
, andrelativeName
.Files created via this method are not registered for annotation processing, even if the full pathname of the file would correspond to the full pathname of a new source file or new class file.
- Parameters:
location
- location of the new filepkg
- package relative to which the file should be named, or the empty string if nonerelativeName
- final pathname components of the fileoriginatingElements
- type or package elements causally associated with the creation of this file, may be elided ornull
- Returns:
- a
FileObject
to write the new resource - Throws:
IOException
- if the file cannot be createdFilerException
- if the same pathname has already been createdIllegalArgumentException
- for an unsupported locationIllegalArgumentException
- ifrelativeName
is not relative
-
getResource
FileObject getResource(JavaFileManager.Location location, CharSequence pkg, CharSequence relativeName) throws IOException
Returns an object for reading an existing resource. The locationsCLASS_OUTPUT
andSOURCE_OUTPUT
must be supported.- Parameters:
location
- location of the filepkg
- package relative to which the file should be searched, or the empty string if nonerelativeName
- final pathname components of the file- Returns:
- an object to read the file
- Throws:
FilerException
- if the same pathname has already been opened for writingIOException
- if the file cannot be openedIllegalArgumentException
- for an unsupported locationIllegalArgumentException
- ifrelativeName
is not relative
-
-
Traduction non disponible
Les API Java ne sont pas encore traduites en français sur l'infobrol. Seule la version anglaise est disponible pour l'instant.
Version en cache
21/11/2024 21:23:08 Cette version de la page est en cache (à la date du 21/11/2024 21:23:08) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 11/06/2005, dernière modification le 04/03/2020
Source du document imprimé : https://www.gaudry.be/java-api-rf-javax/annotation/processing/Filer.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.