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

📄 classspecificationvisitorfactory.java

📁 j2me 混淆包,用于混淆j2me的原代码用的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            }            else            {                // Start visiting from the extended class name.                className = extendsClassName;            }        }        // If specified, visit a single named class, otherwise visit all classes.        return className != null ?            (ClassPoolVisitor)new NamedClassFileVisitor(composedClassFileVisitor, className) :            (ClassPoolVisitor)new AllClassFileVisitor(composedClassFileVisitor);    }    /**     * Creates a new ClassPoolVisitor to efficiently travel to the specified class     * members.     *     * @param classSpecification the specifications of the class members to visit.     * @param memberInfoVisitor   the MemberInfoVisitor to be applied to matching     *                            class members.     */    private static ClassFileVisitor createClassFileVisitor(ClassSpecification classSpecification,                                                           MemberInfoVisitor  memberInfoVisitor)    {        MultiClassFileVisitor multiClassFileVisitor = new MultiClassFileVisitor();        addMemberInfoVisitors(classSpecification.fieldSpecifications,  true,  multiClassFileVisitor, memberInfoVisitor);        addMemberInfoVisitors(classSpecification.methodSpecifications, false, multiClassFileVisitor, memberInfoVisitor);        // Mark the class member in this class and in super classes.        return new ClassFileHierarchyTraveler(true, true, false, false,                                              multiClassFileVisitor);    }    /**     * Adds elements to the given MultiClassFileVisitor, to apply the given     * MemberInfoVisitor to all class members that match the given List     * of options (of the given type).     */    private static void addMemberInfoVisitors(List                  classMemberSpecifications,                                              boolean               isField,                                              MultiClassFileVisitor multiClassFileVisitor,                                              MemberInfoVisitor     memberInfoVisitor)    {        if (classMemberSpecifications != null)        {            for (int index = 0; index < classMemberSpecifications.size(); index++)            {                ClassMemberSpecification classMemberSpecification =                    (ClassMemberSpecification)classMemberSpecifications.get(index);                multiClassFileVisitor.addClassFileVisitor(                    createClassFileVisitor(classMemberSpecification,                                           isField,                                           memberInfoVisitor));            }        }    }    /**     * Constructs a ClassFileVisitor that conditionally applies the given     * ClassFileVisitor to all classes that contain the given class members.     */    private static ClassFileVisitor createClassFileMemberInfoTester(ClassSpecification classSpecification,                                                                    ClassFileVisitor   classFileVisitor)    {        // Create a linked list of conditional visitors, for fields and for        // methods.        return createClassFileMemberInfoTester(classSpecification.fieldSpecifications,                                               true,               createClassFileMemberInfoTester(classSpecification.methodSpecifications,                                               false,                                               classFileVisitor));    }    /**     * Constructs a ClassFileVisitor that conditionally applies the given     * ClassFileVisitor to all classes that contain the given List of class     * members (of the given type).     */    private static ClassFileVisitor createClassFileMemberInfoTester(List             classMemberSpecifications,                                                                    boolean          isField,                                                                    ClassFileVisitor classFileVisitor)    {        // Create a linked list of conditional visitors.        if (classMemberSpecifications != null)        {            for (int index = 0; index < classMemberSpecifications.size(); index++)            {                ClassMemberSpecification classMemberSpecification =                    (ClassMemberSpecification)classMemberSpecifications.get(index);                classFileVisitor =                    createClassFileVisitor(classMemberSpecification,                                           isField,                                           new ClassFileMemberInfoVisitor(classFileVisitor));            }        }        return classFileVisitor;    }    /**     * Creates a new ClassFileVisitor to efficiently travel to the specified class     * members.     *     * @param classMemberSpecification the specification of the class member(s)     *                                 to visit.     * @param memberInfoVisitor        the MemberInfoVisitor to be applied to     *                                 matching class member(s).     */    private static ClassFileVisitor createClassFileVisitor(ClassMemberSpecification classMemberSpecification,                                                           boolean                  isField,                                                           MemberInfoVisitor        memberInfoVisitor)    {        String name       = classMemberSpecification.name;        String descriptor = classMemberSpecification.descriptor;        // If name or descriptor are not fully specified, only visit matching        // class members.        boolean fullySpecified =            name       != null &&            descriptor != null &&            !containsWildCards(name) &&            !containsWildCards(descriptor);        if (!fullySpecified)        {            if (descriptor != null)            {                memberInfoVisitor =                    new MemberInfoDescriptorFilter(descriptor, memberInfoVisitor);            }            if (name != null)            {                memberInfoVisitor =                    new MemberInfoNameFilter(name, memberInfoVisitor);            }        }        // If any access flags are specified, only visit matching class members.        if (classMemberSpecification.requiredSetAccessFlags   != 0 ||            classMemberSpecification.requiredUnsetAccessFlags != 0)        {            memberInfoVisitor =                new MemberInfoAccessFilter(classMemberSpecification.requiredSetAccessFlags,                                           classMemberSpecification.requiredUnsetAccessFlags,                                           memberInfoVisitor);        }        // Depending on what's specified, visit a single named class member,        // or all class members, filtering the matching ones.        return isField ?            fullySpecified ?                (ClassFileVisitor)new NamedFieldVisitor(name, descriptor, memberInfoVisitor) :                (ClassFileVisitor)new AllFieldVisitor(memberInfoVisitor) :            fullySpecified ?                (ClassFileVisitor)new NamedMethodVisitor(name, descriptor, memberInfoVisitor) :                (ClassFileVisitor)new AllMethodVisitor(memberInfoVisitor);    }    // Small utility methods.    private static boolean containsWildCards(String string)    {        return string != null &&            (string.indexOf('*') >= 0 ||             string.indexOf('?') >= 0);    }}

⌨️ 快捷键说明

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