KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jeantessier > classreader > AttributeFactory


1 /*
2  * Copyright (c) 2001-2005, Jean Tessier
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Jean Tessier nor the names of his contributors
17  * may be used to endorse or promote products derived from this software
18  * without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */

32
33 package com.jeantessier.classreader;
34
35 import java.io.*;
36
37 import org.apache.log4j.*;
38
39 public class AttributeFactory {
40     private static final String JavaDoc CONSTANT_VALUE = "ConstantValue";
41     private static final String JavaDoc CODE = "Code";
42     private static final String JavaDoc EXCEPTIONS = "Exceptions";
43     private static final String JavaDoc INNER_CLASSES = "InnerClasses";
44     private static final String JavaDoc SYNTHETIC = "Synthetic";
45     private static final String JavaDoc SOURCE_FILE = "SourceFile";
46     private static final String JavaDoc LINE_NUMBER_TABLE = "LineNumberTable";
47     private static final String JavaDoc LOCAL_VARIABLE_TABLE = "LocalVariableTable";
48     private static final String JavaDoc DEPRECATED = "Deprecated";
49
50     public static Attribute_info create(Classfile classfile, Visitable owner, DataInputStream in) throws IOException {
51         Attribute_info result = null;
52
53         int nameIndex = in.readUnsignedShort();
54         if (nameIndex > 0) {
55             Object JavaDoc entry = classfile.getConstantPool().get(nameIndex);
56
57             if (entry instanceof UTF8_info) {
58                 String JavaDoc name = ((UTF8_info) entry).getValue();
59                 Logger.getLogger(AttributeFactory.class).debug("Attribute name index: " + nameIndex + " (" + name + ")");
60                 
61                 if (CONSTANT_VALUE.equals(name)) {
62                     result = new ConstantValue_attribute(classfile, owner, in);
63                 } else if (CODE.equals(name)) {
64                     result = new Code_attribute(classfile, owner, in);
65                 } else if (EXCEPTIONS.equals(name)) {
66                     result = new Exceptions_attribute(classfile, owner, in);
67                 } else if (INNER_CLASSES.equals(name)) {
68                     result = new InnerClasses_attribute(classfile, owner, in);
69                 } else if (SYNTHETIC.equals(name)) {
70                     result = new Synthetic_attribute(classfile, owner, in);
71                 } else if (SOURCE_FILE.equals(name)) {
72                     result = new SourceFile_attribute(classfile, owner, in);
73                 } else if (LINE_NUMBER_TABLE.equals(name)) {
74                     result = new LineNumberTable_attribute(classfile, owner, in);
75                 } else if (LOCAL_VARIABLE_TABLE.equals(name)) {
76                     result = new LocalVariableTable_attribute(classfile, owner, in);
77                 } else if (DEPRECATED.equals(name)) {
78                     result = new Deprecated_attribute(classfile, owner, in);
79                 } else {
80                     Logger.getLogger(AttributeFactory.class).warn("Unknown attribute name \"" + name + "\"");
81                     result = new Custom_attribute(name, classfile, owner, in);
82                 }
83             } else {
84                 Logger.getLogger(AttributeFactory.class).debug("Attribute name: " + entry);
85
86                 Logger.getLogger(AttributeFactory.class).warn("Unknown attribute with invalid name");
87                 result = new Custom_attribute(classfile, owner, in);
88             }
89         } else {
90             Logger.getLogger(AttributeFactory.class).debug("Attribute name index: " + nameIndex);
91
92             Logger.getLogger(AttributeFactory.class).warn("Unknown attribute with no name");
93             result = new Custom_attribute(classfile, owner, in);
94         }
95
96         return result;
97     }
98 }
99
Popular Tags