2010-05-20 31 views
6

Tôi đang làm việc trên một plugin Eclipse để sửa đổi mã Java trong dự án của người dùng.JDT Eclipse: Gọi 'thụt lề chính xác' theo chương trình?

Về cơ bản là kết quả của plugin này là chú thích Java được thêm vào một số phương pháp, vì vậy

void foo() { ... } 

trở thành

@MyAnnotation 
void foo() { ... } 

Ngoại trừ việc nó không hoàn toàn giống như thế; thụt đầu dòng trên chú thích vừa được chèn vào là thiếu sót (cụ thể, chú thích mới là tất cả các cách để phía bên tay trái của dòng). Tôi muốn thực hiện tất cả các thay đổi đối với tệp và sau đó gọi theo chương trình là "Chấm dứt chính xác".

Có ai biết cách thực hiện việc này không? Tôi không thể tìm thấy câu trả lời ở đây hoặc trong diễn đàn JDT, và tất cả các lớp có liên quan (IndentAction, JavaIndenter) đều nằm trong gói nội bộ mà tôi không được sử dụng ...

Cảm ơn!

+0

Trông giống như một điểm khởi đầu tốt có thể là: org.eclipse.jdt.core.formatter.CodeFormatterApplication –

Trả lời

6

Tôi nghĩ mình có thể đã tìm ra giải pháp mình muốn. Đoán tôi nên dành nhiều thời gian tìm kiếm trước khi yêu cầu ... nhưng để tham khảo trong tương lai, đây là những gì tôi đã làm! Các công cụ tốt là trong ToolFactory ...

import org.eclipse.jdt.core.ToolFactory; 
import org.eclipse.jdt.core.formatter.CodeFormatter; 
import org.eclipse.jdt.core.ISourceRange; 
import org.eclipse.text.edits.TextEdit; 
import org.eclipse.jdt.core.ICompilationUnit; 

... 

ICompilationUnit cu = ... 

... 

CodeFormatter formatter = ToolFactory.createCodeFormatter(null); 
ISourceRange range = cu.getSourceRange(); 
TextEdit indent_edit = 
    formatter.format(CodeFormatter.K_COMPILATION_UNIT, 
    cu.getSource(), range.getOffset(), range.getLength(), 0, null); 
cu.applyTextEdit(indent_edit, null); 

cu.reconcile(); 

Định dạng lại toàn bộ tệp. Có những lựa chọn khác nếu bạn cần phải định dạng lại ít ...

+1

tôi đoán điều này sẽ sử dụng trình định dạng mặc định. bạn đã tìm ra cách để xác định một trình định dạng khác? –

-1

Có thể dễ dàng thêm thụt đầu dòng khi bạn xử lý mã Java.

Plugin Eclipse của bạn phải đọc dòng void foo() { ... } để biết thêm @MyAnnotation, phải không? Chỉ cần lấy thụt đầu dòng từ dòng Java và thêm chú thích của bạn vào thụt đầu dòng.

+0

Cảm ơn Gilbert, nhưng thực sự tôi đã không đọc dòng ... Tôi nhận được vị trí phương thức từ MethodDeclaration.getStartPosition() nơi MethodDeclaration nằm trong gói org.eclipse.jdt.core.dom. Bây giờ tôi có thể quay trở lại và sao chép những gì trước khi khai báo phương thức từ đầu của dòng, nhưng tôi không muốn sao chép một loạt rác nếu lập trình viên sử dụng một số định dạng thay thế ... –

+0

Ok, tôi đã không nhìn thấy những gói org.eclipse.jdt trước đây. Bạn đang thêm chú thích của mình vào mã nguồn Java như thế nào? –

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