2010-03-28 4 views
7

मेरे पास पुरानी शैली वाले डॉकलेट टैग, टिप्पणियां और एनोटेशन के साथ जावा 5 स्रोत फ़ाइलों का एक सेट है। और उस पर आधारित मैं जावा कक्षाओं के एक और सेट के लिए जनरेटर लिखना चाहता हूं।जावा स्रोत कोड जनरेशन फ्रेमवर्क

ऐसा करने का सबसे अच्छा तरीका क्या है? और जावा में कोड विश्लेषण/पीढ़ी के लिए कोई अच्छी स्टैंडअलोन पुस्तकालय हैं? इस क्षेत्र में किसी भी साझा व्यय की सराहना की जाती है।

तो, अब तक मैं इन पाया है:

  • JaxME's Java Source Reflection - अच्छा लगता है, लेकिन यह एनोटेशन समर्थन करने के लिए प्रतीत नहीं होता। इसके अलावा 2006 से भी कोई रिलीज नहीं हुआ था।

  • Annogen - जेडीके के डॉकलेट जेनरेटर का उपयोग करता है, जिसमें 1.5 जेडीके के तहत कुछ बग हैं। इसके अलावा इसे लंबे समय तक रिलीज़ नहीं किया गया था।

  • Javaparser - अच्छी तरह से और बहुत हालिया लगता है, लेकिन केवल एक ही कक्षा के लिए विज़िटर पैटर्न का समर्थन करता है यानी उपरोक्त 2 पैकेजों में कोई क्वेरी तंत्र नहीं है।

उत्तर

1

नेटबीन आईडीई और ग्रहण जेडीटी परियोजनाओं दोनों में काफी जावा कोड विश्लेषण/पीढ़ी तर्क है। मुझे नहीं पता कि उनकी निर्भरता क्या है (यानी, क्या आप उन्हें स्टैंडअलोन libs के रूप में उपयोग कर सकते हैं), लेकिन इसके अलावा, मैं उन दोनों पर एक अच्छा नज़र डालेगा: यह संभवतः अधिक गहन विकास के तहत जावा कोड विश्लेषण लाइब्रेरी है और अधिक आधुनिक।

अद्यतन:

PMD रूप में अच्छी तरह ब्याज की हो सकती है:

PMD जावा स्रोत कोड को स्कैन करता है और इस तरह के संभावित समस्याओं के लिए लग रहा है:

* Possible bugs - empty try/catch/finally/switch statements 
* Dead code - unused local variables, parameters and private methods 
* Suboptimal code - wasteful String/StringBuffer usage 
* Overcomplicated expressions - unnecessary if statements, for loops that could be while loops 
* Duplicate code - copied/pasted code means copied/pasted bugs 

साथ ही, इस blog प्रविष्टि विभिन्न स्थिर कोड विश्लेषण उपकरण पर चर्चा करता है।

+0

(ग्रहण जेट है है जावा एमिटर टेम्पलेट्स), लेकिन यह एक्लिप्स (http://wiki.eclipse.org/JET_FAQ_How_do_I_run_a_JET_transformation_from_Java%3F) के बाहर काम नहीं करता है। –

+0

मैंने कुछ नए आइटमों के साथ अपना जवाब अपडेट कर लिया है। –

+0

मैंने पीएमडी के साथ थोड़ा सा खेलने की कोशिश की है, लेकिन यह एपीआई थोड़ा जटिल है। मैं प्रयोग करने और आपके परिणामों को पोस्ट करने पर जारी रखूंगा। –

4

यदि आपको केवल जावा कोड को सिंटैक्टिक रूप से सही करने की आवश्यकता है, तो Codemodel देखें।

+0

कोडमोडेल सिर्फ एक कोड जनरेटर है, और इसमें जावा कोड को पार्स करने के लिए कोई उपकरण नहीं है। हालांकि लिंक के लिए +1 :)। –

+0

हां, यह एक कोड जनरेटर _only_ है, मैं एक बार फिर जोर देना चाहता हूं।मेरे स्वाद के लिए बहुत अच्छा एपीआई। – lexicore

+0

बिल्कुल वही जो मैं चाहता हूं। – Mike

3

मैं पीएमडी का उपयोग कर समाप्त हुआ। कोड उदाहरण नीचे देखा जा सकता है:

final Java15Parser parser = new Java15Parser(); 
    final FileInputStream stream = new FileInputStream("VehicleServiceType.java"); 

    final Object c = parser.parse(new InputStreamReader(stream)); 

    final XPath xpath = new BaseXPath("//TypeDeclaration/Annotation/NormalAnnotation[Name/@Image = 'WebService']", 
     new DocumentNavigator()); 

    for (final Iterator iter = xpath.selectNodes(c).iterator(); iter.hasNext();) { 
     final Object obj = iter.next(); 
     // Do code generation based on annotations... 
    } 
+0

प्रतिक्रिया के लिए धन्यवाद, यह जानकर अच्छा लगा कि आप XPath का उपयोग कर कक्षा परिभाषा को पार कर सकते हैं! –