001: /*
002: * ASM: a very small and fast Java bytecode manipulation framework
003: * Copyright (c) 2000-2005 INRIA, France Telecom
004: * All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: * 1. Redistributions of source code must retain the above copyright
010: * notice, this list of conditions and the following disclaimer.
011: * 2. Redistributions in binary form must reproduce the above copyright
012: * notice, this list of conditions and the following disclaimer in the
013: * documentation and/or other materials provided with the distribution.
014: * 3. Neither the name of the copyright holders nor the names of its
015: * contributors may be used to endorse or promote products derived from
016: * this software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
021: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
022: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
024: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
025: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
026: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
027: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
028: * THE POSSIBILITY OF SUCH DAMAGE.
029: */
030: package org.objectweb.asm.tree;
031:
032: import java.util.ArrayList;
033: import java.util.List;
034:
035: import org.objectweb.asm.AnnotationVisitor;
036: import org.objectweb.asm.Attribute;
037:
038: /**
039: * An abstract class, field or method node.
040: *
041: * @author Eric Bruneton
042: */
043: @SuppressWarnings("unchecked")
044: public abstract class MemberNode {
045:
046: /**
047: * The runtime visible annotations of this class, field or method. This list
048: * is a list of {@link AnnotationNode} objects. May be <tt>null</tt>.
049: *
050: * @associates org.objectweb.asm.tree.AnnotationNode
051: * @label visible
052: */
053: public List visibleAnnotations;
054:
055: /**
056: * The runtime invisible annotations of this class, field or method. This
057: * list is a list of {@link AnnotationNode} objects. May be <tt>null</tt>.
058: *
059: * @associates org.objectweb.asm.tree.AnnotationNode
060: * @label invisible
061: */
062: public List invisibleAnnotations;
063:
064: /**
065: * The non standard attributes of this class, field or method. This list is
066: * a list of {@link Attribute} objects. May be <tt>null</tt>.
067: *
068: * @associates org.objectweb.asm.Attribute
069: */
070: public List attrs;
071:
072: /**
073: * Constructs a new {@link MemberNode}.
074: */
075: public MemberNode() {
076: }
077:
078: /**
079: * Visits an annotation of this class, field or method.
080: *
081: * @param desc the class descriptor of the annotation class.
082: * @param visible <tt>true</tt> if the annotation is visible at runtime.
083: * @return a visitor to visit the annotation values.
084: */
085: public AnnotationVisitor visitAnnotation(final String desc,
086: final boolean visible) {
087: AnnotationNode an = new AnnotationNode(desc);
088: if (visible) {
089: if (visibleAnnotations == null) {
090: visibleAnnotations = new ArrayList(1);
091: }
092: visibleAnnotations.add(an);
093: } else {
094: if (invisibleAnnotations == null) {
095: invisibleAnnotations = new ArrayList(1);
096: }
097: invisibleAnnotations.add(an);
098: }
099: return an;
100: }
101:
102: /**
103: * Visits a non standard attribute of this class, field or method.
104: *
105: * @param attr an attribute.
106: */
107: public void visitAttribute(final Attribute attr) {
108: if (attrs == null) {
109: attrs = new ArrayList(1);
110: }
111: attrs.add(attr);
112: }
113:
114: /**
115: * Visits the end of this class, field or method.
116: */
117: public void visitEnd() {
118: }
119: }
|