< prev index next >

src/java.compiler/share/classes/javax/annotation/processing/Filer.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.  Oracle designates this

@@ -64,11 +64,12 @@
  *
  * <p>The file creation methods take a variable number of arguments to
  * allow the <em>originating elements</em> to be provided as hints to
  * the tool infrastructure to better manage dependencies.  The
  * originating elements are the types or packages (representing {@code
- * package-info} files) which caused an annotation processor to
+ * package-info} files) or modules (representing {@code
+ * module-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, {@code
  * GeneratedFromUserSource}, in response to processing
  *
  * <blockquote><pre>

@@ -94,14 +95,14 @@
  * 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 {@link FilerException}, as will attempting to
  * create both a class file and source file for the same type name or
- * same package name.  The {@linkplain Processor 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 a {@link
+ * same package name or same module name.  The {@linkplain Processor
+ * 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 a {@link
  * FilerException}.
  *
  * <p> In general, processors must not knowingly attempt to overwrite
  * existing files that were not generated by some processor.  A {@code
  * Filer} may reject attempts to open a file corresponding to an

@@ -109,14 +110,15 @@
  * 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.
  *
  * <p> Processors can indicate a source or class file is generated by
- * including an {@link javax.annotation.Generated @Generated}
- * annotation.
+ * including a {@link javax.annotation.Generated @Generated}
+ * annotation if the environment is configured so that that type is
+ * accessible.
  *
- * <p> Note that some of the effect of overwriting a file can be
+ * @apiNote Some of the effect of overwriting a file can be
  * achieved by using a <i>decorator</i>-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

@@ -129,22 +131,42 @@
  * @since 1.6
  */
 public interface Filer {
     /**
      * Creates a new source file and returns an object to allow
-     * writing to it.  The file's name and path (relative to the
+     * writing to it. A source file for a type, a package, or a module
+     * can be created.
+     *
+     * The file's name and path (relative to the
      * {@linkplain StandardLocation#SOURCE_OUTPUT 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
+     * file as well as the specified module for the type (if any).
+
+     * If more than one type is being declared, the name
+     * of the principal top-level type (the public one, for example)
+     * should be used.
+     *
+     * <p>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, have {@code name} be the
      * package's name followed by {@code ".package-info"}; to create a
      * source file for an unnamed package, use {@code "package-info"}.
      *
-     * <p> Note that to use a particular {@linkplain
+     * The optional module name is prefixed to the type name or
+     * package name and separated using a "{@code /}" character. For
+     * example, to create a source file for type {@code a.B} in module
+     * {@code foo}, use a name argument of {@code "foo/a.B"}.
+     *
+     * To create a source file for a named module, have {@code name}
+     * be the modules's name followed by {@code "/module-info"}
+     *
+     * TOOD: For module m should {@code "m/package-info"} be rejected? 
+     * In other words, an unnamed package cannot be created at will in
+     * a named module? Is creating a source file for an unnamed module
+     * supported?
+     *
+     * @apiNote To use a particular {@linkplain
      * java.nio.charset.Charset charset} to encode the contents of the
      * file, an {@code OutputStreamWriter} with the chosen charset can
      * be created from the {@code OutputStream} from the returned
      * object. If the {@code Writer} from the returned object is
      * directly used for writing, its charset is determined by the

@@ -159,17 +181,19 @@
      * for this run.
      *
      * @param name  canonical (fully qualified) name of the principal type
      *          being declared in this file or a package name followed by
      *          {@code ".package-info"} for a package information file
-     * @param originatingElements type or package elements causally
+     *          or a module name followed by {@code "/module-info"}
+     *          for a module information file.
+     * @param originatingElements type or package or module elements causally
      * associated with the creation of this file, may be elided or
      * {@code null}
      * @return a {@code 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 type
+     * otherwise not valid for the entity requested to being created
      * @throws IOException if the file cannot be created
      */
     JavaFileObject createSourceFile(CharSequence name,
                                     Element... originatingElements) throws IOException;
 

@@ -182,14 +206,16 @@
      * about a package, including package annotations.  To create a
      * class file for a named package, have {@code name} be the
      * package's name followed by {@code ".package-info"}; creating a
      * class file for an unnamed package is not supported.
      *
-     * <p>To avoid subsequent errors, the contents of the class file
-     * should be compatible with the {@linkplain
-     * ProcessingEnvironment#getSourceVersion source version} being used
-     * for this run.
+     * <p>TODO:update in parallel to the above
+     *
+     * @apiNote To avoid subsequent errors, the contents of the class
+     * file should be compatible with the {@linkplain
+     * ProcessingEnvironment#getSourceVersion source version} being
+     * used for this run.
      *
      * @param name binary name of the type being written or a package name followed by
      *          {@code ".package-info"} for a package information file
      * @param originatingElements type or package elements causally
      * associated with the creation of this file, may be elided or

@@ -208,24 +234,30 @@
      * 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 locations {@link
      * StandardLocation#CLASS_OUTPUT CLASS_OUTPUT} and {@link
      * StandardLocation#SOURCE_OUTPUT SOURCE_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 of {@code location}, {@code pkg}, and
-     * {@code relativeName}.
+     * supported.  The resource may be named relative to some module
+     * and/or 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 of {@code location},
+     * {@code moduleAndPkg}, and {@code relativeName}.
+     *
+     * If {@code moduleAndPkg} contains a "{@code /}" character, the
+     * prefix before "{@code /}" character is the module name and the
+     * suffix after the "{@code /}" character is package
+     * name. Otherwise, the entire argument is interpreted as a
+     * package name.
      *
-     * <p>Files created via this method are not registered for
+     * <p>Files created via this method are <em>not</em> 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.
      *
      * @param location location of the new file
-     * @param pkg package relative to which the file should be named,
-     *          or the empty string if none
+     * @param moduleAndPkg module and/or package relative to which the file
+     *           should be named, or the empty string if none
      * @param relativeName final pathname components of the file
      * @param originatingElements type or package elements causally
      * associated with the creation of this file, may be elided or
      * {@code null}
      * @return a {@code FileObject} to write the new resource

@@ -234,30 +266,36 @@
      * created
      * @throws IllegalArgumentException for an unsupported location
      * @throws IllegalArgumentException if {@code relativeName} is not relative
      */
    FileObject createResource(JavaFileManager.Location location,
-                             CharSequence pkg,
+                             CharSequence moduleAndPkg,
                              CharSequence relativeName,
                              Element... originatingElements) throws IOException;
 
     /**
      * Returns an object for reading an existing resource.  The
      * locations {@link StandardLocation#CLASS_OUTPUT CLASS_OUTPUT}
      * and {@link StandardLocation#SOURCE_OUTPUT SOURCE_OUTPUT} must
      * be supported.
      *
+     * <p>If {@code moduleAndPkg} contains a "{@code /}" character, the
+     * prefix before "{@code /}" character is the module name and the
+     * suffix after the "{@code /}" character is package
+     * name. Otherwise, the entire argument is interpreted as a package
+     * name.
+     *
      * @param location location of the file
-     * @param pkg package relative to which the file should be searched,
-     *          or the empty string if none
+     * @param moduleAndPkg module and/or package relative to which the file 
+     *          should be searched for, or the empty string if none
      * @param relativeName final pathname components of the file
      * @return an object to read the file
      * @throws FilerException if the same pathname has already been
      * opened for writing
      * @throws IOException if the file cannot be opened
      * @throws IllegalArgumentException for an unsupported location
      * @throws IllegalArgumentException if {@code relativeName} is not relative
      */
     FileObject getResource(JavaFileManager.Location location,
-                           CharSequence pkg,
+                           CharSequence moduleAndPkg,
                            CharSequence relativeName) throws IOException;
 }
< prev index next >