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

📄 classprinter.java

📁 ProGuard 是一个免费的 Java类文件的压缩
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * ProGuard -- shrinking, optimization, obfuscation, and preverification *             of Java bytecode. * * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package proguard.classfile.visitor;import proguard.classfile.*;import proguard.classfile.attribute.*;import proguard.classfile.attribute.annotation.*;import proguard.classfile.attribute.annotation.visitor.*;import proguard.classfile.attribute.preverification.*;import proguard.classfile.attribute.preverification.visitor.*;import proguard.classfile.attribute.visitor.*;import proguard.classfile.constant.*;import proguard.classfile.constant.visitor.ConstantVisitor;import proguard.classfile.instruction.*;import proguard.classfile.instruction.visitor.InstructionVisitor;import proguard.classfile.util.*;import java.io.PrintStream;/** * This <code>ClassVisitor</code> prints out the complete internal * structure of the classes it visits. * * @author Eric Lafortune */public class ClassPrinterextends      SimplifiedVisitorimplements   ClassVisitor,             ConstantVisitor,             MemberVisitor,             AttributeVisitor,             ExceptionInfoVisitor,             InnerClassesInfoVisitor,             StackMapFrameVisitor,             VerificationTypeVisitor,             LineNumberInfoVisitor,             LocalVariableInfoVisitor,             LocalVariableTypeInfoVisitor,             AnnotationVisitor,             ElementValueVisitor,             InstructionVisitor{    private static final String INDENTATION = "  ";    private PrintStream ps;    private int         indentation;    /**     * Creates a new ClassPrinter that prints to <code>System.out</code>.     */    public ClassPrinter()    {        this(System.out);    }    /**     * Creates a new ClassPrinter that prints to the given     * <code>PrintStream</code>.     */    public ClassPrinter(PrintStream printStream)    {        ps = printStream;    }    // Implementations for ClassVisitor.    public void visitProgramClass(ProgramClass programClass)    {        println("_____________________________________________________________________");        println(visitorInfo(programClass) + " " +                "Program class: " + programClass.getName());        indent();        println("Superclass:    " + programClass.getSuperName());        println("Major version: 0x" + Integer.toHexString(ClassUtil.internalMajorClassVersion(programClass.u4version)));        println("Minor version: 0x" + Integer.toHexString(ClassUtil.internalMinorClassVersion(programClass.u4version)));        println("Access flags:  0x" + Integer.toHexString(programClass.u2accessFlags));        println("  = " +                ClassUtil.externalClassAccessFlags(programClass.u2accessFlags) +                ((programClass.u2accessFlags & ClassConstants.INTERNAL_ACC_INTERFACE) == 0 ? "class " : "") +                ClassUtil.externalClassName(programClass.getName()) +                (programClass.u2superClass == 0 ? "" : " extends " +                ClassUtil.externalClassName(programClass.getSuperName())));        outdent();        println();        println("Interfaces (count = " + programClass.u2interfacesCount + "):");        indent();        for (int index = 0; index < programClass.u2interfacesCount; index++)        {            println("+ " + programClass.getClassName(programClass.u2interfaces[index]));        }        outdent();        println();        println("Constant Pool (count = " + programClass.u2constantPoolCount + "):");        indent();        programClass.constantPoolEntriesAccept(this);        outdent();        println();        println("Fields (count = " + programClass.u2fieldsCount + "):");        indent();        programClass.fieldsAccept(this);        outdent();        println();        println("Methods (count = " + programClass.u2methodsCount + "):");        indent();        programClass.methodsAccept(this);        outdent();        println();        println("Class file attributes (count = " + programClass.u2attributesCount + "):");        indent();        programClass.attributesAccept(this);        outdent();        println();    }    public void visitLibraryClass(LibraryClass libraryClass)    {        println("_____________________________________________________________________");        println(visitorInfo(libraryClass) + " " +                "Library class: " + libraryClass.getName());        indent();        println("Superclass:    " + libraryClass.getSuperName());        println("Access flags:  0x" + Integer.toHexString(libraryClass.u2accessFlags));        println("  = " +                ClassUtil.externalClassAccessFlags(libraryClass.u2accessFlags) +                ((libraryClass.u2accessFlags & ClassConstants.INTERNAL_ACC_INTERFACE) == 0 ? "class " : "") +                ClassUtil.externalClassName(libraryClass.getName()) + " extends "  +                ClassUtil.externalClassName(libraryClass.getSuperName()));        outdent();        println();        println("Interfaces (count = " + libraryClass.interfaceClasses.length + "):");        for (int index = 0; index < libraryClass.interfaceClasses.length; index++)        {            Clazz interfaceClass = libraryClass.interfaceClasses[index];            if (interfaceClass != null)            {                println("  + " + interfaceClass.getName());            }        }        println("Fields (count = " + libraryClass.fields.length + "):");        libraryClass.fieldsAccept(this);        println("Methods (count = " + libraryClass.methods.length + "):");        libraryClass.methodsAccept(this);    }    // Implementations for ConstantVisitor.    public void visitIntegerConstant(Clazz clazz, IntegerConstant integerConstant)    {        println(visitorInfo(integerConstant) + " Integer [" +                integerConstant.getValue() + "]");    }    public void visitLongConstant(Clazz clazz, LongConstant longConstant)    {        println(visitorInfo(longConstant) + " Long [" +                longConstant.getValue() + "]");    }    public void visitFloatConstant(Clazz clazz, FloatConstant floatConstant)    {        println(visitorInfo(floatConstant) + " Float [" +                floatConstant.getValue() + "]");    }    public void visitDoubleConstant(Clazz clazz, DoubleConstant doubleConstant)    {        println(visitorInfo(doubleConstant) + " Double [" +                doubleConstant.getValue() + "]");    }    public void visitStringConstant(Clazz clazz, StringConstant stringConstant)    {        println(visitorInfo(stringConstant) + " String [" +                clazz.getString(stringConstant.u2stringIndex) + "]");    }    public void visitUtf8Constant(Clazz clazz, Utf8Constant utf8Constant)    {        println(visitorInfo(utf8Constant) + " Utf8 [" +                utf8Constant.getString() + "]");    }    public void visitFieldrefConstant(Clazz clazz, FieldrefConstant fieldrefConstant)    {        println(visitorInfo(fieldrefConstant) + " Fieldref   [" +                clazz.getClassName(fieldrefConstant.u2classIndex)  + "." +                clazz.getName(fieldrefConstant.u2nameAndTypeIndex) + " " +                clazz.getType(fieldrefConstant.u2nameAndTypeIndex) + "]");    }    public void visitInterfaceMethodrefConstant(Clazz clazz, InterfaceMethodrefConstant interfaceMethodrefConstant)    {        println(visitorInfo(interfaceMethodrefConstant) + " InterfaceMethodref [" +                clazz.getClassName(interfaceMethodrefConstant.u2classIndex)  + "." +                clazz.getName(interfaceMethodrefConstant.u2nameAndTypeIndex) + " " +                clazz.getType(interfaceMethodrefConstant.u2nameAndTypeIndex) + "]");    }    public void visitMethodrefConstant(Clazz clazz, MethodrefConstant methodrefConstant)    {        println(visitorInfo(methodrefConstant) + " Methodref [" +                clazz.getClassName(methodrefConstant.u2classIndex)  + "." +                clazz.getName(methodrefConstant.u2nameAndTypeIndex) + " " +                clazz.getType(methodrefConstant.u2nameAndTypeIndex) + "]");    }    public void visitClassConstant(Clazz clazz, ClassConstant classConstant)    {        println(visitorInfo(classConstant) + " Class [" +                clazz.getString(classConstant.u2nameIndex) + "]");    }    public void visitNameAndTypeConstant(Clazz clazz, NameAndTypeConstant nameAndTypeConstant)    {        println(visitorInfo(nameAndTypeConstant) + " NameAndType [" +                clazz.getString(nameAndTypeConstant.u2nameIndex) + " " +                clazz.getString(nameAndTypeConstant.u2descriptorIndex) + "]");    }    // Implementations for MemberVisitor.    public void visitProgramField(ProgramClass programClass, ProgramField programField)    {        println(visitorInfo(programField) + " " +                "Field:        " +                programField.getName(programClass) + " " +                programField.getDescriptor(programClass));        indent();        println("Access flags: 0x" + Integer.toHexString(programField.u2accessFlags));        println("  = " +                ClassUtil.externalFullFieldDescription(programField.u2accessFlags,                                                       programField.getName(programClass),                                                       programField.getDescriptor(programClass)));        visitMember(programClass, programField);        outdent();    }    public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod)    {        println(visitorInfo(programMethod) + " " +                "Method:       " +                programMethod.getName(programClass) +                programMethod.getDescriptor(programClass));        indent();        println("Access flags: 0x" + Integer.toHexString(programMethod.u2accessFlags));        println("  = " +                ClassUtil.externalFullMethodDescription(programClass.getName(),                                                        programMethod.u2accessFlags,                                                        programMethod.getName(programClass),                                                        programMethod.getDescriptor(programClass)));        visitMember(programClass, programMethod);        outdent();    }    private void visitMember(ProgramClass programClass, ProgramMember programMember)    {

⌨️ 快捷键说明

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