Пример #1
0
  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());
    }
  }
Пример #2
0
  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);
  }