public void process(CtClass<?> c) { int n = 0; String last = ""; System.out.println("==== " + c.getSimpleName() + " ================="); for (CtMethod<?> m : ((CtType<?>) c).getMethods()) { String name = m.getSimpleName(); if (name.equals(last)) { n++; m.setSimpleName(name + "$" + n); m.getReference().setSimpleName(name + "$" + n); } else { n = 0; last = name; } System.out.println(" " + m.getSimpleName()); } }
private static <T> void processOverridden( CtClass<?> mergeInto, CtClass<?> toMerge, final CtMethod<T> methodToMerge) { List<CtInvocation<T>> superInvocations = mergeInto.getElements( new Filter<CtInvocation<T>>() { @Override public boolean matches(CtInvocation<T> invocation) { if (!(invocation.getTarget() instanceof CtSuperAccess)) return false; CtExecutable<?> m = invocation.getExecutable().getDeclaration(); return m != null && MethodNode.overrides((CtMethod<?>) m, methodToMerge); } }); methodToMerge.setSimpleName(classPrefixedName(toMerge, methodToMerge)); methodToMerge.setVisibility(PRIVATE); removeAnnotation(methodToMerge, Override.class); for (CtInvocation<T> superInvocation : superInvocations) { superInvocation.setTarget(null); superInvocation.setExecutable(methodToMerge.getReference()); } add(mergeInto, methodToMerge, mergeInto::addMethod); }