2013-05-07 4 views
8

Ich habe einen benutzerdefinierten Generator, der Code nur für einige Klassen in meinem Projekt generiert. Der folgende Code ist zu Beginn des generate Methode und stellt alle Klassen, die ich benötigt, in der clazzes Liste arbeiten aufGWT TypeOracle.getTypes gibt nicht alle Typen zurück

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); 
    } 
} 

Dieser Code ist seit mehr als einem Jahr unverändert, aber seit der letzten Woche hat es scheint, dass ein paar Klassen vom Generator nicht berücksichtigt werden.

Nach einigem Graben, fand ich, dass diese Klassen nicht einmal in der Liste zurück von oracle.getTypes()

  • Diese ignoriert Klassen sind nicht neu Klassen erstellt (zum Teil mehrere Monate unverändert gelassen wurden)
  • Soweit Wie ich sagen kann, gibt es keine Möglichkeit, eine Klasse zu unterscheiden, die von keiner anderen Klasse ignoriert wird
  • Kein Upgrade in unserer gwt-Version wurde gemacht (einige von uns verwenden 2.5.0, andere 2.5.1)
  • Keine Aktualisierung in Paketen, die von diesen Klassen verwendet werden s entweder
  • oracle.findType(MISSING_CLASS.class.getName()) kehrt null
  • das Problem wird nur für einige Leute, aber nicht auf den gleichen Klassen
  • Umbenennung problematischen Klassen das Problem

Meine beste Vermutung zu korrigieren scheint wäre, dass ich habe ein Cache-Problem irgendwo, aber ich habe keine Ahnung, wo ich suchen soll.

+0

Haben Sie den Inhalt gwt-UnitCache Ordner zu löschen versucht? Es hilft oft dabei, scheinbar seltsame Fehler wie diese für mich zu beheben. Haben Sie auch einige Beispielnamen für die fehlenden Klassen? Wenn sie umbenannt werden, kann dies neben einem Caching-Problem auch mit dem Namen zusammenhängen. –

Antwort

0

Wie Mark Tielemans in seinem Kommentar sagte, löschen Sie Ihr gwt-UnitCache-Verzeichnis (sollte im Wurzelverzeichnis Ihres Projekts sein, wenn Sie Eclipse verwenden) und neu aufbauen. Das sollte das Problem für Sie beheben.

0

Vielleicht zu spät für die Antwort, aber ich war dieses Problem für die letzten 3 Tage. Keine Menge von Clearing gwt-UnitCache Ordner half. Endlich das Problem gefunden. Die Klasse, die nicht von Orakel aufgenommen wurde, hatte einen Verweis auf eine gwt-ext-Klasse und ich hatte gwt-ext in meiner Moduldefinition (.gwt.xml-Datei) nicht geerbt. Durch das Entfernen dieser Referenz wurde das Problem behoben. Wenn Sie also etwas in Ihrer Klasse verwenden, auf das in Ihrer Moduldefinition möglicherweise nicht verwiesen wird oder das nicht Teil der Klasse ist, kann Ihre Klasse nicht von Oracle abgeholt werden. Prost!

0

T Die fehlende Klasse kompiliert nicht richtig, und das schlägt im Hintergrund fehl. Eine typische Ursache ist Superquellen, da sonst die normale Java-Kompilierung bereits fehlgeschlagen wäre.

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

+0

Ist das nicht das, was @anand-saha schon gesagt hat? (obwohl könnte umformuliert/verbessert werden) –

+0

ja. Diese Antwort macht eine fehlende Vererbung verantwortlich - was auch die Ursache sein könnte, anstatt einer Superquelle. Und es gibt wahrscheinlich ein Dutzend andere mögliche Ursachen, warum diese Klasse nicht richtig kompiliert. –