You can find the top-level class which encloses the annotated element, derive the file name and package name from it, and pass them to Filer.getResource. The returned FileObject can be converted to a URI with its toUri() method.
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).
Your image shows an absolute file path, not a URL. If you really wanted a file path, not a URL, it’s easy enough to obtain one instead of a URI:
Path path = Paths.get(file.getName()); fileLocation = path.toAbsolutePath().toString();
printMessage, which will cause the compiler to print the location.