2016-02-02 15 views
19

मेरे पास एक जावा एनोटेशन प्रोसेसर है जो संकलन के दौरान जावा फाइलों का एक गुच्छा उत्पन्न करता है। मैं एक्सटेंशन विधियों को जोड़कर उत्पन्न क्लास nicer कोटलिन में उपयोग करना चाहता हूं। मुझे कोटलिन मंचों पर बताया गया है कि जो कुछ मैं कोशिश कर सकता हूं वह एक कोटलिन फ़ाइल लिखना होगा जिसमें मेरा विस्तार कार्य शामिल है। मैंने यह कोशिश की है, मैंने Filer ऑब्जेक्ट का उपयोग इस फ़ाइल को StandardLocations.SOURCE_OUTPUT निर्देशिका में आउटपुट करने के लिए किया था। Intellij मेरी जेनरेट क्लास देख सकता है, और मैं विस्तार कार्यों के रूप में विस्तार कार्यों का उपयोग कर सकता हूं, लेकिन ऐप संकलित नहीं होगा क्योंकि संकलक को नई कोटलिन फ़ाइल नहीं मिल सकती है। क्या कोई तरीका है कि मैं एक नई कोटलिन फ़ाइल लिख सकता हूं जिसे कोटलिन कंपाइलर द्वारा उठाया जाएगा?एनोटेशन प्रोसेसर से कोटलिन फ़ाइल कैसे उत्पन्न करें?

+0

वास्तव में किस प्रकार आप अपने आवेदन संकलन कर रहे हैं? – yole

+0

कोटलिन-एंड्रॉइड ग्रेडल प्लगइन का उपयोग करना। क्षमा करें, यह एक बहुत ही महत्वपूर्ण जानकारी है। –

+0

क्या आप एक नमूना परियोजना पोस्ट कर सकते हैं जो इस मुद्दे को प्रदर्शित करता है? – miensol

उत्तर

2

कैप्टन के लिए आप स्रोत फ़ोल्डर प्राप्त कर सकते हैं।

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

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

दुर्भाग्य से यह kapt2 के लिए काम नहीं करता है (इस मुद्दे KT-14070 देखें)

आप संसाधन के लेखक के माध्यम से फ़ाइलों .kt बना सकते हैं

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

लेकिन अब के लिए आप संकलक दो बार आह्वान करने के लिए की जरूरत है compileDebugKotlin कार्य compileDebugJavaWithJavac कार्य द्वारा javax एनोटेशन प्रोसेसर का आह्वान करने से पहले चलता है)

0

अपनी फ़ाइलों को आउटपुट (उचित पैकग के साथ ई नाम) src/build/generated-src/kotlin/your/package/File.kt

और इस ऐड की तरह एक निर्देशिका में अपने build.gradle रहे हैं:

sourceSets { 
    main.java.srcDirs += 'build/generated-src/kotlin' 
} 
संबंधित मुद्दे