/* * JBoss, Home of Professional Open Source. * * Copyright 2012 Red Hat, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.classfilewriter.annotations; import org.jboss.classfilewriter.attributes.Attribute; import org.jboss.classfilewriter.constpool.ConstPool; import org.jboss.classfilewriter.util.ByteArrayDataOutputStream; import org.jboss.classfilewriter.util.LazySize; import java.io.IOException; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.List; /** * An annotations attribute * * @author Stuart Douglas * */ public class AnnotationsAttribute extends Attribute { public static enum Type { RUNTIME_VISIBLE("RuntimeVisibleAnnotations"), RUNTIME_INVISIBLE("RuntimeInvisibleAnnotations"); private Type(String tag) { this.tag = tag; } private final String tag; public String getTag() { return tag; } } private final List<ClassAnnotation> annotations; public AnnotationsAttribute(Type type, ConstPool constPool) { super(type.getTag(), constPool); this.annotations = new ArrayList<ClassAnnotation>(); } @Override public void writeData(ByteArrayDataOutputStream stream) throws IOException { LazySize sizeMarker = stream.writeSize(); stream.writeShort(annotations.size()); for (ClassAnnotation annotation : annotations) { annotation.write(stream); } sizeMarker.markEnd(); } public void addAnnotation(Annotation annotation) { annotations.add(AnnotationBuilder.createAnnotation(constPool, annotation)); } public void addAnnotation(ClassAnnotation annotation) { annotations.add(annotation); } }