javax.tools

接口
异常
java.lang.Object
  继承者 javax.tools.ForwardingJavaFileManager<M>
类型参数:
M - 此对象将转发到的文件管理器的类型
所有已实现的接口:
Closeable, Flushable, JavaFileManager, OptionChecker

public class ForwardingJavaFileManager<M extends JavaFileManager>
     
extends Object
implements JavaFileManager

将调用转发到给定的文件管理器。此类的子类可以重写其中某些方法,还可以提供附加字段和方法。

从以下版本开始:
1.6

嵌套类摘要
 
从接口 javax.tools.JavaFileManager 继承的嵌套类/接口
JavaFileManager.Location
 
字段摘要
protected  M fileManager
          一个文件管理器,所有方法都将委托给它。
 
构造方法摘要
protected ForwardingJavaFileManager(M fileManager)
          创建一个新的 ForwardingJavaFileManager 的实例。
 
方法摘要
 void close()
          释放此文件管理器直接或间接打开的所有资源。
 void flush()
          刷新此文件管理器直接或间接为输出打开的所有资源。
 ClassLoader getClassLoader(JavaFileManager.Location location)
          获取可从给定位置加载插件的类加载器。
 FileObject getFileForInput(JavaFileManager.Location location, String packageName, String relativeName)
          获取输入的文件对象,它表示给定位置处指定包中的指定相对名称
 FileObject getFileForOutput(JavaFileManager.Location location, String packageName, String relativeName, FileObject sibling)
          获取输出的文件对象,它表示给定位置处指定包中的指定相对名称
 JavaFileObject getJavaFileForInput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind)
          获取输入的文件对象,它表示给定位置处指定类型的指定类。
 JavaFileObject getJavaFileForOutput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind, FileObject sibling)
          获取输出的文件对象,它表示给定位置处指定类型的指定类。
 boolean handleOption(String current, Iterator<String> remaining)
          处理一个选项。
 boolean hasLocation(JavaFileManager.Location location)
          确定此文件管理器是否已知某位置。
 String inferBinaryName(JavaFileManager.Location location, JavaFileObject file)
          根据位置推断文件对象的二进制名称。
 boolean isSameFile(FileObject a, FileObject b)
          比较两个文件对象,如果它们表示相同的底层对象,则返回 true。
 int isSupportedOption(String option)
          确定是否支持给定选项,如果支持,则返回该选项所使用的参数数量。
 Iterable<JavaFileObject> list(JavaFileManager.Location location, String packageName, Set<JavaFileObject.Kind> kinds, boolean recurse)
          列出给定位置处符合给定标准的所有文件对象。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

fileManager

protected final M extends JavaFileManager fileManager
一个文件管理器,所有方法都将委托给它。

构造方法详细信息

ForwardingJavaFileManager

protected ForwardingJavaFileManager(M fileManager)
创建一个新的 ForwardingJavaFileManager 的实例。

参数:
fileManager - 委托给此文件管理器
方法详细信息

getClassLoader

public ClassLoader getClassLoader(JavaFileManager.Location location)
从接口 JavaFileManager 复制的描述
获取可从给定位置加载插件的类加载器。例如,要加载注释处理器,编译器将请求 ANNOTATION_PROCESSOR_PATH 位置的类加载器。

指定者:
接口 JavaFileManager 中的 getClassLoader
参数:
location - 位置
返回:
给定位置的类加载器;如果不能从给定位置加载插件或位置未知,则返回 null
抛出:
SecurityException - 如果在当前安全上下文中不能创建类加载器
IllegalStateException - 如果已经调用了 JavaFileManager.close() 并且不能重新打开此文件管理器

list

public Iterable<JavaFileObject> list(JavaFileManager.Location location,
                                     String packageName,
                                     Set<JavaFileObject.Kind> kinds,
                                     boolean recurse)
                              throws IOException
从接口 JavaFileManager 复制的描述
列出给定位置处符合给定标准的所有文件对象。如果 recurse 为 true,则列出“子包”中的文件对象。

注:即使给定位置对于此文件管理器是未知的,此方法也不会返回 null。未知位置也不会导致异常。

