View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  
18  package org.apache.bcel.classfile;
19  
20  /**
21   * Unknown (non-standard) attributes may be read via user-defined factory
22   * objects that can be registered with the Attribute.addAttributeReader
23   * method. These factory objects should implement this interface.
24   *
25   * @see Attribute
26   * @version $Id: UnknownAttributeReader.java 1806200 2017-08-25 16:33:06Z ggregory $
27   * @since 6.0
28   */
29  public interface UnknownAttributeReader {
30  
31      /**
32       * When this attribute reader is added via the static method Attribute.addAttributeReader,
33       * an attribute name is associated with it. As the class file parser parses attributes,
34       * it will call various AttributeReaders based on the name of the attributes it is constructing.
35       *
36       * @param name_index    An index into the constant pool, indexing a ConstantUtf8
37       *                      that represents the name of the attribute.
38       * @param length        The length of the data contained in the attribute. This is written
39       *                      into the constant pool and should agree with what the factory expects the length to be.
40       * @param file          This is the data input that the factory needs to read its data from.
41       * @param constant_pool This is the constant pool associated with the Attribute that we are constructing.
42       *
43       * @return The user-defined AttributeReader should take this data and use
44       * it to construct an attribute.  In the case of errors, a null can be
45       * returned which will cause the parsing of the class file to fail.
46       *
47       * @see Attribute#addAttributeReader(String, UnknownAttributeReader)
48       */
49      Attribute createAttribute( int name_index, int length, java.io.DataInput file, ConstantPool constant_pool );
50  }