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 }