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 net.sourceforge.retroweaver.optimizer;
031
032 import org.objectweb.asm.AnnotationVisitor;
033 import org.objectweb.asm.Attribute;
034 import org.objectweb.asm.FieldVisitor;
035
036 /**
037 * A {@link FieldVisitor} that collects the {@link Constant}s of the fields it
038 * visits.
039 *
040 * @author Eric Bruneton
041 */
042 public class FieldConstantsCollector implements FieldVisitor {
043
044 private FieldVisitor fv;
045
046 private ConstantPool cp;
047
048 public FieldConstantsCollector(final FieldVisitor fv, final ConstantPool cp)
049 {
050 this.fv = fv;
051 this.cp = cp;
052 }
053
054 public AnnotationVisitor visitAnnotation(
055 final String desc,
056 final boolean visible)
057 {
058 cp.newUTF8(desc);
059 if (visible) {
060 cp.newUTF8("RuntimeVisibleAnnotations");
061 } else {
062 cp.newUTF8("RuntimeInvisibleAnnotations");
063 }
064 return new AnnotationConstantsCollector(fv.visitAnnotation(desc,
065 visible), cp);
066 }
067
068 public void visitAttribute(final Attribute attr) {
069 // can do nothing
070 fv.visitAttribute(attr);
071 }
072
073 public void visitEnd() {
074 fv.visitEnd();
075 }
076 }