2016-02-02 30 views
19

Tôi có một bộ xử lý chú thích java tạo ra một loạt các tệp java trong quá trình biên dịch. Tôi muốn tạo các lớp được tạo đẹp hơn để sử dụng trong kotlin bằng cách thêm các phương thức mở rộng. Tôi đã được nói trên các diễn đàn kotlin rằng một cái gì đó tôi có thể thử sẽ được viết một tập tin kotlin có chứa các chức năng mở rộng của tôi. Tôi đã thử điều này, tôi đã sử dụng đối tượng Filer để tạo tệp này xuất nó vào thư mục StandardLocations.SOURCE_OUTPUT. Intellij có thể thấy lớp được tạo của tôi và tôi có thể sử dụng các chức năng mở rộng như dự định, nhưng ứng dụng sẽ không biên dịch vì trình biên dịch không thể tìm thấy tệp kotlin mới. Có cách nào tôi có thể viết một tập tin kotlin mới mà sẽ được chọn bởi trình biên dịch kotlin?Cách tạo tệp kotlin từ bộ xử lý chú thích?

+0

Làm thế nào chính xác được bạn biên dịch ứng dụng của bạn? – yole

+0

Sử dụng plugin gradot kotlin-android. Xin lỗi, đó là một chi tiết khá quan trọng. –

+0

Bạn có thể đăng một dự án mẫu thể hiện vấn đề này không? – miensol

Trả lời

2

Đối với kapt bạn có thể nhận thư mục nguồn qua.

Map<String, String> options = processingEnv.getOptions(); 
       String generatedPath = options.get("kapt.kotlin.generated"); 

String path = generatedPath 
        .replaceAll("(.*)tmp(/kapt/debug/)kotlinGenerated", 
          "$1generated/source$2"); 

Đáng tiếc là nó không làm việc cho kapt2 (xem vấn đề KT-14070)

Bạn cũng có thể tạo .kt file qua nhà văn tài nguyên

Writer w = processingEnv.getFiler().createResource(SOURCE_OUTPUT, "package_name", "Sample.kt") 

Nhưng bây giờ bạn cần phải gọi trình biên dịch hai lần tác vụ compileDebugKotlin chạy trước khi gọi trình xử lý chú thích javax bằng tác vụ compileDebugJavaWithJavac)

0

Xuất tệp của bạn (với gói thích hợp tên e) vào một thư mục như src/build/generated-src/kotlin/your/package/File.kt

và thêm video này vào build.gradle của bạn:

sourceSets { 
    main.java.srcDirs += 'build/generated-src/kotlin' 
} 
Các vấn đề liên quan