मुझे मौजूदा कक्षाओं से नई कक्षाएं (जावा बाइट कोड की पीढ़ी के माध्यम से) उत्पन्न करने की आवश्यकता है। मैं कक्षा के तरीकों के शरीर (अभिव्यक्ति) का विश्लेषण करूंगा। अभिव्यक्ति निर्धारित करेंगे कि मैं कौन सा कोड उत्पन्न करूंगा।रेखा संख्याओं को नियंत्रित करते समय क्या बाइटकोड लाइब्रेरी?
मेरे लिए यह नई कक्षाओं (बेस जावा फ़ाइल के समान) के लिए स्रोत फ़ाइल सेट करने के साथ-साथ लाइन नंबरों को नियंत्रित करने के लिए आयात फ़ाइल आयात करने के लिए आयात किया जाता है (जब अपवाद को फेंक दिया जाता है तो स्टैकट्रैक में आधार जावा फ़ाइल की रेखा संख्या होनी चाहिए)।
उदाहरण: मेरे पास फ़ाइल BaseClass.java है। संकलक इस से BaseClass.class उत्पन्न करता है। मैं इस कक्षा फ़ाइल का विश्लेषण करना चाहता हूं और जेनरेट क्लास.क्लास के लिए बाइट कोड उत्पन्न करना चाहता हूं। जब सी पर एक अपवाद फेंक दिया जाता है तो स्टैकट्रैक में "BaseClass.java लाइन 3" होना चाहिए।
BaseClass.java
1: class BaseClass {
2: void method() {
3: call();
4: }
5:}
GeneratesClaas.class
a: class GeneratedClass {
b: void generatedMethod() {
c: generatedCall();
d: }
e:}
मेरा प्रश्न: क्या इस आवश्यकता का समर्थन करने वाले पुस्तकालय हैं? जावासिस्ट, एएसएम या बीसीईएल? इस उद्देश्य के लिए क्या उपयोग करें? संकेत यह कैसे करें या उदाहरण कोड विशेष रूप से सहायक होगा।
संपादित करें: संकेत क्या पुस्तकालय का उपयोग करने के लिए नहीं है, क्योंकि आवश्यकता नहीं fullfiled जा सकती है मददगार भी हो सकता है :)।
अधिकांश डीकम्पाइलर कोड में प्रिंटआउट कर सकते हैं (टिप्पणियां) जहां कोड के मूल लाइनों थे। आप इसे पार्स कर सकते हैं और कोड को पुनर्व्यवस्थित कर सकते हैं। आपको जो समस्या मिल सकती है वह यह है कि विघटित कोड एक ही क्रम में नहीं हो सकता है क्योंकि यह बिल्कुल वही नहीं है। –
डीकंपलर नहीं हैं जो मैं कर रहा हूं। मुझे नया बाइट कोड उत्पन्न करने के लिए रनटाइम पर इस जानकारी की आवश्यकता है। – Arne