2012-12-10 26 views
16

के साथ विधि निकाय में कोड स्निपेट कैसे जोड़ें I JDT/AST के साथ जावा स्रोत कोड जेनरेट करने का प्रयास कर रहा हूं। अब मेरे पास MethodDeclaration है और विधि निकाय में एक कोड स्निपेट (किसी अन्य स्रोत से) जोड़ना चाहते हैं। कोड स्निपेट में कोई भी जावा कोड, भी सिंटैक्टिक रूप से अमान्य कोड हो सकता है। मुझे बस ऐसा करने का तरीका नहीं मिल रहा है।जेडीटी/एएसटी

जेसीओडी मॉडल के साथ आप JBlock#directStatement(String s) method का उपयोग करेंगे।

क्या जेडीटी/एएसटी के साथ ऐसा करने का कोई तरीका है?

+2

एएसटी मैनिपुलेशन आमतौर पर आपके पास सिंटैक्टिक रूप से मान्य पेड़ की आवश्यकता होती है। यदि आपके पास विधि के लिए अमान्य कोड है, तो सामान्यतः, आपके पास सम्मिलित करने के लिए एक वैध पेड़ नहीं होगा और आप इसे करने में सक्षम नहीं होंगे, या आप इसे करने में सक्षम होंगे लेकिन केवल एक गैरकानूनी पेड़ प्राप्त करें परिणाम। –

+0

ठीक है, जेएसटी/एएसटी तब सही उपकरण प्रतीत नहीं होता है ... – Morrandir

+0

आपको अमान्य कोड डालने की आवश्यकता क्यों है? –

उत्तर

9

चूंकि आपके पास शेष एप्लिकेशन के लिए एक अच्छी तरह से गठित पेड़ है, और आप किसी विशेष स्थान पर गैर-अच्छी तरह से गठित टेक्स्ट डालना चाहते हैं, तो आप मानक पेड़ नोड सम्मिलन तंत्र के साथ बहुत कुछ नहीं कर सकते हैं ।

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

हमारे डीएमएस सॉफ्टवेयर पुनर्वितरण टूलकिट ने इस तरह की चीज होने की अनुमति देने के लिए अपने सुंदर प्रिंटर में प्रिंट/नोड हुक दर्ज/निकाला है।

यदि ऐसी चीजें जेडीटी/एएसटी में मौजूद नहीं हैं, तो आप इसे हुक देने के लिए अपने सुंदर प्रिंटर को संशोधित करने का प्रयास कर सकते हैं। वैकल्पिक रूप से, आप एक और पेड़ नोड प्रकार जोड़कर जेडीटी/एएसटी को संशोधित करने पर विचार कर सकते हैं जो कि मानक सेट का हिस्सा नहीं है, जो केवल मनमानी पाठ रखता है लेकिन एक विधि नोड की तरह कार्य करता है। संभवत: प्रत्येक नोड मुद्रित होता है जो मुद्रित होता है; तो आप उस पेड़ नोड के लिए सुंदर प्रिंटिंग को परिभाषित कर सकते हैं, जिससे इसका टेक्स्ट आउटपुट हो सके।

एक अंतिम वास्तव में हैकी समाधान: एक पूरी तरह से मान्य एएसटी डालें जहां मनमाना पाठ जाएगा, जिसमें कहीं भी एक अद्वितीय नाम, उदाहरण के लिए, ZZZ के साथ एक फर्जी पहचानकर्ता शामिल है। फिर, एएसटी को एक स्ट्रिंग पर प्रिंट करें, और वास्तविक उपयोगकर्ता टेक्स्ट के साथ अद्वितीय नाम वाले बोगस पेड़ों को प्रतिस्थापित करने के लिए स्ट्रिंग को पोस्ट-प्रोसेस करें।

+0

बहुत बहुत धन्यवाद! :-) – Morrandir

3

आपको पहले एएसटी में कोड स्निपेट को पार्स करने की आवश्यकता है। आप इस उद्देश्य के लिए ASTParser एपीआई का उपयोग कर सकते हैं।

संकलन इकाई की संकलन समस्याओं को प्राप्त करना संभव है (CompilationUnit.getProblems() देखें)।

modify Java code using JDT के कुछ तरीके हैं। मैं सुझाव दूंगा कि आप विधि के शरीर को संशोधित करने के लिए ASTRewrite एपीआई पर विचार करें।

+0

ठीक है, मैंने पहले एपीआई संदर्भ की जांच की, लेकिन मुझे मनमाने ढंग से कोड स्निपेट जोड़ने का कोई तरीका नहीं मिला। ध्यान दें कि कोड स्निपेट में वाक्य रचनात्मक रूप से अमान्य कोड हो सकता है। (मैंने इसे मूल प्रश्न में जोड़ा है ...) – Morrandir

+0

आप मनमानी कोड स्निपेट को पार्स कर सकते हैं। फिर, परिणामस्वरूप एएसटी नोड्स को अपनी विधि के शरीर के एएसटी नोड में डालें। ग्रहण पार्सर कुछ हद तक वाक्यविन्यास त्रुटियों को सहन करता है। – reprogrammer

+0

"कुछ हद तक" दुर्भाग्य से पर्याप्त नहीं है। :( – Morrandir

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

  • कोई संबंधित समस्या नहीं^_^