2013-05-07 21 views
8

Ho un generatore personalizzato che genera codice solo per classi somes nel mio progetto. Il seguente codice si trova all'inizio del metodo generate, e mette tutte le classi che avranno bisogno di lavorare su nella lista clazzesGWT TypeOracle.getTypes non restituisce tutti i tipi

TypeOracle oracle = context.getTypeOracle(); 
JClassType markerInterfaceType = oracle.findType(MY_PARENT_CLASS.class.getName()); 
List<JClassType> clazzes = new ArrayList<JClassType>(); 
for (JClassType classType : oracle.getTypes()) { 
    if (!classType.equals(markerInterfaceType) 
     && classType.isAssignableTo(markerInterfaceType)) { 
    clazzes.add(classType); 
    } 
} 

Questo codice è rimasta invariata per più di un anno, ma dalla scorsa settimana sembra che alcune classi non siano prese in considerazione dal generatore.

Dopo un po 'di scavo, ho scoperto che quelle classi non sono nemmeno nella lista restituiti da oracle.getTypes()

  • Quelle classi ignorati non sono di recente classi create (alcuni sono stati lasciati invariati per diversi mesi)
  • Per quanto come posso dire, non c'è modo di distinguere una classe che sarà ignorata da qualsiasi altra classe
  • Nessun aggiornamento nella nostra versione gwt è stato fatto (alcuni di noi utilizzano 2.5.0, altri 2.5.1)
  • Nessun aggiornamento nei pacchetti utilizzati da quelle classi s sia
  • oracle.findType(MISSING_CLASS.class.getName()) rendimenti null
  • il problema appare solo per alcune persone, ma non sulle stesse classi
  • rinominare classi problematici sembra correggere il problema

La mia ipotesi migliore sarebbe che ho un problema di cache da qualche parte, ma non ho idea di dove cercare.

+0

Hai provato cancellando il contenuto della cartella GWT-UnitCache? Più spesso aiuta a correggere errori apparentemente strani come questo per me. Inoltre, hai alcuni nomi di esempio delle classi mancanti? Poiché rinominarli aiuta, accanto a un problema relativo alla memorizzazione nella cache, questo potrebbe anche essere associato al nome. –

risposta

0

Come indicato da Mark Tielemans nel suo commento, eliminare la directory gwt-UnitCache (dovrebbe essere alla radice del progetto se si sta utilizzando Eclipse) e ricostruire. Questo dovrebbe risolvere il problema per te.

0

Forse è troppo tardi per la risposta, ma ho dovuto affrontare questo problema negli ultimi 3 giorni. Nessuna quantità di cancellazione della cartella gwt-UnitCache stava aiutando. Finalmente trovato il problema. La classe che non è stata rilevata da Oracle aveva un riferimento a una classe gwt-ext e non avevo ereditato gwt-ext nella definizione del mio modulo (file .gwt.xml). La rimozione di tale riferimento ha risolto il problema. Pertanto, l'utilizzo di qualsiasi elemento della classe che potrebbe non essere referenziato nella definizione del modulo o di cui non fa parte può far sì che la tua classe non venga rilevata da Oracle. Saluti!

0

T che manca di classe non compila a destra e che non riesce in silenzio. Una causa tipica sono le super fonti, perché altrimenti la normale compilazione java avrebbe già compilato la compilazione fallita.

This question asks how to figure out what line is actually failing silently inside that missing class.

+0

Non è quello che stava già dicendo @ anand-saha? (anche se potrebbe essere riformulato/migliorato) –

+0

sì. Questa risposta incolpa una dichiarazione ereditaria mancante, che potrebbe essere anche la causa, invece di una super fonte. E ci sono probabilmente una dozzina di altre potenziali cause per cui quella classe non viene compilata correttamente. –

Problemi correlati