private void substitute(ClassHolder cls, ClassHierarchy hierarchy) { ClassReader subst = hierarchy.getClassSource().get(TeaVMLoggerFactorySubstitution.class.getName()); for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { cls.removeField(field); } for (MethodHolder method : cls.getMethods().toArray(new MethodHolder[0])) { cls.removeMethod(method); } for (FieldReader field : subst.getFields()) { cls.addField(ModelUtils.copyField(field)); } for (MethodReader method : subst.getMethods()) { cls.addMethod(ModelUtils.copyMethod(method)); } } }
cls.removeMethod(method); } else if (method.getName().equals("<init>")) { Program program = method.getProgram();
public void link(ClassHolder cls) { for (MethodHolder method : cls.getMethods().toArray(new MethodHolder[0])) { MethodReference methodRef = method.getReference(); MethodDependencyInfo methodDep = dependency.getMethod(methodRef); if (methodDep == null) { cls.removeMethod(method); } else if (!methodDep.isUsed()) { method.getModifiers().add(ElementModifier.ABSTRACT); method.setProgram(null); } else if (method.getProgram() != null) { link(method.getReference(), method.getProgram()); } } for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { FieldReference fieldRef = new FieldReference(cls.getName(), field.getName()); if (dependency.getField(fieldRef) == null) { cls.removeField(field); } } }
MethodDependencyInfo methodDep = dependencyAnalyzer.getMethod(method.getReference()); if (methodDep == null) { cls.removeMethod(method); } else if (!methodDep.isUsed()) { method.getModifiers().add(ElementModifier.ABSTRACT);
private void replaceMethods(ClassHolder cls, Class<?> emuType, ClassReaderSource innerSource, List<MethodDescriptor> descList) { ClassReader emuCls = innerSource.get(emuType.getName()); for (MethodDescriptor methodDesc : descList) { cls.removeMethod(cls.getMethod(methodDesc)); cls.addMethod(ModelUtils.copyMethod(emuCls.getMethod(methodDesc))); } }
private void transformControllers(final ClassHolder cls, ClassReaderSource classSource) { MethodDescriptor desc = new MethodDescriptor("initialize", void.class); cls.removeMethod(cls.getMethod(desc)); ClassReader patchClass = classSource.get(ControllersEmulator.class.getName()); MethodHolder patch = ModelUtils.copyMethod(patchClass.getMethod(desc)); ClassRefsRenamer renamer = new ClassRefsRenamer(preimage -> { if (preimage.equals(ControllersEmulator.class.getName())) { return Controllers.class.getName(); } return preimage; }); cls.addMethod(renamer.rename(patch)); } }
cls.removeMethod(method);
private void replaceClass(final ClassHolder cls, final ClassReader emuCls) { ClassRefsRenamer renamer = new ClassRefsRenamer(preimage -> preimage.equals(emuCls.getName()) ? cls.getName() : preimage); for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { cls.removeField(field); } for (MethodHolder method : cls.getMethods().toArray(new MethodHolder[0])) { cls.removeMethod(method); } for (FieldReader field : emuCls.getFields()) { cls.addField(ModelUtils.copyField(field)); } for (MethodReader method : emuCls.getMethods()) { cls.addMethod(renamer.rename(ModelUtils.copyMethod(method))); } } }
public void link(DependencyInfo dependency, ClassHolder cls) { for (MethodHolder method : cls.getMethods().toArray(new MethodHolder[0])) { MethodReference methodRef = new MethodReference(cls.getName(), method.getDescriptor()); MethodDependencyInfo methodDep = dependency.getMethod(methodRef); if (methodDep == null) { cls.removeMethod(method); } else if (!methodDep.isUsed()) { method.getModifiers().add(ElementModifier.ABSTRACT); method.setProgram(null); } else if (method.getProgram() != null) { link(dependency, method); } } for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { FieldReference fieldRef = new FieldReference(cls.getName(), field.getName()); if (dependency.getField(fieldRef) == null) { cls.removeField(field); } } }