指定者:
接口 JavaFileManager 中的 list
参数:
location - 位置
packageName - 包名称
kinds - 只返回这些类型的对象
recurse - 如果为 true,则包含“子包”
返回:
符合给定标准的文件对象的 Iterable
抛出:
IOException - 如果发生 I/O 错误,或者已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器
IllegalStateException - 如果已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器

inferBinaryName

public String inferBinaryName(JavaFileManager.Location location,
                              JavaFileObject file)
从接口 JavaFileManager 复制的描述
根据位置推断文件对象的二进制名称。返回的二进制名称可能不是有效的 JLS 二进制名称。

指定者:
接口 JavaFileManager 中的 inferBinaryName
参数:
location - 位置
file - 文件对象
返回:
二进制名称;如果在给定位置没有找到文件对象,则返回 null
抛出:
IllegalStateException - 如果已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器

isSameFile

public boolean isSameFile(FileObject a,
                          FileObject b)
从接口 JavaFileManager 复制的描述
比较两个文件对象,如果它们表示相同的底层对象,则返回 true。

指定者:
接口 JavaFileManager 中的 isSameFile
参数:
a - 文件对象
b - 文件对象
返回:
如果给定的文件对象表示相同的底层对象,则返回 true
抛出:
IllegalArgumentException - 如果其中一个参数是用另一个文件管理器创建的,并且此文件管理器不支持外部文件对象

handleOption

public boolean handleOption(String current,
                            Iterator<String> remaining)
从接口 JavaFileManager 复制的描述
处理一个选项。如果 current 是此文件管理器的一个选项,则它将通过 remaining 获得该选项的所有参数并返回 true,否则返回 false。

指定者:
接口 JavaFileManager 中的 handleOption
参数:
current - 当前选项
remaining - 剩余选项
返回:
如果由此文件管理器处理此选项,则返回 true,否则返回 false
抛出:
IllegalArgumentException - 如果错误地使用了此文件管理器的选项
IllegalStateException - 如果已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器

hasLocation

public boolean hasLocation(JavaFileManager.Location location)
从接口 JavaFileManager 复制的描述
确定此文件管理器是否已知某位置。

指定者:
接口 JavaFileManager 中的 hasLocation
参数:
location - 位置
返回:
如果已知该位置,则返回 true

isSupportedOption

public int isSupportedOption(String option)
从接口 OptionChecker 复制的描述
确定是否支持给定选项,如果支持,则返回该选项所使用的参数数量。

指定者:
接口 OptionChecker 中的 isSupportedOption
参数:
option - 选项
返回:
给定选项所使用的参数数量;如果不支持该选项,则返回 -1

getJavaFileForInput

public JavaFileObject getJavaFileForInput(JavaFileManager.Location location,
                                          String className,
                                          JavaFileObject.Kind kind)
                                   throws IOException
从接口 JavaFileManager 复制的描述
获取输入的 文件对象,它表示给定位置处指定类型的指定类。

指定者:
接口 JavaFileManager 中的 getJavaFileForInput
参数:
location - 位置
className - 类的名称
kind - 文件的类型,必须是 SOURCECLASS
返回:
一个文件对象;如果文件不存在,则可能返回 null
抛出:
IllegalArgumentException - 如果位置对于此文件管理器未知并且该文件管理器不支持未知位置,或者类型无效
IllegalStateException - 如果已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器
IOException - 如果发生 I/O 错误,或者已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器

getJavaFileForOutput

public JavaFileObject getJavaFileForOutput(JavaFileManager.Location location,
                                           String className,
                                           JavaFileObject.Kind kind,
                                           FileObject sibling)
                                    throws IOException
从接口 JavaFileManager 复制的描述
获取输出的 文件对象,它表示给定位置处指定类型的指定类。

此文件管理器可以将 sibling 视为对放置输出位置的提示(可选)。没有指定此提示的确切语义。除非提供了类文件输出目录,否则 Sun 的编译器(例如 javac)将把类文件放到与原始源文件相同的目录下。要实现此行为,调用此方法时 javac 可以提供原始源文件作为 sibling。

