2011-10-13 35 views
5

Dưới đây là đoạn mã:Eclipse: mâu thuẫn với lời cảnh báo

class MyClass { 
    private native void foo(); 
} 

Đối trên, Eclipse (cụ thể là, 3.7.0) đưa ra một cảnh báo

Phương pháp foo() từ kiểu MyClass là không bao giờ sử dụng tại địa phương

Alright, nhưng khi tôi cố gắng để ngăn chặn các cảnh báo:

class MyClass { 
    @SuppressWarnings("unused") 
    private native void foo(); 
} 

Nó phàn nàn

@SuppressWarnings Unnecesary ("không sử dụng")

Vì vậy, có cách nào để làm cho nó dừng lại phàn nàn?

Cập nhật

Xin lỗi vì thông tin không đầy đủ - cảnh báo này chỉ được hiển thị trong một dự án AspectJ. Khi tôi tạo một dự án Java đơn giản và đặt lớp của tôi vào nó, tất cả đều hoạt động tốt.

Theo như tôi hiểu, AspectJ sử dụng trình biên dịch riêng của mình, vì vậy cảnh báo này phải được tạo ra bởi nó. Tôi đang sử dụng plug-in Công cụ phát triển AspectJ:

Version: 2.1.3.e37x-20110628-1900 
AspectJ version: 1.6.12.20110613132200 
+0

Hài hước, tôi không có cảnh báo thứ hai (theo Eclipse 3.5) – Shlublu

+0

... và tôi không thấy cảnh báo đầu tiên - "Phương thức foo() từ loại MyClass không bao giờ được sử dụng cục bộ". Lạ thật! –

+0

bạn có thể thử 'Project> Clean' và sau đó thực hiện xây dựng lại. Có lẽ cảnh báo đầu tiên là điểm đánh dấu cũ .. –

Trả lời

1

Bên trong một dự án Java, điều này tạo ra không có cảnh báo:

class MyClass { 
    private native void foo(); 
} 

này, tuy nhiên, tạo ra một cảnh báo Unnecessary @SuppressWarnings("unused"):

012.
class MyClass { 
    @SuppressWarnings("unused") 
    private native void foo(); 
} 

Bên trong dự án AspectJ, ví dụ đầu tiên tạo cảnh báo The method foo() from the type MyClass is never used locally và ví dụ thứ hai tạo ra cùng một cảnh báo như trong dự án Java. Đây có thể là lỗi AspectJ. Tôi khuyên bạn nên đưa ra một vấn đề trên bugzilla AspectJ.

https://bugs.eclipse.org/bugs/

Trình biên dịch AspectJ là một ngã ba của trình biên dịch JDT từ Eclipse 3.3. Vì vậy, có khả năng là lỗi này ban đầu trong Eclipse 3.3. Bây giờ Java 7 đã có sẵn, AspectJ có thể sẽ chuyển sang dùng Eclipse 3.7 hoặc 3.8 và nó sẽ nhận được bản sửa lỗi từ trình biên dịch JDT. Nhưng nó là giá trị nâng cao một lỗi anyway.

+0

Vâng, nó có vẻ giống như một lỗi Eclipse/AspectJ, vì vậy tôi đã gửi một vấn đề: https://bugs.eclipse.org/bugs/show_bug.cgi?id=213755. – Andy

0

Tôi vừa thử và không nhận được cảnh báo "không cần thiết ...". Bạn có chắc chắn rằng cảnh báo được phát hành bởi trình biên dịch java chứ không phải bởi một số công cụ khác như checkstyle hoặc findbugs?

Dù sao, có một vài trường hợp, trong đó phương thức riêng tư không được sử dụng có ý nghĩa.

+0

Thật không may, nó thực sự là một trường hợp khi không có cách nào để tránh tuyên bố phương pháp riêng không sử dụng. – Andy

0

Làm việc cho tôi. Tôi đang chạy Eclipse Indigo như bạn.

2

Danh sách @SuppressWarnings là trình biên dịch cụ thể. Trong Eclipse,

không sử dụng là vĩ mô cho unusedArgument, unusedImport, unusedLabel, unusedLocal, unusedPrivate và unusedThrown

Toàn bộ danh sách là ở đây: the list of valid @SuppressWarnings supported in Eclipse

+0

Để chính xác hơn, @SuppressWarnings không dành riêng cho Eclipse. Tuy nhiên, danh sách cảnh báo bị chặn bởi chú thích đó là trình biên dịch cụ thể. –

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