5050import javax .lang .model .element .Element ;
5151import javax .lang .model .element .ElementKind ;
5252import javax .lang .model .element .ExecutableElement ;
53+ import javax .lang .model .element .PackageElement ;
5354import javax .lang .model .element .TypeElement ;
5455import javax .lang .model .type .MirroredTypeException ;
5556import javax .lang .model .type .TypeMirror ;
@@ -81,6 +82,8 @@ public class GraalvmReflectAnnontationProcessor extends AbstractProcessor {
8182 private final Gson gson = new GsonBuilder ().disableHtmlEscaping ().create ();
8283 /** {@link List} of {@link Reflect}. */
8384 private final Map <String , Reflect > reflects = new HashMap <>();
85+ /** Name of Annotation Package. */
86+ private String packageName = "default" ;
8487
8588 private TypeElement asTypeElement (final TypeMirror typeMirror ) {
8689 Types typeUtils = this .processingEnv .getTypeUtils ();
@@ -245,7 +248,7 @@ public boolean process(final Set<? extends TypeElement> annotations,
245248
246249 if (roundEnv .processingOver ()) {
247250
248- writeOutput ();
251+ writeOutput (packageName );
249252
250253 } else {
251254
@@ -394,6 +397,8 @@ private void processingReflectable(final RoundEnvironment roundEnv) {
394397
395398 for (Element element : roundEnv .getElementsAnnotatedWith (Reflectable .class )) {
396399
400+ setPackageName (element );
401+
397402 String className = getClassNameByType (element );
398403 LOGGER .log (LOGLEVEL , "processing 'Reflectable' annotation on class " + className );
399404
@@ -429,16 +434,29 @@ private void processingReflectable(final RoundEnvironment roundEnv) {
429434 /**
430435 * Load Reflectable Imports.
431436 *
432- * @param roundEnv {@link RoundEnvironment}s
437+ * @param roundEnv {@link RoundEnvironment}
433438 */
434439 private void processingReflectableImports (final RoundEnvironment roundEnv ) {
435440
436441 for (Element element : roundEnv .getElementsAnnotatedWith (ReflectableImport .class )) {
442+ setPackageName (element );
437443 processImportedClasses (element );
438444 processImportFiles (element );
439445 }
440446 }
441447
448+ private void setPackageName (final Element element ) {
449+ String name = getPackage (element );
450+ if (name != null && !name .isEmpty ()) {
451+ this .packageName = name ;
452+ }
453+ }
454+
455+ private String getPackage (final Element element ) {
456+ PackageElement pkg = processingEnv .getElementUtils ().getPackageOf (element );
457+ return pkg .getQualifiedName ().toString ();
458+ }
459+
442460 /**
443461 * Processing classes with 'ReflectableClass' annotation.
444462 *
@@ -486,6 +504,8 @@ private void processReflectableClasses(final RoundEnvironment roundEnv) {
486504
487505 for (Element element : roundEnv .getElementsAnnotatedWith (ReflectableClasses .class )) {
488506
507+ setPackageName (element );
508+
489509 String className = getClassNameByType (element );
490510 LOGGER .log (LOGLEVEL , "processing 'ReflectableClasses' annotation on class " + className );
491511
@@ -504,6 +524,9 @@ private void processReflectableClasses(final RoundEnvironment roundEnv) {
504524 Set .of (ReflectableClass .class , ReflectableClass .ReflectableClasses .class ));
505525
506526 for (Element element : reflectableClasses ) {
527+
528+ setPackageName (element );
529+
507530 String className = getClassNameByType (element );
508531 LOGGER .log (LOGLEVEL , "processing 'ReflectableClasses' annotation on class " + className );
509532
@@ -520,14 +543,12 @@ private String removePartsContainingDotFollowedByCapital(final String input) {
520543 }
521544
522545 /** Write Output File. */
523- private void writeOutput () {
546+ private void writeOutput (final String packageName ) {
524547
525548 try {
526549
527- String name = generateReflectConfigPath (this .reflects .keySet ());
528-
529550 FileObject file = this .processingEnv .getFiler ().createResource (StandardLocation .CLASS_OUTPUT ,
530- "" , "META-INF/native-image/" + name + "/reflect-config.json" );
551+ "" , "META-INF/native-image/" + packageName + "/reflect-config.json" );
531552
532553 List <Map <String , Object >> data =
533554 this .reflects .values ().stream ().map (Reflect ::data ).collect (Collectors .toList ());
0 commit comments