venerdì 12 settembre 2008

JDE e Eclipse

Dopo un po' di tempo, riesco finalmente a scrivere un nuovo post. In questi giorni siamo stati molto impegnati ad aggiornare il sito Web di DataFox e le brochure di Desmo Finanza e Desmo Monitor Investimenti, in particolare per presentare le nuove funzionalità di Performance Contribution e Performance Attribution. Abbiamo anche pubblicato una demo statica del nuovo modulo "Portafogli WEB".

Ma torniamo a noi e allo sviluppo di applicazioni per BlackBerry. Come anticipato nel post precedente sto preparando una piccola demo dei componenti grafici messi a disposizione dalla libreria di RIM; ho iniziato utilizzando, come ambiente di sviluppo, il JDE 4.6.0 (di cui è appena uscita la versione definitiva), ma ho sentito la necessità di tornare ad Eclispe, vista la familiarità che ho con questo tool. Quindi ho installato la beta del JDE Plug-in for Eclipse, appoggiandolo ad uno degli Eclipse presenti sul mio computer. Fin qui tutto bene, ho creato il workspace per il BlackBerry e un progetto, in cui ho copiato quanto realizzato con il JDE. Anche l'emulatore ha funzionato senza problemi.

Quando ho iniziato a modificare il codice ho avuto una brutta sorpresa: il completamento automatico (Ctrl+Space) non funziona! Ma come è possibile? All'interno della classe principale, sottoclasse di MainScreen il Code Assist di Eclipse non fornisce nessun suggerimento, neanche per le classi base come String; al contrario, in altre classi figlie di Object tutto va a meraviglia. Poiché ritengo che questa funzionalità sia fondamentale, ho cercato di capire il motivo di questo strano comportamento. Dopo un po' di indagini e di tentativi, ho scoperto che alcune classi presenti nel JAR fornito con il JDE (net_rim_api.jar) risultano contenere una o più inner class, ma il corrispondente file .class (riconoscibile dalla presenza del $ nel nome) manca. Quando si crea una sottoclasse di queste classi (ad esempio UiApplication o MainScreen), il Code Assist non fornisce nessun suggerimento. In modo forse non molto ortodosso (ma bisogna fare di necessità virtù, no?), ho creato i file .class delle inner class mancanti, li ho aggiunti ad una mia versione del file JAR di libreria e mettendo quest'ultimo nel Build Path del progetto l'auto completamento ha iniziato a fare il suo dovere. Anche a run time non ci sono problemi, in quanto il JAR "arricchito" serve solo per l'editing e la compilazione e quindi le inner class fittizie non vengono neanche considerate dall'emulatore.

Pur avendo raggiunto il mio scopo, resto con due dubbi:
  • come mai le inner class mancano dal JAR? dimenticanza o protezione del codice dagli attacchi dei decompilatori?
  • perché Eclipse non gestisce in modo migliore questa situazione anomala?
Alla prossima, finalmente con la demo completata, anche grazie al Code Assist di Eclipse!

Nessun commento:

Ricerca personalizzata