|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
public interface JavaCompiler
Java プログラムから Java™ プログラミング言語コンパイラを呼び出すインタフェースです。
コンパイラは、コンパイル中にエラーメッセージなどの診断情報を生成することがあります。診断リスナーが指定されている場合、診断情報はこのリスナーに提供されます。リスナーが指定されていない場合、診断情報はなんらかの形式 (未指定) でフォーマットされ、デフォルトの出力に書き込まれます。このデフォルトの出力は、特に指定されていなければ System.err になります。診断リスナーが指定されていても、一部の診断情報が Diagnostic に適合しない場合があります。この場合、この診断情報はデフォルトの出力に書き込まれます。
コンパイラツールには、標準ファイルマネージャーが関連付けられています。このファイルマネージャーは、コンパイラツールのネイティブの (組み込み型の) ファイルマネージャーです。標準ファイルマネージャーを取得するには、getStandardFileManager を呼び出します。
コンパイラツールは、追加要件 (詳細は下記のメソッドを参照) が満たされているかぎりは、任意のファイルマネージャーで機能する必要があります。ファイルマネージャーが指定されなかった場合、コンパイラツールは、標準ファイルマネージャー (たとえば getStandardFileManager によって返されるファイルマネージャー) を使用します。
このインタフェースを実装するインスタンスは、『Java 言語仕様』に準拠していて、かつ『Java 仮想マシン仕様』に準拠したクラスファイルを生成する必要があります。これらの仕様のバージョンは、Tool インタフェースに定義されています。
さらに、このインタフェースのインスタンスのうち、SourceVersion.RELEASE_6 以上をサポートするものは、注釈処理もサポートする必要があります。
コンパイラは、診断リスナーとファイルマネージャーの 2 つのサービスに依存しています。このパッケージに含まれるほとんどのクラスおよびインタフェースはコンパイラ (およびツール一般) の API を定義していますが、DiagnosticListener、JavaFileManager、FileObject、および JavaFileObject の各インタフェースはアプリケーションで使用するためのものではありません。これらのインタフェースは、コンパイラ用のカスタムサービスを提供する目的で実装され、使用されます。したがって、コンパイラの SPI を定義します。
このパッケージには、SPI の実装を簡便化し、コンパイラの動作をカスタマイズするためのクラスおよびインタフェースが多数含まれています。
StandardJavaFileManager
Files[] files1 = ... ; // input for first compilation task
Files[] files2 = ... ; // input for second compilation task
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> compilationUnits1 =
fileManager.getJavaFileObjectsFromFiles(Arrays.asList(files1));
compiler.getTask(null, fileManager, null, null, null, compilationUnits1).call();
Iterable<? extends JavaFileObject> compilationUnits2 =
fileManager.getJavaFileObjects(files2); // use alternative method
// reuse the same file manager to allow caching of jar files
compiler.getTask(null, fileManager, null, null, null, compilationUnits2).call();
fileManager.close();
DiagnosticCollector
Iterable<? extends JavaFileObject> compilationUnits = ...;
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits).call();
for (Diagnostic diagnostic : diagnostics.getDiagnostics())
System.out.format("Error on line %d in %d%n",
diagnostic.getLineNumber()
diagnostic.getSource().toUri());
fileManager.close();
ForwardingJavaFileManager、ForwardingFileObject、および ForwardingJavaFileObject
final Logger logger = ...;
Iterable<? extends JavaFileObject> compilationUnits = ...;
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager stdFileManager = compiler.getStandardFileManager(null, null, null);
JavaFileManager fileManager = new ForwardingJavaFileManager(stdFileManager) {
public void flush() {
logger.entering(StandardJavaFileManager.class.getName(), "flush");
super.flush();
logger.exiting(StandardJavaFileManager.class.getName(), "flush");
}
};
compiler.getTask(null, fileManager, null, null, null, compilationUnits).call();
SimpleJavaFileObject
/**
* A file object used to represent source coming from a string.
*/
public class JavaSourceFromString extends SimpleJavaFileObject {
/**
* The source code of this "file".
*/
final String code;
/**
* Constructs a new JavaSourceFromString.
* @param name the name of the compilation unit represented by this file object
* @param code the source code for the compilation unit represented by this file object
*/
JavaSourceFromString(String name, String code) {
super(URI.create("string:///" + name.replace('.','/') + Kind.SOURCE.extension),
Kind.SOURCE);
this.code = code;
}
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return code;
}
}
DiagnosticListener,
Diagnostic,
JavaFileManager| 入れ子のクラスの概要 | |
|---|---|
static interface |
JavaCompiler.CompilationTask
コンパイルタスクの将来を表すインタフェースです。 |
| メソッドの概要 | |
|---|---|
StandardJavaFileManager |
getStandardFileManager(DiagnosticListener<? super JavaFileObject> diagnosticListener,
Locale locale,
Charset charset)
このツールの標準ファイルマネージャー実装の新しいインスタンスを取得します。 |
JavaCompiler.CompilationTask |
getTask(Writer out,
JavaFileManager fileManager,
DiagnosticListener<? super JavaFileObject> diagnosticListener,
Iterable<String> options,
Iterable<String> classes,
Iterable<? extends JavaFileObject> compilationUnits)
指定のコンポーネントおよび引数を持つコンパイルタスクの将来を作成します。 |
| インタフェース javax.tools.Tool から継承されたメソッド |
|---|
getSourceVersions, run |
| インタフェース javax.tools.OptionChecker から継承されたメソッド |
|---|
isSupportedOption |
| メソッドの詳細 |
|---|
JavaCompiler.CompilationTask getTask(Writer out,
JavaFileManager fileManager,
DiagnosticListener<? super JavaFileObject> diagnosticListener,
Iterable<String> options,
Iterable<String> classes,
Iterable<? extends JavaFileObject> compilationUnits)
ファイルマネージャーが指定されている場合、StandardLocation に定義されているすべての場所を処理できなければいけません。
out - コンパイラからの追加出力に使用する Writer。null の場合は System.err を使用fileManager - ファイルマネージャー。null の場合はコンパイラの標準ファイルマネージャーを使用diagnosticListener - 診断リスナー。null の場合、コンパイラのデフォルトのメソッドを使って診断情報を報告options - コンパイラオプション。null の場合、オプションは存在しないclasses - クラス名 (注釈処理用)。null の場合、クラス名は存在しないcompilationUnits - コンパイル対象のコンパイルユニット。null の場合、コンパイルユニットは存在しない
RuntimeException - ユーザー指定のコンポーネント内で、回復不可能なエラーが発生した場合。cause はユーザーコード内のエラー
IllegalArgumentException - ソースとは別の種類のコンパイルユニットが指定された場合
StandardJavaFileManager getStandardFileManager(DiagnosticListener<? super JavaFileObject> diagnosticListener,
Locale locale,
Charset charset)
標準ファイルマネージャーは、flush または close の呼び出しのあとでアクセスされると、自動的に再起動します。標準ファイルマネージャーは、その他のツールから利用できなければいけません。
diagnosticListener - 致命的でない診断情報用の診断リスナー。null の場合、コンパイラのデフォルトのメソッドを使って診断情報を報告locale - 診断情報のフォーマット時に適用されるロケール。null の場合、デフォルトのロケールが適用されるcharset - バイトのデコードに使用された文字セット。null の場合、プラットフォームのデフォルトの文字セットを使用
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。