All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.org.apache.bcel.internal.util.AttributeHTML Maven / Gradle / Ivy

The newest version!
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * 
 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
 * 
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License. You can obtain
 * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
 * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 * 
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
 * Sun designates this particular file as subject to the "Classpath" exception
 * as provided by Sun in the GPL Version 2 section of the License file that
 * accompanied this code.  If applicable, add the following below the License
 * Header, with the fields enclosed by brackets [] replaced by your own
 * identifying information: "Portions Copyrighted [year]
 * [name of copyright owner]"
 * 
 * Contributor(s):
 * 
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */

package com.sun.org.apache.bcel.internal.util;

/* ====================================================================
 * The Apache Software License, Version 1.1
 *
 * Copyright (c) 2001 The Apache Software Foundation.  All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgment:
 *       "This product includes software developed by the
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowledgment may appear in the software itself,
 *    if and wherever such third-party acknowledgments normally appear.
 *
 * 4. The names "Apache" and "Apache Software Foundation" and
 *    "Apache BCEL" must not be used to endorse or promote products
 *    derived from this software without prior written permission. For
 *    written permission, please contact [email protected].
 *
 * 5. Products derived from this software may not be called "Apache",
 *    "Apache BCEL", nor may "Apache" appear in their name, without
 *    prior written permission of the Apache Software Foundation.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * .
 */

import com.sun.org.apache.bcel.internal.classfile.*;
import java.io.*;

/**
 * Convert found attributes into HTML file.
 *
 * @version $Id: AttributeHTML.java,v 1.3 2007-07-19 04:34:52 ofung Exp $
 * @author  M. Dahm
 * 
 */
final class AttributeHTML implements com.sun.org.apache.bcel.internal.Constants {
  private String       class_name;     // name of current class
  private PrintWriter  file;					// file to write to
  private int	       attr_count = 0;
  private ConstantHTML constant_html;
  private ConstantPool constant_pool;

  AttributeHTML(String dir, String class_name, ConstantPool constant_pool,
		ConstantHTML constant_html) throws IOException
  {
    this.class_name    = class_name;
    this.constant_pool = constant_pool;
    this.constant_html = constant_html;

    file = new PrintWriter(new FileOutputStream(dir + class_name + "_attributes.html"));
    file.println("");
  }                                      

  private final String codeLink(int link, int method_number) {
    return "" +
      link + "";
  }
    
  final void close() {	
    file.println("
"); file.close(); } final void writeAttribute(Attribute attribute, String anchor) throws IOException { writeAttribute(attribute, anchor, 0); } final void writeAttribute(Attribute attribute, String anchor, int method_number) throws IOException { byte tag = attribute.getTag(); int index; if(tag == ATTR_UNKNOWN) // Don't know what to do about this one return; attr_count++; // Increment number of attributes found so far if(attr_count % 2 == 0) file.print(""); else file.print(""); file.println("

" + attr_count + " " + ATTRIBUTE_NAMES[tag] + "

"); /* Handle different attributes */ switch(tag) { case ATTR_CODE: Code c = (Code)attribute; // Some directly printable values file.print("
  • Maximum stack size = " + c.getMaxStack() + "
  • \n
  • Number of local variables = " + c.getMaxLocals() + "
  • \n
  • Byte code
\n"); // Get handled exceptions and list them CodeException[] ce = c.getExceptionTable(); int len = ce.length; if(len > 0) { file.print("

Exceptions handled

    "); for(int i=0; i < len; i++) { int catch_type = ce[i].getCatchType(); // Index in constant pool file.print("
  • "); if(catch_type != 0) file.print(constant_html.referenceConstant(catch_type)); // Create Link to _cp.html else file.print("Any Exception"); file.print("
    (Ranging from lines " + codeLink(ce[i].getStartPC(), method_number) + " to " + codeLink(ce[i].getEndPC(), method_number) + ", handled at line " + codeLink(ce[i].getHandlerPC(), method_number) + ")
  • "); } file.print("
"); } break; case ATTR_CONSTANT_VALUE: index = ((ConstantValue)attribute).getConstantValueIndex(); // Reference _cp.html file.print("\n"); break; case ATTR_SOURCE_FILE: index = ((SourceFile)attribute).getSourceFileIndex(); // Reference _cp.html file.print("\n"); break; case ATTR_EXCEPTIONS: // List thrown exceptions int[] indices = ((ExceptionTable)attribute).getExceptionIndexTable(); file.print("\n"); break; case ATTR_LINE_NUMBER_TABLE: LineNumber[] line_numbers =((LineNumberTable)attribute).getLineNumberTable(); // List line number pairs file.print("

"); for(int i=0; i < line_numbers.length; i++) { file.print("(" + line_numbers[i].getStartPC() + ", " + line_numbers[i].getLineNumber() + ")"); if(i < line_numbers.length - 1) file.print(", "); // breakable } break; case ATTR_LOCAL_VARIABLE_TABLE: LocalVariable[] vars = ((LocalVariableTable)attribute).getLocalVariableTable(); // List name, range and type file.print("

    "); for(int i=0; i < vars.length; i++) { index = vars[i].getSignatureIndex(); String signature = ((ConstantUtf8)constant_pool.getConstant(index, CONSTANT_Utf8)).getBytes(); signature = Utility.signatureToString(signature, false); int start = vars[i].getStartPC(); int end = (start + vars[i].getLength()); file.println("
  • " + Class2HTML.referenceType(signature) + " " + vars[i].getName() + " in slot %" + vars[i].getIndex() + "
    Valid from lines " + "" + start + " to " + "" + end + "
  • "); } file.print("
\n"); break; case ATTR_INNER_CLASSES: InnerClass[] classes = ((InnerClasses)attribute).getInnerClasses(); // List inner classes file.print("
    "); for(int i=0; i < classes.length; i++) { String name, access; index = classes[i].getInnerNameIndex(); if(index > 0) name =((ConstantUtf8)constant_pool.getConstant(index, CONSTANT_Utf8)).getBytes(); else name = "<anonymous>"; access = Utility.accessToString(classes[i].getInnerAccessFlags()); file.print("
  • " + access + " "+ constant_html.referenceConstant(classes[i].getInnerClassIndex()) + " in class " + constant_html.referenceConstant(classes[i].getOuterClassIndex()) + " named " + name + "
  • \n"); } file.print("
\n"); break; default: // Such as Unknown attribute or Deprecated file.print("

" + attribute.toString()); } file.println(""); file.flush(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy