1 package net.sourceforge.jenesis4java; 2 3 /* 4 * #%L 5 * Jenesis 4 Java Code Generator 6 * %% 7 * Copyright (C) 2000 - 2015 jenesis4java 8 * %% 9 * This program is free software: you can redistribute it and/or modify 10 * it under the terms of the GNU Lesser General Public License as 11 * published by the Free Software Foundation, either version 3 of the 12 * License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Lesser Public License for more details. 18 * 19 * You should have received a copy of the GNU General Lesser Public 20 * License along with this program. If not, see 21 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 22 * #L% 23 */ 24 25 import java.util.List; 26 27 /** 28 * Copyright (C) 2008, 2010 Richard van Nieuwenhoven - ritchie [at] gmx [dot] at 29 * Copyright (C) 2000, 2001 Paul Cody Johnston - pcj@inxar.org <br> 30 * This file is part of Jenesis4java. Jenesis4java is free software: you can 31 * redistribute it and/or modify it under the terms of the GNU Lesser General 32 * Public License as published by the Free Software Foundation, either version 3 33 * of the License, or (at your option) any later version.<br> 34 * Jenesis4java is distributed in the hope that it will be useful, but WITHOUT 35 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 36 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 37 * details.<br> 38 * You should have received a copy of the GNU Lesser General Public License 39 * along with Jenesis4java. If not, see <http://www.gnu.org/licenses/>. 40 */ 41 42 /** 43 * An AnnotationAttribute is the parameter of an {@link Annotation}. It consists 44 * of a key-value pair, where the value may be a single or multiple values. 45 */ 46 public interface AnnotationAttribute extends Codeable { 47 48 AnnotationAttribute addValue(Expression value); 49 50 AnnotationAttribute addValues(Iterable<Expression> values); 51 52 AnnotationAttribute addValueAnnotation(Annotation valueAnnotation); 53 54 List<Expression> getValuesCopy(); 55 56 /** 57 * @return The name of this attribute. If no attribute is set (i.e., the 58 * default parameter {@code value} in the annotation is referenced), 59 * the name is the empty String. 60 */ 61 String getName(); 62 63 /** 64 * @return The first value, if one or more value is set, or {@code null} if 65 * no value is set. 66 */ 67 Expression getValue(); 68 69 /** 70 * Returns, if this attribute is the default value (i.e., maps to the 71 * parameter {@code value}, but is set without name. The name is not 72 * printed, only the value is. 73 * 74 * @see Annotation#addDefaultValueAttribute(Expression...) 75 */ 76 boolean isDefaultValueAttribute(); 77 78 Annotation getValueAnnotation(); 79 80 Annotation[] getValueAnnotations(); 81 82 /** 83 * Returns if more than one value is set. If more than one value is set, the 84 * generated code is printed in curly brackets (the Java array definition 85 * syntax). 86 */ 87 boolean isArray(); 88 89 /** 90 * Will be removed in a future release. 91 * 92 * @deprecated Array property should not be settable, but is derived from 93 * the number of values. 94 */ 95 @Deprecated 96 AnnotationAttribute setArray(boolean isArray); 97 98 /** 99 * Sets the name of this attribute. 100 * 101 * @param name 102 * The parameter name of the attribute in the annotation. If this 103 * is the only attribute and it is named {@code value}, you can 104 * provide an empty String for concise output code. {@code null} 105 * is normalized to the empty String. 106 * @return This reference for chaining. 107 */ 108 AnnotationAttribute setName(String name); 109 110 AnnotationAttribute setValueAnnotation(Annotation valueAnnotation); 111 112 AnnotationAttribute setValueAnnotations(Annotation[] valueAnnotation); 113 114 AnnotationAttribute setValue(Expression value); 115 }