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

📄 gettersetterinliner.java

📁 j2me 混淆包,用于混淆j2me的原代码用的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    // Fix the access.                    ((ProgramFieldInfo)referencedFieldInfo).u2accessFlags =                        AccessUtil.replaceAccessFlags(referencedFieldInfo.getAccessFlags(),                                                      referencedMethodInfo.getAccessFlags());                }            }            else            {                // We can't give the field the access of the getter or setter.                // Forget about inlining it after all.                getFieldPutFieldOpcode = 0;            }        }    }    /**     * This MemberInfoVisitor checks whether the visited member is a simple     * getter or setter.     */    private class MyGetterSetterChecker    implements    MemberInfoVisitor,                  AttrInfoVisitor,                  InstructionVisitor,                  CpInfoVisitor    {        // Implementations for MemberInfoVisitor.        public void visitProgramFieldInfo(ProgramClassFile programClassFile, ProgramFieldInfo programFieldInfo) {}        public void visitProgramMethodInfo(ProgramClassFile programClassFile, ProgramMethodInfo programMethodInfo)        {            programMethodInfo.attributesAccept(programClassFile, this);        }        public void visitLibraryFieldInfo(LibraryClassFile libraryClassFile, LibraryFieldInfo libraryFieldInfo) {}        public void visitLibraryMethodInfo(LibraryClassFile libraryClassFile, LibraryMethodInfo libraryMethodInfo) {}        // Implementations for AttrInfoVisitor.        public void visitUnknownAttrInfo(ClassFile classFile, UnknownAttrInfo unknownAttrInfo) {}        public void visitInnerClassesAttrInfo(ClassFile classFile, InnerClassesAttrInfo innerClassesAttrInfo) {}        public void visitEnclosingMethodAttrInfo(ClassFile classFile, EnclosingMethodAttrInfo enclosingMethodAttrInfo) {}        public void visitConstantValueAttrInfo(ClassFile classFile, FieldInfo fieldInfo, ConstantValueAttrInfo constantValueAttrInfo) {}        public void visitExceptionsAttrInfo(ClassFile classFile, MethodInfo methodInfo, ExceptionsAttrInfo exceptionsAttrInfo) {}        public void visitLineNumberTableAttrInfo(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, LineNumberTableAttrInfo lineNumberTableAttrInfo) {}        public void visitLocalVariableTableAttrInfo(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, LocalVariableTableAttrInfo localVariableTableAttrInfo) {}        public void visitLocalVariableTypeTableAttrInfo(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, LocalVariableTypeTableAttrInfo localVariableTypeTableAttrInfo) {}        public void visitSourceFileAttrInfo(ClassFile classFile, SourceFileAttrInfo sourceFileAttrInfo) {}        public void visitSourceDirAttrInfo(ClassFile classFile, SourceDirAttrInfo sourceDirAttrInfo) {}        public void visitDeprecatedAttrInfo(ClassFile classFile, DeprecatedAttrInfo deprecatedAttrInfo) {}        public void visitSyntheticAttrInfo(ClassFile classFile, SyntheticAttrInfo syntheticAttrInfo) {}        public void visitSignatureAttrInfo(ClassFile classFile, SignatureAttrInfo signatureAttrInfo) {}        public void visitRuntimeVisibleAnnotationAttrInfo(ClassFile classFile, RuntimeVisibleAnnotationsAttrInfo runtimeVisibleAnnotationsAttrInfo) {}        public void visitRuntimeInvisibleAnnotationAttrInfo(ClassFile classFile, RuntimeInvisibleAnnotationsAttrInfo runtimeInvisibleAnnotationsAttrInfo) {}        public void visitRuntimeVisibleParameterAnnotationAttrInfo(ClassFile classFile, RuntimeVisibleParameterAnnotationsAttrInfo runtimeVisibleParameterAnnotationsAttrInfo) {}        public void visitRuntimeInvisibleParameterAnnotationAttrInfo(ClassFile classFile, RuntimeInvisibleParameterAnnotationsAttrInfo runtimeInvisibleParameterAnnotationsAttrInfo) {}        public void visitAnnotationDefaultAttrInfo(ClassFile classFile, AnnotationDefaultAttrInfo annotationDefaultAttrInfo) {}        public void visitCodeAttrInfo(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo)        {            byte[] code = codeAttrInfo.code;            int         offset = 0;            Instruction instruction;            // TODO: Handle static getters and setters.            // Check the first instruction.            instruction = InstructionFactory.create(code, offset);            if (instruction.opcode != InstructionConstants.OP_ALOAD_0)            {                return;            }            offset += instruction.length(offset);            // Start remembering if this is a getter or a setter.            boolean getter = true;            // TODO: Handle array getters and setters.            // Check the second instruction.            instruction = InstructionFactory.create(code, offset);            byte opcode = instruction.opcode;            if (opcode == InstructionConstants.OP_ILOAD_1 ||                opcode == InstructionConstants.OP_LLOAD_1 ||                opcode == InstructionConstants.OP_FLOAD_1 ||                opcode == InstructionConstants.OP_DLOAD_1 ||                opcode == InstructionConstants.OP_ALOAD_1)            {                // This instruction is loading the argument. Skip it.                offset += instruction.length(offset);                instruction = InstructionFactory.create(code, offset);                opcode      = instruction.opcode;                // So this is a setter.                getter = false;            }            // Check the next instruction.            if (getter ? opcode != InstructionConstants.OP_GETFIELD :                         opcode != InstructionConstants.OP_PUTFIELD)            {                return;            }            // Retrieve the field class, name and type.            instruction.accept(classFile, methodInfo, codeAttrInfo, offset, this);            // Check the class.            // TODO: Handle fields that are in super classes.            if (!classFile.equals(referencedClassFile))            {                return;            }            offset += instruction.length(offset);            // Remember the instruction opcode.            getFieldPutFieldOpcode = opcode;            // Check the last instruction.            instruction = InstructionFactory.create(code, offset);            opcode      = instruction.opcode;            if (getter ? opcode != InstructionConstants.OP_IRETURN &&                         opcode != InstructionConstants.OP_LRETURN &&                         opcode != InstructionConstants.OP_FRETURN &&                         opcode != InstructionConstants.OP_DRETURN &&                         opcode != InstructionConstants.OP_ARETURN :                         opcode != InstructionConstants.OP_RETURN)            {                // This isn't a simple getter or setter.                // Forget about inlining it.                getFieldPutFieldOpcode = 0;            }        }        // Implementations for InstructionVisitor.        public void visitSimpleInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, SimpleInstruction simpleInstruction) {}        public void visitVariableInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, VariableInstruction variableInstruction) {}        public void visitBranchInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, BranchInstruction branchInstruction) {}        public void visitTableSwitchInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, TableSwitchInstruction tableSwitchInstruction) {}        public void visitLookUpSwitchInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, LookUpSwitchInstruction lookUpSwitchInstruction) {}        public void visitCpInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, CpInstruction cpInstruction)        {            // Remember the index of the field reference.            referencedFieldIndex = cpInstruction.cpIndex;            // Retrieve the referenced field and its class file.            classFile.constantPoolEntryAccept(cpInstruction.cpIndex, this);        }        // Implementations for CpInfoVisitor.        public void visitIntegerCpInfo(ClassFile classFile, IntegerCpInfo integerCpInfo) {}        public void visitLongCpInfo(ClassFile classFile, LongCpInfo longCpInfo) {}        public void visitFloatCpInfo(ClassFile classFile, FloatCpInfo floatCpInfo) {}        public void visitDoubleCpInfo(ClassFile classFile, DoubleCpInfo doubleCpInfo) {}        public void visitStringCpInfo(ClassFile classFile, StringCpInfo stringCpInfo) {}        public void visitUtf8CpInfo(ClassFile classFile, Utf8CpInfo utf8CpInfo) {}        public void visitMethodrefCpInfo(ClassFile classFile, MethodrefCpInfo methodrefCpInfo) {}        public void visitInterfaceMethodrefCpInfo(ClassFile classFile, InterfaceMethodrefCpInfo interfaceMethodrefCpInfo) {}        public void visitClassCpInfo(ClassFile classFile, ClassCpInfo classCpInfo) {}        public void visitFieldrefCpInfo(ClassFile classFile, FieldrefCpInfo fieldrefCpInfo)        {            // Remember the class file and the field.            referencedClassFile = fieldrefCpInfo.referencedClassFile;            referencedFieldInfo = fieldrefCpInfo.referencedMemberInfo;            // Retrieve the referenced class files.            classFile.constantPoolEntryAccept(fieldrefCpInfo.u2nameAndTypeIndex, this);        }        public void visitNameAndTypeCpInfo(ClassFile classFile, NameAndTypeCpInfo nameAndTypeCpInfo)        {            // Remember the referenced class files of the field.            typeReferencedClassFiles = nameAndTypeCpInfo.referencedClassFiles;        }    }}

⌨️ 快捷键说明

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