Come navigare Grails base di codice sorgente per comprendere meglio il quadro?
-
21-12-2019 - |
Domanda
In genere in Primavera Source Suite di strumenti IDE Eclipse Maven progetto, se voglio vedere ciò che un framework/libreria metodo sta facendo dietro le quinte, posso ctrl + clic sul nome del metodo e che mi porterà a codice sorgente.Capisco che un sacco di Grails metodi sono aggiunti dinamicamente a runtime, quindi non è sempre possibile per l'IDE per sapere come arrivare a loro.Altrimenti posso cercare per classe, pacchetto Google, Github o la documentazione delle API.Qual è il modo migliore per fare questo con Grails nucleo di origine, per meglio comprendere il quadro?
Per esempio voglio vedere che cosa il metodo di risposta in un controller assomiglia e come la sua restituzione di un parametro chiamato "clubInstanceList" per il mio club/index gsp quando l'indice di metodo, assomiglia a questo:
def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
respond clubService.list(params), model:[clubInstanceCount: clubService.count()]
}
ctrl + click non funziona nell'IDE da quando questo metodo è aggiunto in fase di runtime.Ho cercato attraverso il Graal core source su github, ma non conosco la struttura del pacchetto per questo metodo di risposta su un controller.
Soluzione
Che potrebbe non essere una banale ricerca, perché il codice è generato durante la fase di compilazione, o possono essere aggiunte funzionalità per le classi a runtime.Questo è il prezzo che si paga quando si utilizza linguaggi dinamici.
Dinamica Metodi
Quando ho bisogno di trovare alcune funzionalità che non è così ovvio, ho iniziato cercando di trovare l'interno plugin che è responsabile per questo.In STS faccio ctrl
shift
T
e di ricerca per *GrailsPlugin*
.È possibile controllare le modifiche al runtime in doWithDynamicMethods
chiusura del plugin.
Per esempio, Grails hanno il ControllersGrailsPlugin
classe di aggiungere il databinding caratteristiche per le classi controller.
Ricerca Di Metodi
Dal momento che non sono riuscito a trovare tutto ciò che riguarda il respond
metodo in questo plugin descrittore, questo è probabilmente fatto per la compilazione.Si potrebbe utilizzare ctrl
H
, e fare una ricerca Java, marcatura method
nella casella "cerca" di dialogo.Nel scope
mark workspace
e STS cerca Grails classi di troppo.
La Risposta
Quindi la risposta che la tua domanda è la ControllersRestApi
classe, e l'ho trovato usando il "metodo di ricerca" approccio.
Altri suggerimenti
Ho avuto la domanda identica e ho trovato la risposta da Sergio di essere abbastanza utile, ma ecco un altro metodo: carica il debugger e passo attraverso l'uso di F5.Ora, questo può essere estenuante a meno che non abiliti i filtri di passaggio (vedere GGTS / STS / Aiuto Eclipse).In particolare, consiglio di filtrare org.springsource.loaded.*
, oltre ai pacchetti preselezionati.Ciò libera da molto la riflessione e le parti dinamiche che - almeno in casi come questo - non ti interessa.
Aggiungerò anche che la mia ricerca ha trovato questo problema per migliorare la documentazione del metodo di risposta:
https://jira.grails.org/browse/grails-10721 .
Quindi non siamo gli unici a graffiare le nostre teste a questo.