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

📄 constantpooleditor.java

📁 proguard 3.5 java 混淆器 最新 免费 好用的 大家用用试一下吧 天行健-君子以自强不息 地势坤-君子以厚德载物
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* $Id: ConstantPoolEditor.java,v 1.10.2.1 2006/01/16 22:57:55 eric Exp $ * * ProGuard -- shrinking, optimization, and obfuscation of Java class files. * * Copyright (c) 2002-2006 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.editor;import proguard.classfile.*;/** * This class can add constant pool entries to given class files. * * @author Eric Lafortune */public class ConstantPoolEditor{    private static final boolean DEBUG = false;    /**     * Finds or creates a StringCpInfo constant pool entry with the given value,     * in the given class file.     * @return the constant pool index of the ClassCpInfo.     */    public int addStringCpInfo(ProgramClassFile programClassFile,                              String            string,                              ClassFile         referencedClassFile)    {        CpInfo[] constantPool      = programClassFile.constantPool;        int      constantPoolCount = programClassFile.u2constantPoolCount;        // Check if the entry already exists.        for (int index = 1; index < constantPoolCount; index++)        {            CpInfo cpInfo = constantPool[index];            if (cpInfo != null &&                cpInfo.getTag() == ClassConstants.CONSTANT_String)            {                StringCpInfo classCpInfo = (StringCpInfo)cpInfo;                if (classCpInfo.getString(programClassFile).equals(string))                {                    return index;                }            }        }        int nameIndex = addUtf8CpInfo(programClassFile, string);        return addCpInfo(programClassFile,                         new StringCpInfo(nameIndex,                                          referencedClassFile));    }    /**     * Finds or creates a FieldrefCpInfo constant pool entry for the given     * class and field, in the given class file.     * @return the constant pool index of the FieldrefCpInfo.     */    public int addFieldrefCpInfo(ProgramClassFile programClassFile,                                 ClassFile        referencedClassFile,                                 MemberInfo       referencedMemberInfo)    {        return addFieldrefCpInfo(programClassFile,                                 referencedClassFile.getName(),                                 referencedMemberInfo.getName(referencedClassFile),                                 referencedMemberInfo.getDescriptor(referencedClassFile),                                 referencedClassFile,                                 referencedMemberInfo);    }    /**     * Finds or creates a FieldrefCpInfo constant pool entry with the given     * class name, field name, and descriptor, in the given class file.     * @return the constant pool index of the FieldrefCpInfo.     */    public int addFieldrefCpInfo(ProgramClassFile programClassFile,                                 String           className,                                 String           name,                                 String           descriptor,                                 ClassFile        referencedClassFile,                                 MemberInfo       referencedMemberInfo)    {        return addFieldrefCpInfo(programClassFile,                                 className,                                 addNameAndTypeCpInfo(programClassFile,                                                      name,                                                      descriptor),                                 referencedClassFile,                                 referencedMemberInfo);    }    /**     * Finds or creates a FieldrefCpInfo constant pool entry with the given     * class name, field name, and descriptor, in the given class file.     * @return the constant pool index of the FieldrefCpInfo.     */    public int addFieldrefCpInfo(ProgramClassFile programClassFile,                                 String           className,                                 int              nameAndTypeIndex,                                 ClassFile        referencedClassFile,                                 MemberInfo       referencedMemberInfo)    {        return addFieldrefCpInfo(programClassFile,                                 addClassCpInfo(programClassFile,                                                className,                                                referencedClassFile),                                 nameAndTypeIndex,                                 referencedClassFile,                                 referencedMemberInfo);    }    /**     * Finds or creates a FieldrefCpInfo constant pool entry with the given     * class constant pool entry index, field name, and descriptor, in the     * given class file.     * @return the constant pool index of the FieldrefCpInfo.     */    public int addFieldrefCpInfo(ProgramClassFile programClassFile,                                 int              classIndex,                                 String           name,                                 String           descriptor,                                 ClassFile        referencedClassFile,                                 MemberInfo       referencedMemberInfo)    {        return addFieldrefCpInfo(programClassFile,                                 classIndex,                                 addNameAndTypeCpInfo(programClassFile,                                                      name,                                                      descriptor),                                 referencedClassFile,                                 referencedMemberInfo);    }    /**     * Finds or creates a FieldrefCpInfo constant pool entry with the given     * class constant pool entry index and name and type constant pool entry index     * the given class file.     * @return the constant pool index of the FieldrefCpInfo.     */    public int addFieldrefCpInfo(ProgramClassFile programClassFile,                                 int              classIndex,                                 int              nameAndTypeIndex,                                 ClassFile        referencedClassFile,                                 MemberInfo       referencedMemberInfo)    {        CpInfo[] constantPool      = programClassFile.constantPool;        int      constantPoolCount = programClassFile.u2constantPoolCount;        // Check if the entry already exists.        for (int index = 1; index < constantPoolCount; index++)        {            CpInfo cpInfo = constantPool[index];            if (cpInfo != null &&                cpInfo.getTag() == ClassConstants.CONSTANT_Fieldref)            {                FieldrefCpInfo fieldrefCpInfo = (FieldrefCpInfo)cpInfo;                if (fieldrefCpInfo.u2classIndex       == classIndex &&                    fieldrefCpInfo.u2nameAndTypeIndex == nameAndTypeIndex)                {                    return index;                }            }        }        return addCpInfo(programClassFile,                         new FieldrefCpInfo(classIndex,                                            nameAndTypeIndex,                                            referencedClassFile,                                            referencedMemberInfo));    }    /**     * Finds or creates a InterfaceMethodrefCpInfo constant pool entry with the     * given class name, method name, and descriptor, in the given class file.     * @return the constant pool index of the InterfaceMethodrefCpInfo.     */    public int addInterfaceMethodrefCpInfo(ProgramClassFile programClassFile,                                           String           className,                                           String           name,                                           String           descriptor,                                           ClassFile        referencedClassFile,                                           MemberInfo       referencedMemberInfo)    {        return addInterfaceMethodrefCpInfo(programClassFile,                                           className,                                           addNameAndTypeCpInfo(programClassFile,                                                                name,                                                                descriptor),                                                                referencedClassFile,                                                                referencedMemberInfo);    }    /**     * Finds or creates a InterfaceMethodrefCpInfo constant pool entry with the     * given class name, method name, and descriptor, in the given class file.     * @return the constant pool index of the InterfaceMethodrefCpInfo.     */    public int addInterfaceMethodrefCpInfo(ProgramClassFile programClassFile,                                           String           className,                                           int              nameAndTypeIndex,                                           ClassFile        referencedClassFile,                                           MemberInfo       referencedMemberInfo)    {        return addInterfaceMethodrefCpInfo(programClassFile,                                           addClassCpInfo(programClassFile,                                                          className,                                                          referencedClassFile),                                                          nameAndTypeIndex,                                                          referencedClassFile,                                                          referencedMemberInfo);    }    /**     * Finds or creates a InterfaceMethodrefCpInfo constant pool entry for the     * given class and method, in the given class file.     * @return the constant pool index of the InterfaceMethodrefCpInfo.     */    public int addInterfaceMethodrefCpInfo(ProgramClassFile programClassFile,                                           ClassFile        referencedClassFile,                                           MemberInfo       referencedMemberInfo)    {        return addInterfaceMethodrefCpInfo(programClassFile,                                           referencedClassFile.getName(),                                           referencedMemberInfo.getName(referencedClassFile),                                           referencedMemberInfo.getDescriptor(referencedClassFile),                                           referencedClassFile,                                           referencedMemberInfo);    }    /**     * Finds or creates a InterfaceMethodrefCpInfo constant pool entry with the     * given class constant pool entry index, method name, and descriptor, in     * the given class file.     * @return the constant pool index of the InterfaceMethodrefCpInfo.     */    public int addInterfaceMethodrefCpInfo(ProgramClassFile programClassFile,                                           int              classIndex,                                           String           name,                                           String           descriptor,                                           ClassFile        referencedClassFile,                                           MemberInfo       referencedMemberInfo)    {        return addInterfaceMethodrefCpInfo(programClassFile,                                           classIndex,                                           addNameAndTypeCpInfo(programClassFile,                                                                name,                                                                descriptor),                                           referencedClassFile,                                           referencedMemberInfo);    }    /**     * Finds or creates a InterfaceMethodrefCpInfo constant pool entry with the     * given class constant pool entry index and name and type constant pool     * entry index the given class file.     * @return the constant pool index of the InterfaceMethodrefCpInfo.     */    public int addInterfaceMethodrefCpInfo(ProgramClassFile programClassFile,                                           int              classIndex,                                           int              nameAndTypeIndex,                                           ClassFile        referencedClassFile,                                           MemberInfo       referencedMemberInfo)    {        CpInfo[] constantPool      = programClassFile.constantPool;        int      constantPoolCount = programClassFile.u2constantPoolCount;        // Check if the entry already exists.        for (int index = 1; index < constantPoolCount; index++)        {            CpInfo cpInfo = constantPool[index];

⌨️ 快捷键说明

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