⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parameterannotationsattribute.java

📁 Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京技术学院的数学和计算机科学系的 Shigeru Chiba 所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使
💻 JAVA
字号:
/* * Javassist, a Java-bytecode translator toolkit. * Copyright (C) 1999-2006 Shigeru Chiba. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License.  Alternatively, the contents of this file may be used under * the terms of the GNU Lesser General Public License Version 2.1 or later. * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. */package javassist.bytecode;import java.util.Map;import java.io.IOException;import java.io.DataInputStream;import java.io.ByteArrayOutputStream;import javassist.bytecode.AnnotationsAttribute.Copier;import javassist.bytecode.AnnotationsAttribute.Parser;import javassist.bytecode.annotation.*;/** * A class representing <code>RuntimeVisibleAnnotations_attribute</code> and * <code>RuntimeInvisibleAnnotations_attribute</code>. * * <p>To obtain an ParameterAnnotationAttribute object, invoke * <code>getAttribute(ParameterAnnotationsAttribute.invisibleTag)</code> * in <code>MethodInfo</code>. * The obtained attribute is a * runtime invisible annotations attribute.   * If the parameter is * <code>ParameterAnnotationAttribute.visibleTag</code>, then the obtained * attribute is a runtime visible one. */public class ParameterAnnotationsAttribute extends AttributeInfo {    /**     * The name of the <code>RuntimeVisibleParameterAnnotations</code>     * attribute.     */    public static final String visibleTag        = "RuntimeVisibleParameterAnnotations";    /**     * The name of the <code>RuntimeInvisibleParameterAnnotations</code>     * attribute.     */    public static final String invisibleTag        = "RuntimeInvisibleParameterAnnotations";    /**     * Constructs     * a <code>Runtime(In)VisisbleParameterAnnotations_attribute</code>.     *     * @param cp            constant pool     * @param attrname      attribute name (<code>visibleTag</code> or     *                      <code>invisibleTag</code>).     * @param info          the contents of this attribute.  It does not     *                      include <code>attribute_name_index</code> or     *                      <code>attribute_length</code>.     */    public ParameterAnnotationsAttribute(ConstPool cp, String attrname,                                         byte[] info) {        super(cp, attrname, info);    }    /**     * Constructs an empty     * <code>Runtime(In)VisisbleParameterAnnotations_attribute</code>.     * A new annotation can be later added to the created attribute     * by <code>setAnnotations()</code>.     *     * @param cp            constant pool     * @param attrname      attribute name (<code>visibleTag</code> or     *                      <code>invisibleTag</code>).     * @see #setAnnotations(Annotation[][])     */    public ParameterAnnotationsAttribute(ConstPool cp, String attrname) {        this(cp, attrname, new byte[] { 0 });    }    /**     * @param n     the attribute name.     */    ParameterAnnotationsAttribute(ConstPool cp, int n, DataInputStream in)        throws IOException    {        super(cp, n, in);    }    /**     * Returns <code>num_parameters</code>.      */    public int numParameters() {        return info[0] & 0xff;    }    /**     * Copies this attribute and returns a new copy.     */    public AttributeInfo copy(ConstPool newCp, Map classnames) {        Copier copier = new Copier(info, constPool, newCp, classnames);        try {            copier.parameters();            return new ParameterAnnotationsAttribute(newCp, getName(),                                                     copier.close());        }        catch (Exception e) {            throw new RuntimeException(e.toString());        }    }    /**     * Parses the annotations and returns a data structure representing     * that parsed annotations.  Note that changes of the node values of the     * returned tree are not reflected on the annotations represented by     * this object unless the tree is copied back to this object by     * <code>setAnnotations()</code>.     *     * @return Each element of the returned array represents an array of     * annotations that are associated with each method parameter.     *           * @see #setAnnotations(Annotation[][])     */    public Annotation[][] getAnnotations() {        try {            return new Parser(info, constPool).parseParameters();        }        catch (Exception e) {            throw new RuntimeException(e.toString());        }    }    /**     * Changes the annotations represented by this object according to     * the given array of <code>Annotation</code> objects.     *     * @param params        the data structure representing the     *                      new annotations. Every element of this array     *                      is an array of <code>Annotation</code> and     *                      it represens annotations of each method parameter.     */    public void setAnnotations(Annotation[][] params) {        ByteArrayOutputStream output = new ByteArrayOutputStream();        AnnotationsWriter writer = new AnnotationsWriter(output, constPool);        try {            int n = params.length;            writer.numParameters(n);            for (int i = 0; i < n; ++i) {                Annotation[] anno = params[i];                writer.numAnnotations(anno.length);                for (int j = 0; j < anno.length; ++j)                    anno[j].write(writer);            }            writer.close();        }        catch (IOException e) {            throw new RuntimeException(e);      // should never reach here.        }        set(output.toByteArray());    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -