private CtClass createPatchesInfoClass() { try { CtClass ctPatchesInfoImpl = classPool.makeClass(Config.patchPackageName + ".PatchesInfoImpl"); ctPatchesInfoImpl.getClassFile().setMajorVersion(ClassFile.JAVA_7); ctPatchesInfoImpl.setInterfaces(new CtClass[]{classPool.get("com.meituan.robust.PatchesInfo")}); StringBuilder methodBody = new StringBuilder(); methodBody.append("public java.util.List getPatchedClassesInfo() {"); methodBody.append(" java.util.List patchedClassesInfos = new java.util.ArrayList();"); for (int i = 0; i < Config.modifiedClassNameList.size(); i++) { if (Constants.OBSCURE) { methodBody.append("com.meituan.robust.PatchedClassInfo patchedClass" + i + " = new com.meituan.robust.PatchedClassInfo(\"" + ReadMapping.getInstance().getClassMappingOrDefault(Config.modifiedClassNameList.get(i)).getValueName() + "\",\"" + NameManger.getInstance().getPatchControlName(Config.modifiedClassNameList.get(i).substring(Config.modifiedClassNameList.get(i).lastIndexOf('.') + 1)) + "\");"); } else { methodBody.append("com.meituan.robust.PatchedClassInfo patchedClass" + i + " = new com.meituan.robust.PatchedClassInfo(\"" + Config.modifiedClassNameList.get(i) + "\",\"" + NameManger.getInstance().getPatchControlName(Config.modifiedClassNameList.get(i).substring(Config.modifiedClassNameList.get(i).lastIndexOf('.') + 1)) + "\");"); } methodBody.append("patchedClassesInfos.add(patchedClass" + i + ");"); } methodBody.append(Constants.ROBUST_UTILS_FULL_NAME + ".isThrowable=!" + Config.catchReflectException + ";"); methodBody.append("return patchedClassesInfos;\n" + " }"); CtMethod m = make(methodBody.toString(), ctPatchesInfoImpl); ctPatchesInfoImpl.addMethod(m); return ctPatchesInfoImpl; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } }
targetCt.getClassFile().setMajorVersion(ClassFile.JAVA_8); targetCt.writeFile(genDirectory + "target/classes");
cf.setMajorVersion(majorMinor[0]); cf.setMinorVersion(majorMinor[1]);
cf.setMajorVersion(Math.min(this.major, ClassFile.JAVA_7)); cf.setMinorVersion(this.minor);
CtClass ctClass = pool.makeClass(parameterClassName); ClassFile classFile = ctClass.getClassFile(); classFile.setMajorVersion(ClassFile.JAVA_8); ctClass.addConstructor(CtNewConstructor.defaultConstructor(pool.getCtClass(parameterClassName)));
targetCt.getClassFile().setMajorVersion(ClassFile.JAVA_6); targetCt.writeFile(outputPrefix);
targetCt.getClassFile().setMajorVersion(ClassFile.JAVA_7); targetCt.writeFile("target/classes");
public static CtClass makeWrapperSubclass(CtClass container, CtClass target, String name) throws CannotCompileException { CtClass wrapperClass = container.makeNestedClass(name, true); wrapperClass.getClassFile().setMajorVersion(ClassFile.JAVA_7); Annotation annotation = new Annotation(Wrapper.class.getName(), wrapperClass.getClassFile().getConstPool()); annotation.addMemberValue("value", new ClassMemberValue(target.getName(), wrapperClass.getClassFile().getConstPool())); AnnotationUtil.annotate(wrapperClass, annotation); if (target.isInterface()) { wrapperClass.setInterfaces(new CtClass[] {target}); } else { wrapperClass.setSuperclass(target); } return wrapperClass; }
file.setMajorVersion(48);