001: /*
002: * The contents of this file are subject to the terms
003: * of the Common Development and Distribution License
004: * (the "License"). You may not use this file except
005: * in compliance with the License.
006: *
007: * You can obtain a copy of the license at
008: * https://jwsdp.dev.java.net/CDDLv1.0.html
009: * See the License for the specific language governing
010: * permissions and limitations under the License.
011: *
012: * When distributing Covered Code, include this CDDL
013: * HEADER in each file and include the License file at
014: * https://jwsdp.dev.java.net/CDDLv1.0.html If applicable,
015: * add the following below this CDDL HEADER, with the
016: * fields enclosed by brackets "[]" replaced with your
017: * own identifying information: Portions Copyright [yyyy]
018: * [name of copyright owner]
019: */
020: package com.sun.codemodel;
021:
022: import java.lang.annotation.Annotation;
023: import java.util.ArrayList;
024: import java.util.List;
025:
026: /**
027: * Represents an arrays as annotation members
028: *
029: * <p>
030: * This class implements {@link JAnnotatable} to allow
031: * new annotations to be added as a member of the array.
032: *
033: * @author
034: * Bhakti Mehta (bhakti.mehta@sun.com)
035: */
036: public final class JAnnotationArrayMember extends JAnnotationValue
037: implements JAnnotatable {
038: private final List<JAnnotationValue> values = new ArrayList<JAnnotationValue>();
039: private final JCodeModel owner;
040:
041: JAnnotationArrayMember(JCodeModel owner) {
042: this .owner = owner;
043: }
044:
045: /**
046: * Adds an array member to this annotation
047: *
048: * @param value Adds a string value to the array member
049: * @return The JAnnotationArrayMember. More elements can be added by calling
050: * the same method multiple times
051: */
052: public JAnnotationArrayMember param(String value) {
053: JAnnotationValue annotationValue = new JAnnotationStringValue(
054: JExpr.lit(value));
055: values.add(annotationValue);
056: return this ;
057: }
058:
059: public JAnnotationArrayMember param(boolean value) {
060: JAnnotationValue annotationValue = new JAnnotationStringValue(
061: JExpr.lit(value));
062: values.add(annotationValue);
063: return this ;
064: }
065:
066: /**
067: * Adds an array member to this annotation
068: *
069: * @param value Adds an int value to the array member
070: * @return The JAnnotationArrayMember. More elements can be added by calling
071: * the same method multiple times
072: */
073: public JAnnotationArrayMember param(int value) {
074: JAnnotationValue annotationValue = new JAnnotationStringValue(
075: JExpr.lit(value));
076: values.add(annotationValue);
077: return this ;
078: }
079:
080: /**
081: * Adds an array member to this annotation
082: *
083: * @param value Adds a float value to the array member
084: * @return The JAnnotationArrayMember. More elements can be added by calling
085: * the same method multiple times
086: */
087: public JAnnotationArrayMember param(float value) {
088: JAnnotationValue annotationValue = new JAnnotationStringValue(
089: JExpr.lit(value));
090: values.add(annotationValue);
091: return this ;
092: }
093:
094: public JAnnotationArrayMember param(Class value) {
095: JAnnotationValue annotationValue = new JAnnotationStringValue(
096: JExpr.lit(value.getName()));
097: values.add(annotationValue);
098: return this ;
099: }
100:
101: public JAnnotationArrayMember param(JType type) {
102: JClass clazz = type.boxify();
103: JAnnotationValue annotationValue = new JAnnotationStringValue(
104: clazz.dotclass());
105: values.add(annotationValue);
106: return this ;
107: }
108:
109: /**
110: * Adds a new annotation to the array.
111: */
112: public JAnnotationUse annotate(Class<? extends Annotation> clazz) {
113: return annotate(owner.ref(clazz));
114: }
115:
116: /**
117: * Adds a new annotation to the array.
118: */
119: public JAnnotationUse annotate(JClass clazz) {
120: JAnnotationUse a = new JAnnotationUse(clazz);
121: values.add(a);
122: return a;
123: }
124:
125: public <W extends JAnnotationWriter> W annotate2(Class<W> clazz) {
126: return TypedAnnotationWriter.create(clazz, this );
127: }
128:
129: /**
130: * Adds an annotation member to this annotation array
131: * This can be used for e.g @XmlCollection(values= @XmlCollectionItem(type=Foo.class))
132: * @param value
133: * Adds a annotation to the array member
134: * @return
135: * The JAnnotationArrayMember. More elements can be added by calling
136: * the same method multiple times
137: *
138: * @deprecated
139: * use {@link #annotate}
140: */
141: public JAnnotationArrayMember param(JAnnotationUse value) {
142: values.add(value);
143: return this ;
144: }
145:
146: public void generate(JFormatter f) {
147: f.p('{').nl().i();
148:
149: boolean first = true;
150: for (JAnnotationValue aValue : values) {
151: if (!first)
152: f.p(',').nl();
153: f.g(aValue);
154: first = false;
155: }
156: f.nl().o().p('}');
157: }
158: }
|