public void transform() { if (clazz.isPhantom()) return; // build ancestor // List<SootClass> ancestors = Scene.v().getActiveHierarchy().getSuperclassesOf(clazz); List<SootClass> ancestors = new LinkedList<SootClass>(); // fill in ancestor list without using Soot.Hierarchy SootClass curAncestor = clazz; while (curAncestor.hasSuperclass()) { ancestors.add(curAncestor.getSuperclass()); curAncestor = curAncestor.getSuperclass(); } for (SootClass ancestor : ancestors) { if (ancestor.isPhantom()) continue; cloneReachableNonHiddenAncestorMethods(ancestor); } // modify ancestors fields for (SootClass ancestor : ancestors) { if (ancestor.isPhantom()) continue; SootUtils.makeFieldsVisible(ancestor); } cloneHiddenAncestorMethodsAndFixInvokeSpecial(); }