मैं जावा का उपयोग करके एक एनोटेशन प्रोसेसर लिखने की कोशिश कर रहा हूं। इस एनोटेशन प्रोसेसर को नीचे बताए गए एनोटेटेड क्लास के भीतर एनोटेटेड नेस्टेड क्लास की पहचान करने की आवश्यकता है। मैं पहले एनोटेटेड कक्षाओं को संसाधित करूंगा और फिर अपनी आंतरिक टिप्पणियों को संसाधित करूंगा। यह संकलन समय पर किया जाता है और मेरे पास कक्षा के संसाधित होने का कोई मौजूदा ज्ञान नहीं होगा। फू के भीतर कई घोंसला वाले वर्ग होना संभव है। मैं इन सभी घोंसले वर्गों की टिप्पणियों को कैसे संसाधित करूं?एपीटी नेस्टेड एनोटेटेड कक्षाओं की टिप्पणियों को कैसे संसाधित करें
@MyAnnotation(value="Something important")
public class Foo
{
private Integer A;
@MyMethodAnnotation(value="Something Else")
public Integer getA() { return this.A; }
@MyAnnotation(value="Something really important")
private class Bar
{
private Integer B;
@MyMethodAnnotation(value="Something Else that is very Important")
public Integer getB() { return this.B }
}
}
मैं कैसे प्रसंस्करण के दौरान, यह एनोटेशन 'MyAnnotation' है और उसके 'MyMethodAnnotation' नेस्टेड बार वर्ग के लिए उपयोग कर सकते हैं? निम्नलिखित कोड केवल कक्षा फू के बारे में जानकारी प्रिंट करता है। मैं बार के बारे में जानकारी कैसे संसाधित कर सकता हूं?
for (Element element : env.getElementsAnnotatedWith(MyAnnotation.class)) {
if (element.getKind().equals(ElementKind.CLASS))
{
System.out.println(element.getKind().name() + " " + element.getSimpleName());
processInnerClassElement(element);
}
else
{
System.out.println(element.getKind().name() + " " + element.getSimpleName());
}
}
...
private void processInnerClassElement(Element element)
{
for (Element e : element.getEnclosedElements())
{
if (e.getKind().equals(ElementKind.CLASS))
{
System.out.println(e.getKind().name() + " " + e.getSimpleName());
processInnerClassElement(e);
}
else
{
System.out.println(e.getKind().name() + " " + e.getSimpleName() );
}
}
}
मैं के लिए (तत्व ई: env.getElementsAnnotatedWith (EmfInfo.class)) का उपयोग कर नेस्टेड वर्ग बार पर एक तत्व पहुंच बनाने का प्रयास { लेकिन यह केवल सबसे बाहरी वर्ग फू देता है। – sholmes