2013-05-07 6 views
8

Mam niestandardowy generator, który generuje kod tylko dla klas somes w moim projekcie. Poniższy kod jest na początku metody generate i umieszcza wszystkie klasy będę musiał pracować na liście clazzesGWT TypeOracle.getTypes nie zwraca wszystkich typów

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

Ten kod został niezmieniony od ponad roku, ale od ostatniego tygodnia wydaje się, że generator nie bierze pod uwagę kilku klas.

Po pewnym kopania, stwierdziliśmy, że te zajęcia nie są jeszcze na liście zwróconej przez oracle.getTypes()

  • te ignorowane klasy nie są nowo utworzone klasy (niektóre pozostały niezmienione przez kilka miesięcy)
  • Jak daleko jak mogę stwierdzić, nie ma sposobu na rozróżnienie klasy, która zostanie zignorowana z jakiejkolwiek innej klasy
  • Nie dokonano aktualizacji w naszej wersji gwt (niektórzy z nas używają 2.5.0, inni 2.5.1)
  • Brak aktualizacji w pakietach używanych przez te klasy s albo
  • oracle.findType(MISSING_CLASS.class.getName()) powraca null
  • problem pojawia się tylko dla niektórych osób, ale nie w tych samych klasach
  • zmiana nazwy problematycznych klas wydaje rozwiązania problemu

mój najlepszy przypuszczenie byłoby, że mam gdzieś problem z pamięcią podręczną, ale nie mam pojęcia, gdzie szukać.

+0

Próbowałeś usuwania zawartości folderu GWT-UnitCache? To często pomaga mi naprawiać pozornie dziwne błędy. Masz również przykładowe nazwy brakujących klas? Ponieważ zmiana nazwy pomaga, obok problemu związanego z buforowaniem równie dobrze może być związana z nazwą. –

Odpowiedz

0

Jak zaznaczył Mark Tielemans w swoim komentarzu, usuń swój katalog gwt-UnitCache (powinien być w katalogu głównym projektu, jeśli korzystasz z Eclipse) i przebuduj go. To powinno rozwiązać problem.

0

Może za późno na odpowiedź, ale miałem do czynienia z tym problemem przez ostatnie 3 dni. Nie pomagała żadna ilość usuwanego folderu gwt-UnitCache. W końcu znalazłem problem. Klasa, która nie została odebrana przez oracle, miała odniesienie do klasy gwt-ext i nie odziedziczyłem gwt-ext w definicji modułu (plik .gwt.xml). Usunięcie tego odniesienia rozwiązało problem. Używanie czegokolwiek w klasie, co może nie być odniesione w definicji modułu lub nie jest częścią może spowodować, że twoja klasa nie zostanie pobrana przez Oracle. Twoje zdrowie!

0

T Brakująca klasa nie kompiluje poprawnie, a po cichu nie. Typową przyczyną są super źródła:, ponieważ w przeciwnym razie normalna kompilacja Java byłaby już nieudaną kompilacją.

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

+0

Czy to w zasadzie to, co już mówili @ anand-saha? (choć można go przeredagować/poprawić) –

+0

tak. Ta odpowiedź zarzuca brakujące stwierdzenie dziedziczenia - które może być przyczyną również zamiast super źródła. Prawdopodobnie istnieje tuzin innych potencjalnych przyczyn, dla których ta klasa źle się kompiluje. –