2011-10-24 14 views
8

में नया * पैकेज * बनाएं, स्कैला कंपाइलर प्लगइन में नया कोड जेनरेट करने के लिए मेरी खोज में, अब मैंने वर्किंग क्लासेस बनाए हैं। अगला तार्किक कदम उन वर्गों को एक नए, गैर-मौजूदा पैकेज में रखना है। जावा में, एक पैकेज मूल रूप से एक निर्देशिका नाम है, लेकिन स्कैला में एक पैकेज अधिक जटिल लगता है। अब तक मुझे एक उदाहरण नहीं मिला है/मान्यता मिली है जहां एक कंपाइलर प्लगइन एक नया पैकेज बनाता है।स्कैला कंपाइलर प्लगइन

समझ के अपने मौजूदा स्तर पर, मुझे लगता है कि है कि मैं के साथ पहली बार एक पैकेज प्रतीक बनाने के लिए की आवश्यकता होगी:

parentPackage.newPackage(...) 
// ... 

और बाद में की तुलना में PackageDef साथ पैकेज के लिए एक पेड़ पैदा करते हैं। लेकिन पैकेजडिफ प्रतीक के रूप में प्रतीक नहीं लेता है, जैसा कि कोई उम्मीद करेगा, और खोज करेगा:

Scala newPackage PackageDef 

कुछ भी उपयोगी नहीं हुआ। तो ऐसा लगता है कि मुझे उन दोनों चरणों को एक साथ करने की आवश्यकता नहीं है। संभवतः मेरे लिए कंपाइलर द्वारा किया जाता है, लेकिन मुझे नहीं पता कि कौन सा है। अब तक, क्या मैं इस तरह दिखता है:

val newPkg = parentPackage.newPackage(NoPosition, newTermName(name)) 
newPkg.moduleClass.setInfo(new PackageClassInfoType(new Scope, 
    newPkg.moduleClass)) 
newPkg.setInfo(newPkg.moduleClass.tpe) 
parentPackage.info.decls.enter(newPkg) 
// ... 
val newPkgTree = PackageDef(Ident(newPkg.name), List(ClassDef(...))) 
+0

आप अटक कहाँ से मिली? यह अब तक अच्छा लग रहा है। आप शायद पेड़ को मौजूदा संकलन इकाई में जोड़ना चाहते हैं, अन्यथा आपके पेड़ों के लिए कोई कोड नहीं बनाया जाएगा। –

+0

ईमानदार होने के लिए, मुझे याद नहीं है। मैंने स्कैला मेलिंग सूची पर भी पूछा, और वहां कोई ठोस जवाब नहीं मिला, इसलिए मैंने मूल रूप से प्लगइन लिखने को छोड़ दिया। मैंने अभी और अधिक कोड लिखा है, और यह गुस्सा हो रहा है, लेकिन कुछ भी काम नहीं किया। –

+0

मेलिंग सूची लिंक: http://groups.google.com/group/scala-language/browse_thread/thread/963923c78201f5e6 मुझे जो चाहिए वह सबसे सरल उदाहरण है जहां कोई ट्रांसफॉर्म() या transformStats() में है, और वहां से एक बनाता है एक पूरी तरह से असंबंधित वर्ग में पूरी तरह से असंबंधित वर्ग। वर्तमान पैकेज के अंदर, रूट पैकेज स्तर पर पेड़ जोड़ने का एक तरीका होना चाहिए। –

उत्तर

संबंधित मुद्दे