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

📄 libraryclass.java

📁 ProGuard 是一个免费的 Java类文件的压缩
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * ProGuard -- shrinking, optimization, obfuscation, and preverification *             of Java bytecode. * * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu) * * This library 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 library 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 Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package proguard.classfile;import proguard.classfile.util.*;import proguard.classfile.visitor.*;import proguard.classfile.attribute.visitor.AttributeVisitor;import proguard.classfile.constant.*;import proguard.classfile.constant.visitor.ConstantVisitor;/** * This Clazz is a compact representation of the essential data in a Java class. * * @author Eric Lafortune */public class LibraryClass implements Clazz{    public int             u2accessFlags;    public String          thisClassName;    public String          superClassName;    public String[]        interfaceNames;    public LibraryField[]  fields;    public LibraryMethod[] methods;    /**     * An extra field pointing to the superclass of this class.     * This field is filled out by the {@link ClassSuperHierarchyInitializer}.     */    public Clazz   superClass;    /**     * An extra field pointing to the interfaces of this class.     * This field is filled out by the {@link ClassSuperHierarchyInitializer}.     */    public Clazz[] interfaceClasses;    /**     * An extra field pointing to the subclasses of this class.     * This field is filled out by the {@link ClassSubHierarchyInitializer}.     */    public Clazz[] subClasses;    /**     * An extra field in which visitors can store information.     */    public Object visitorInfo;    /**     * Creates an empty LibraryClass.     */    public LibraryClass() {}    /**     * Returns whether this library class is visible to the outside world.     */    boolean isVisible()    {        return (u2accessFlags & ClassConstants.INTERNAL_ACC_PUBLIC) != 0;    }    /**     * Returns the class name of the ClassConstant at the specified index in the     * given constant pool.     */    private String toName(Constant[] constantPool, int constantIndex)    {        ClassConstant classEntry = (ClassConstant)constantPool[constantIndex];        Utf8Constant  nameEntry  = (Utf8Constant)constantPool[classEntry.u2nameIndex];        return nameEntry.getString();    }    // Implementations for Clazz.    public int getAccessFlags()    {        return u2accessFlags;    }    public String getName()    {        return thisClassName;    }    public String getSuperName()    {        // This may be java/lang/Object, in which case there is no super.        return superClassName;    }    public int getInterfaceCount()    {        return interfaceClasses.length;    }    public String getInterfaceName(int index)    {        return interfaceNames[index];    }    public int getTag(int constantIndex)    {        throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");    }    public String getString(int constantIndex)    {        throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");    }    public String getClassName(int constantIndex)    {        throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");    }    public String getName(int constantIndex)    {        throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");    }    public String getType(int constantIndex)    {        throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");    }    public void addSubClass(Clazz clazz)    {        if (subClasses == null)        {            subClasses = new Clazz[1];        }        else        {            // Copy the old elements into new larger array.            Clazz[] temp     = new Clazz[subClasses.length+1];            System.arraycopy(subClasses, 0, temp, 0, subClasses.length);            subClasses = temp;        }        subClasses[subClasses.length-1] = clazz;    }    public Clazz getSuperClass()    {        return superClass;    }    public Clazz getInterface(int index)    {        return interfaceClasses[index];    }    public boolean extends_(Clazz clazz)    {        if (this.equals(clazz))        {            return true;        }        Clazz superClass = getSuperClass();        return superClass != null &&               superClass.extends_(clazz);    }    public boolean extendsOrImplements(Clazz clazz)    {        if (this.equals(clazz))        {            return true;        }        Clazz superClass = getSuperClass();        if (superClass != null &&            superClass.extendsOrImplements(clazz))        {            return true;        }        if (interfaceClasses != null)        {            for (int index = 0; index < interfaceClasses.length; index++)            {                Clazz interfaceClass = interfaceClasses[index];                if (interfaceClass != null &&                    interfaceClass.extendsOrImplements(clazz))                {                    return true;                }            }        }        return false;    }    public Field findField(String name, String descriptor)    {        for (int index = 0; index < fields.length; index++)        {            Field field = fields[index];            if (field != null &&                (name       == null || field.getName(this).equals(name)) &&                (descriptor == null || field.getDescriptor(this).equals(descriptor)))            {                return field;            }        }        return null;    }    public Method findMethod(String name, String descriptor)    {        for (int index = 0; index < methods.length; index++)        {            Method method = methods[index];            if (method != null &&                (name       == null || method.getName(this).equals(name)) &&                (descriptor == null || method.getDescriptor(this).equals(descriptor)))            {                return method;            }        }        return null;    }    public void accept(ClassVisitor classVisitor)    {        classVisitor.visitLibraryClass(this);    }    public void hierarchyAccept(boolean      visitThisClass,                                boolean      visitSuperClass,                                boolean      visitInterfaces,                                boolean      visitSubclasses,                                ClassVisitor classVisitor)    {        // First visit the current classfile.        if (visitThisClass)        {            accept(classVisitor);        }        // Then visit its superclass, recursively.        if (visitSuperClass)        {            if (superClass != null)            {                superClass.hierarchyAccept(true,                                           true,                                           visitInterfaces,                                           false,

⌨️ 快捷键说明

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