下面列出了javax.tools.JavaFileObject.Kind#CLASS 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling) throws IOException {
if (Kind.CLASS != kind && Kind.SOURCE != kind)
throw new IOException("Unsupported output kind: " + kind);
if (!(location instanceof StandardLocation))
throw new IOException("Unsupported output location: " + location);
switch ((StandardLocation) location) {
case CLASS_OUTPUT:
return getOrCreateMemFileByClassName(className, this.classes, JavaClassFile.class);
case SOURCE_OUTPUT:
return getOrCreateMemFileByClassName(className, this.srcs, JavaSourceFile.class);
case CLASS_PATH:
case SOURCE_PATH:
case ANNOTATION_PROCESSOR_PATH:
case PLATFORM_CLASS_PATH:
default:
throw new IOException("Unsupported output location: " + location);
}
}
/**
* Constructs a memory file object.
* @param name binary name of the class to be stored in this file object
*/
MemoryFileObject(Location location, String name, JavaFileObject.Kind kind) {
super(URI.create("mfm:///" + name.replace('.','/') + kind.extension),
Kind.CLASS);
this.location = location;
this.name = name;
}
private void gatherFiles(ResourceFile root, ResourceFile file, List<JavaFileObject> accumulator,
Set<Kind> kinds, boolean recurse) {
ResourceFile[] listFiles = file.listFiles();
for (ResourceFile resourceFile : listFiles) {
if (resourceFile.isDirectory()) {
if (recurse) {
gatherFiles(root, resourceFile, accumulator, kinds, recurse);
}
}
else {
for (Kind kind : kinds) {
if (kind == Kind.CLASS) {
if (resourceFile.getName().endsWith(".class")) {
accumulator.add(createFileObject(root, resourceFile, kind));
break;
}
}
else if (kind == Kind.SOURCE) {
if (resourceFile.getName().endsWith(".java")) {
accumulator.add(createFileObject(root, resourceFile, kind));
break;
}
}
}
}
}
}
public static Kind getKind(String name) {
if (name.endsWith(Kind.CLASS.extension))
return Kind.CLASS;
else if (name.endsWith(Kind.SOURCE.extension))
return Kind.SOURCE;
else if (name.endsWith(Kind.HTML.extension))
return Kind.HTML;
else
return Kind.OTHER;
}
public JavaFileObject getJavaFileForInput(Location location, String className, Kind kind)
throws IOException {
if (location == StandardLocation.CLASS_OUTPUT
&& buffers.containsKey(className)
&& kind == Kind.CLASS) {
final byte[] bytes = buffers.get(className).toByteArray();
return new SimpleJavaFileObject(URI.create(className), kind) {
public InputStream openInputStream() {
return new ByteArrayInputStream(bytes);
}
};
}
return fileManager.getJavaFileForInput(location, className, kind);
}
public static Kind getKind(String name) {
if (name.endsWith(Kind.CLASS.extension))
return Kind.CLASS;
else if (name.endsWith(Kind.SOURCE.extension))
return Kind.SOURCE;
else if (name.endsWith(Kind.HTML.extension))
return Kind.HTML;
else
return Kind.OTHER;
}
@Override
public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind,
FileObject sibling) throws IOException {
if (kind == Kind.CLASS && location == StandardLocation.CLASS_OUTPUT) {
ByteCode byteCode = byteCodes.get(className);
if (byteCode == null) {
byteCode = new ByteCode(className, kind);
byteCodes.put(className, byteCode);
}
return byteCode;
}
return super.getJavaFileForOutput(location, className, kind, sibling);
}
@Override
public void visitExports(JCExports tree) {
Iterable<Symbol> packageContent = tree.directive.packge.members().getSymbols();
List<JavaFileObject> filesToCheck = List.nil();
boolean packageNotEmpty = false;
for (Symbol sym : packageContent) {
if (sym.kind != Kinds.Kind.TYP)
continue;
ClassSymbol csym = (ClassSymbol) sym;
if (sym.completer.isTerminal() ||
csym.classfile.getKind() == Kind.CLASS) {
packageNotEmpty = true;
filesToCheck = List.nil();
break;
}
if (csym.classfile.getKind() == Kind.SOURCE) {
filesToCheck = filesToCheck.prepend(csym.classfile);
}
}
for (JavaFileObject jfo : filesToCheck) {
if (findPackageInFile.findPackageNameOf(jfo) == tree.directive.packge.fullname) {
packageNotEmpty = true;
break;
}
}
if (!packageNotEmpty) {
log.error(tree.qualid.pos(), Errors.PackageEmptyOrNotFound(tree.directive.packge));
}
msym.directives = msym.directives.prepend(tree.directive);
}
@Override public JavaFileObject getJavaFileForOutput(Location location, String className, final Kind kind, FileObject sibling) throws IOException {
if (className.startsWith("lombok.dummy.ForceNewRound")) {
final String name = className.replace(".", "/") + kind.extension;
return LombokFileObjects.createEmpty(compiler, name, kind);
}
JavaFileObject fileObject = fileManager.getJavaFileForOutput(location, className, kind, sibling);
if (kind != Kind.CLASS) {
return fileObject;
}
return LombokFileObjects.createIntercepting(compiler, fileObject, className, diagnostics);
}
public static Kind getKind(String name) {
if (name.endsWith(Kind.CLASS.extension))
return Kind.CLASS;
else if (name.endsWith(Kind.SOURCE.extension))
return Kind.SOURCE;
else if (name.endsWith(Kind.HTML.extension))
return Kind.HTML;
else
return Kind.OTHER;
}
public static Kind getKind(String name) {
if (name.endsWith(Kind.CLASS.extension))
return Kind.CLASS;
else if (name.endsWith(Kind.SOURCE.extension))
return Kind.SOURCE;
else if (name.endsWith(Kind.HTML.extension))
return Kind.HTML;
else
return Kind.OTHER;
}
public static Kind getKind(String name) {
if (name.endsWith(Kind.CLASS.extension))
return Kind.CLASS;
else if (name.endsWith(Kind.SOURCE.extension))
return Kind.SOURCE;
else if (name.endsWith(Kind.HTML.extension))
return Kind.HTML;
else
return Kind.OTHER;
}
Output(String name) {
super(name, Kind.CLASS);
}
/**
* Constructs a JavaClassInArray object.
* @param name binary name of the class to be stored in this file object
*/
JavaClassInArray(String name) {
super(uriFromString("mfm:///" + name.replace('.','/') + Kind.CLASS.extension),
Kind.CLASS);
this.name = name;
}
Output(String name) {
super(name, Kind.CLASS);
}
Output(String name) {
super(name, Kind.CLASS);
}
Output(String name) {
super(name, Kind.CLASS);
}
/**
* Constructs a JavaClassInArray object.
* @param name binary name of the class to be stored in this file object
*/
JavaClassInArray(String name) {
super(uriFromString("mfm:///" + name.replace('.','/') + Kind.CLASS.extension),
Kind.CLASS);
this.name = name;
}
Output(String name) {
super(name, Kind.CLASS);
}
Output(String name) {
super(name, Kind.CLASS);
}