Ciao, vorrei inizializzare un attributo annotato via APT usando il sun javac tool
Il mio problema da spiegare è abbastanza semplice ma non riesco a venirne a capo.

Quello che intendo fare è agganciare una inizializzazione a un campo annotato. Esempio:

codice:
@MyAnnotation
public Type field;
in

codice:
@MyAnnotation
public Type field = MyClass.method(args);
Nella mia applicazione di test ho un campo String annotato con una mia annotazione che una volta ripescata tramite APT provo a instrumentare con il tool di javac ,

ecco il pezzo di codice saliente che vorrebbe trasformare il campo :

String pewe; -> String pewe = cancellami.Pewe.giveMe("... unreal");


codice:
JCTree.JCVariableDecl fieldNode = (JCTree.JCVariableDecl) elementUtils.getTree(field);
    ..
    ..
    JCMethodInvocation invocationPewe = maker.Apply( nil, ident(" cancellami.Pewe.giveMe"),List.<JCExpression>of(maker.Literal("... unreal")));
CExpressionStatement execPewe = maker.Exec(invocationPewe);
 fieldNode.init = execPewe.expr;

la classe Pewe è la seguente :

codice:
    package cancellami;


    public class Pewe {
    
        private String ss;
        
        public Pewe(String s) {
            this.ss = s; 
        }
    
        @Override
        public String toString() {
            return giveMe(ss);
        }
    
        public static String giveMe(String word){
            return "this is the word: "+word;
        }
        
    }
la compilazione però fallisce perché non trova il package "cancellami" .. che invece esiste benissimo..


package cancellami does not exist
public class TestMain { 1 error ..
.

Ma se invece cambio il tipo dell'attributo in Pewe per esempio, e nel processore di annotazioni inizializzo l'attributo come di seguito tutto funziona e mi ritrovo iniettato il valore correttamente.

codice:
    JCExpression newPewe = maker.NewClass(null, null, ident("cancellami.Pewe"), List.<JCExpression>of(maker.Literal("... unreal")), null);
                
    fieldNode.init = newPewe;

Vi prego di aiutarmi perché non so più dove sbattere la testa e in giro non trovo la giusta documentazione.. :S