Ho bisogno di taggare alcune funzioni di Clojure come "speciali" in modo che il codice Java possa riconoscerle come tali utilizzando il reflection. Ho provato ad aggiungere un'annotazione a una funzione, ma a quanto pare non è supportata. Ho provato a reify
un'interfaccia che estende IFn
(in modo che il codice Java possa riconoscere l'oggetto funzione), ma non va bene perché Clojure non utilizza direttamente il metodo reificato come codice che implementa invoke
, ma piuttosto una chiamata indiretta a un Afunction
oggetto che sta effettivamente implementando il metodo (ho bisogno di taggare il vero metodo invoke
con il codice della funzione effettiva).Come taggare una funzione Clojure in modo che potessi riconoscerla con Java reflection
Qualche idea?
EDIT: anche la codifica in un modo che potrebbe essere raggiunto con la libreria ASM (invece di riflessione regolare) andrebbe bene, ma ho bisogno di codificare in qualche modo l'oggetto reale AFunction
o il metodo invoke
. Inoltre, non posso accedere all'oggetto reale AFunction
- Ho bisogno che il tag sia visibile sulla classe.
Grazie! Sfortunatamente, non ho nemmeno accesso all'oggetto IFn stesso, solo alla sua classe. Ho bisogno di taggare in qualche modo la classe (non ho nemmeno bisogno di allegare informazioni specifiche, solo un modo per determinare se la classe è "contrassegnata" in qualche modo). Ho pensato di etichettarlo facendo in modo che il metodo invoke specificasse che genera un'eccezione ben conosciuta, ma non c'è modo che io sappia farlo da Clojure. – pron
Puoi fornire alcuni esempi di codice di clojure e java per mostrare come vengono create le classi da clojure e accedute da Java in quanto ciò renderebbe la domanda più chiara – Ankur
Uso un JavaAgent per lo strumento di alcune classi. Mi viene notificato quando viene caricata una nuova classe. Mi piacerebbe in qualche modo taggare una funzione Clojure in modo che possa sapere se è necessaria la strumentazione. – pron