2013-05-07 38 views
8

Tôi có trình tạo tùy chỉnh chỉ tạo mã cho các lớp somes trong dự án của tôi. Các mã sau đây là lúc bắt đầu của phương pháp generate, và đặt tất cả các lớp tôi sẽ cần phải làm việc trên trong danh sách clazzesGWT TypeOracle.getTypes không trả về tất cả các loại

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

Mã này đã không thay đổi trong hơn một năm, nhưng kể từ tuần trước đó có vẻ như một vài lớp học không được đưa vào tài khoản bởi máy phát điện.

Sau khi đào một số, tôi phát hiện ra rằng những lớp học không phải là ngay cả trong danh sách trả về bởi oracle.getTypes()

  • Những lớp học bị bỏ qua không mới lớp tạo ra (một số bị bỏ không thay đổi trong vài tháng)
  • As far như tôi có thể nói, không có cách nào để phân biệt một lớp sẽ bị bỏ qua khỏi bất kỳ lớp nào khác
  • Không nâng cấp phiên bản gwt của chúng tôi (một số chúng tôi đang sử dụng 2.5.0, những người khác 2.5.1)
  • Không nâng cấp trong gói được sử dụng bởi những classe s hoặc
  • oracle.findType(MISSING_CLASS.class.getName()) lợi nhuận null
  • vấn đề chỉ xuất hiện đối với một số người, nhưng không phải trên các lớp cùng
  • đổi tên lớp có vấn đề dường như khắc phục sự cố

đoán tốt nhất của tôi sẽ là tôi có một vấn đề bộ nhớ cache ở đâu đó, nhưng tôi không biết phải tìm đâu.

+0

Bạn đã thử xóa nội dung của thư mục gwt-UnitCache chưa? Nó thường xuyên hơn không giúp sửa chữa các lỗi dường như lạ như thế này cho tôi. Ngoài ra, bạn có một số tên ví dụ về các lớp bị thiếu không? Khi đổi tên chúng giúp, bên cạnh một vấn đề liên quan đến bộ nhớ đệm này cũng có thể là tên liên quan. –

Trả lời

0

Như Mark Tielemans đã nêu trong nhận xét của mình, xóa thư mục gwt-UnitCache của bạn (nên ở gốc của dự án của bạn nếu bạn đang sử dụng Eclipse) và xây dựng lại. Điều đó sẽ khắc phục vấn đề cho bạn.

0

Có thể đã quá muộn để trả lời nhưng tôi đã gặp vấn đề này trong 3 ngày qua. Không có số tiền thanh toán bù trừ gwt-UnitCache thư mục đã được giúp đỡ. Cuối cùng đã tìm thấy vấn đề. Lớp không được nhận bởi oracle có tham chiếu đến một lớp gwt-ext và tôi đã không thừa hưởng gwt-ext trong định nghĩa mô-đun của tôi (tệp .gwt.xml). Việc xóa tham chiếu đó đã khắc phục sự cố. Vì vậy, việc sử dụng bất kỳ thứ gì trong lớp của bạn mà có thể không được tham chiếu trong định nghĩa mô-đun của bạn hoặc không phải là một phần có thể khiến lớp của bạn không bị Oracle thu thập. Chúc mừng!

0

T anh ấy thiếu lớp học không biên dịch đúng và âm thầm không thành công. Một nguyên nhân điển hình là nguồn siêu, bởi vì nếu không trình biên dịch java bình thường có thể đã bị biên dịch không thành công.

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

+0

Đó không phải là những gì @ anand-saha đã nói rồi sao? (mặc dù có thể được viết lại/cải tiến) –

+0

có. Câu trả lời đó đổ lỗi cho một tuyên bố thừa kế còn thiếu - đó cũng có thể là nguyên nhân, thay vì một nguồn siêu. Và có thể có hàng tá nguyên nhân tiềm năng khác khiến cho lớp đó không biên dịch đúng. –

Các vấn đề liên quan