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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top