指定者:
接口 JavaFileManager 中的 getJavaFileForOutput
参数:
location - 位置
className - 类的名称
kind - 文件的类型,必须是 SOURCECLASS
sibling - 用作位置提示的文件对象,可以为 null
返回:
输出的文件对象
抛出:
IllegalArgumentException - 如果 sibling 对于此文件管理器是未知的,或者位置对于此文件管理器是未知的并且该文件管理器不支持未知位置,或者类型无效
IllegalStateException - 已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器
IOException - 如果发生 I/O 错误,或者已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器

getFileForInput

public FileObject getFileForInput(JavaFileManager.Location location,
                                  String packageName,
                                  String relativeName)
                           throws IOException
从接口 JavaFileManager 复制的描述
获取输入的 文件对象,它表示给定位置处指定包中的指定 相对名称

如果返回的对象表示文件,则它必须是 JavaFileObject 的一个实例。

非严格意义上来讲,在位置、包名称和相对名称的串联中查找此方法返回的文件对象。例如,要在 SOURCE_PATH 位置处的 "com.sun.tools.javac" 包中查找属性文件 "resources/compiler.properties",将调用此方法,如下:

getFileForInput(SOURCE_PATH, "com.sun.tools.javac", "resources/compiler.properties");

如果在 Windows 上执行该调用,其中 SOURCE_PATH 设置为 "C:\Documents and Settings\UncleBob\src\share\classes",那么有效的结果将是表示文件 "C:\Documents and Settings\UncleBob\src\share\classes\com\sun\tools\javac\resources\compiler.properties" 的文件对象。

指定者:
接口 JavaFileManager 中的 getFileForInput
参数:
location - 位置
packageName - 包名称
relativeName - 相对名称
返回:
文件对象;如果文件不存在,则可能返回 null
抛出:
IllegalArgumentException - 如果位置对于此文件管理器是未知的并且该文件管理器不支持未知位置,或者 relativeName 无效
IllegalStateException - 如果已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器
IOException - 如果发生 I/O 错误,或者已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器

getFileForOutput

public FileObject getFileForOutput(JavaFileManager.Location location,
                                   String packageName,
                                   String relativeName,
                                   FileObject sibling)
                            throws IOException
从接口 JavaFileManager 复制的描述
获取输出的 文件对象,它表示给定位置处指定包中的指定 相对名称

此文件管理器可能将 sibling 视为对放置输出位置的提示(可选)。没有指定此提示的确切语义。除非提供了类文件输出目录,否则 Sun 的编译器(例如 javac)将把类文件放到与原始源文件相同的目录下。要实现此行为,调用此方法时 javac 可以提供原始源文件作为 sibling。

如果返回的对象表示文件,则它必须是 JavaFileObject 的一个实例。

非正式情况下,在位置、包名称和相对名称的串联或 sibling 参数的同级元素中查找此方法返回的文件对象。有关示例,请参阅 getFileForInput

指定者:
接口 JavaFileManager 中的 getFileForOutput
参数:
location - 位置
packageName - 包名称
relativeName - 相对名称
sibling - 用作位置提示的文件对象;可以为 null
返回:
文件对象
抛出:
IllegalArgumentException - 如果 sibling 对于此文件管理器是未知的,或者位置对于此文件管理器是未知的并且该文件管理器不支持未知位置,或者 relativeName 无效
IllegalStateException - 如果已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器
IOException - 如果发生 I/O 错误,或者已经调用了 JavaFileManager.close() 并且无法重新打开此文件管理器

flush

public void flush()
           throws IOException
从接口 JavaFileManager 复制的描述
刷新此文件管理器直接或间接为输出打开的所有资源。刷新已关闭的文件管理器没有任何效果。

指定者:
接口 Flushable 中的 flush
指定者:
接口 JavaFileManager 中的 flush
抛出:
IOException - 如果发生 I/O 错误
另请参见:
JavaFileManager.close()

close

public void close()
           throws IOException
从接口 JavaFileManager 复制的描述
释放此文件管理器直接或间接打开的所有资源。这会使得此文件管理器无效,除非明确允许,否则对此对象上的方法或通过此对象获取的所有对象进行后续调用都将导致不确定的结果。但是,关闭已经关闭的文件管理器没有任何效果。

指定者:
接口 Closeable 中的 close
指定者:
接口 JavaFileManager 中的 close
抛出:
IOException - 如果发生 I/O 错误
另请参见:
JavaFileManager.flush()