2011-10-18 10 views
9

के अंदर एनोटेशन की प्रसंस्करण मैं प्लगिंग एनोटेशन प्रोसेसिंग एपीआई का उपयोग कर जावा एनोटेशन को संसाधित कर रहा हूं। क्या के अंदर एक विधि निकाय के इस्तेमाल किए गए एनोटेशन को भी संसाधित करना संभव है?एक विधि निकाय

सहायता के लिए धन्यवाद। पीटर

उत्तर

4

मुझे लगता है, मैं समाधान मिल गया। जैसा कि मैंने सोचा था, वर्तमान जावैक के साथ यह संभव नहीं है। स्थानीय एनोटेशन केवल साधारण टिप्पणियां हैं और प्लग-इन एनोटेशन प्रोसेसिंग एपीआई द्वारा संसाधित नहीं किया जाएगा। लेकिन JSR308 में दिलचस्प प्रयास हैं, टाइपिंग वैरिएबल, स्थानीय चर, एनोटेटेड-टाइप-चेकिंग और कास्टिंग पर पैरामीटर के रूप में आश्चर्यजनक चीजों का समर्थन करने वाले प्रकार की टिप्पणियां हैंडलिंग ... और जैसा दिखता है, इसे ओपनजेडीके 8. में शामिल किया जाएगा। अच्छा

+0

जेएसआर 308 सीधे एनोटेशन प्रोसेसिंग का समर्थन नहीं करता है (हालांकि यह एक लंबे समय से चलने वाली बग को सही करता है जिसमें स्थानीय परिवर्तनीय एनोटेशन क्लासफ़ाइल में संग्रहीत नहीं होते हैं)। इसमें आपके द्वारा उल्लेख की जाने वाली अन्य विशेषताएं हैं, और यह जावा 8 का हिस्सा है। [परीक्षक फ्रेमवर्क] (http://checkerframework.org) जेएसआर 308 पर बनाया गया है और यह सुविधाजनक आगंतुक प्रदान करता है जो विधि निकायों के भीतर एनोटेशन को संसाधित करता है। – mernst

1

JSR269 में, प्रासंगिक इंटरफ़ेस javax.lang.model.element.VariableElement, जो इस तरह के एनोटेशन तक पहुँचने के लिए getAnnotation(Class<A> annotationType) विरासत में होगा:

for (VariableElement variable : ElementFilter.fieldsIn(methods)) { 
    final AnnotationType annotation = variable.getAnnotation(AnnotationType.class); 
    if (annotation != null) { 
     // ... 
    } 
} 
+2

उस उत्तर के लिए धन्यवाद। लेकिन 'विधियों' का अर्थ तत्वों का एक समूह है, इसमें पहले से ही एनोटेटेड फ़ील्ड्स शामिल होना चाहिए (जो उस सेट के लिए विधि को खराब नाम बनाता है)। इसलिए 'फ़ील्ड्सइन' एक विधि में फ़ील्ड (= स्थानीय चर) वापस नहीं लौटाता है "लेकिन दिए गए तत्वों का एक सेट फ़िल्टर करें। और इसके साथ समस्या यह है कि एपीआई मुझे एनोटेटेड स्थानीय चर ('प्रक्रिया'-विधि के पैरामीटर के रूप में) नहीं देगी। अभी के लिए, ऐसा लगता है कि मुझे सभी (केवल एनोटेटेड नहीं) कक्षाओं को संसाधित करना है और मैन्युअल रूप से स्थानीय-चर-एनोटेशन की खोज करना है (हालांकि मुझे नहीं पता कि वास्तव में कैसे)। या आपके उदाहरण का उपयोग करने का कोई तरीका है? – wrm

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

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