12270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom/*
22270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * ProGuard -- shrinking, optimization, obfuscation, and preverification
32270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *             of Java bytecode.
42270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *
52270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu)
62270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *
72270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * This program is free software; you can redistribute it and/or modify it
82270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * under the terms of the GNU General Public License as published by the Free
92270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Software Foundation; either version 2 of the License, or (at your option)
102270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * any later version.
112270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *
122270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * This program is distributed in the hope that it will be useful, but WITHOUT
132270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
142270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
152270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * more details.
162270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *
172270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * You should have received a copy of the GNU General Public License along
182270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * with this program; if not, write to the Free Software Foundation, Inc.,
192270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
202270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */
212270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrompackage proguard.classfile.attribute.annotation.target;
222270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
232270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.classfile.*;
242270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.classfile.attribute.CodeAttribute;
252270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.classfile.attribute.annotation.TypeAnnotation;
262270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.classfile.attribute.annotation.target.visitor.TargetInfoVisitor;
272270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
282270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom/**
292270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Representation of an annotation target.
302270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *
312270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * @author Eric Lafortune
322270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */
332270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrompublic abstract class TargetInfo
342270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom{
352270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public byte u1targetType;
362270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
372270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
382270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    /**
392270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     * Creates an uninitialized TargetInfo.
402270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     */
412270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    protected TargetInfo()
422270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    {
432270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    }
442270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
452270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
462270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    /**
472270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     * Creates an initialized TargetInfo.
482270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     */
492270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    protected TargetInfo(byte u1targetType)
502270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    {
512270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        this.u1targetType = u1targetType;
522270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    }
532270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
542270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
552270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    /**
562270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     * Returns the type of the target.
572270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     */
582270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public byte getTargetType()
592270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    {
602270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        return u1targetType;
612270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    }
622270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
632270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
642270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    // Methods to be implemented by extensions.
652270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
662270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    /**
672270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     * Accepts the given visitor, in the context of a type annotation on a class.
682270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     */
692270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public void accept(Clazz clazz,                                             TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor)
702270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    {
712270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        throw new UnsupportedOperationException("Unsupported type annotation [0x"+Integer.toHexString(u1targetType)+"] on a class");
722270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    }
732270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
742270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    /**
752270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     * Accepts the given visitor, in the context of a type annotation on a field.
762270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     */
772270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public void accept(Clazz clazz, Field field,                                TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor)
782270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    {
792270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        throw new UnsupportedOperationException("Unsupported type annotation [0x"+Integer.toHexString(u1targetType)+"] on a field");
802270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    }
812270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
822270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    /**
832270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     * Accepts the given visitor, in the context of a type annotation on a method.
842270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     */
852270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public void accept(Clazz clazz, Method method,                              TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor)
862270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    {
872270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        throw new UnsupportedOperationException("Unsupported type annotation [0x"+Integer.toHexString(u1targetType)+"] on a method");
882270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    }
892270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
902270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    /**
912270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     * Accepts the given visitor, in the context of a type annotation code.
922270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     */
932270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public void accept(Clazz clazz, Method method, CodeAttribute codeAttribute, TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor)
942270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    {
952270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        throw new UnsupportedOperationException("Unsupported type annotation [0x"+Integer.toHexString(u1targetType)+"] on code");
962270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    }
972270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom}
98