[英]Annotation Processor Links to a file
I did make my custom annotation processor class, and it's working fine, but I would like to print a message when raise an error, and add the link of file where raise that error.我确实制作了我的自定义注释处理器 class,它工作正常,但我想在引发错误时打印一条消息,并添加引发该错误的文件链接。
if(baseUrl.isEmpty()) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Note: The url field must not be empty, {@link Endpoints.java:9}");
}
You can find the top-level class which encloses the annoated element, derive the file name and package name from it, and pass them to Filter.getResource .您可以找到包含注释元素的顶级 class,从中派生文件名和 package 名称,并将它们传递给Filter.getResource 。 The returned FileObject can be converted to a URI with its
toUri()
method.返回的 FileObject 可以使用其
toUri()
方法转换为 URI。
if (baseUrl.isEmpty()) {
String filename = null;
String packageName = null;
Element owner = element;
do {
if (owner instanceof TypeElement type
&& type.getNestingKind() == NestingKind.TOP_LEVEL) {
filename = type.getSimpleName() + ".java";
PackageElement pkg =
processingEnv.getElementUtils().getPackageOf(type);
packageName = pkg.getQualifiedName().toString();
ModuleElement mod =
processingEnv.getElementUtils().getModuleOf(type);
if (mod != null && !mod.isUnnamed()) {
packageName = mod.getQualifiedName() + "/" + packageName;
}
break;
}
owner = owner.getEnclosingElement();
} while (owner != null);
String fileLocation = "(file unknown)";
if (filename != null && packageName != null) {
try {
FileObject file = processingEnv.getFiler().getResource(
StandardLocation.CLASS_PATH, packageName, filename);
fileLocation = file.toUri().toString();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
"Note: The url field must not be empty, " + fileLocation, element);
}
The above code assumes element
is an Element returned by RoundEnvironment.getElementsAnnotatedWith (or RoundEnvironment.getElementsAnnotatedWithAny).上面的代码假设
element
是RoundEnvironment.getElementsAnnotatedWith (或 RoundEnvironment.getElementsAnnotatedWithAny)返回的 Element。
Your image shows an absolute file path, not a URL.您的图像显示的是绝对文件路径,而不是 URL。 If you really wanted a file path, not a URL, it's easy enough to obtain one instead of a URI:
如果您真的想要一个文件路径,而不是 URL,那么获取一个而不是 URI 很容易:
Path path = Paths.get(file.getName());
fileLocation = path.toAbsolutePath().toString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.