@Override
  public ConstructorInfo[] getDeclaredConstructors() {
    Iterable<? extends Method> implConstructors = classDef.getMethods();
    List<ConstructorInfo> result = new ArrayList<>();

    for (Method constructor : implConstructors) {
      if (isConstructor(constructor)) {
        ConstructorInfo ci = new ConstructorInfo();
        ci.parameterTypes = convertParameters(constructor.getParameters());
        ci.annotations = convertAnnotations(constructor.getAnnotations());
        ci.modifiers = constructor.getAccessFlags();

        result.add(ci);
      }
    }

    ConstructorInfo[] array = new ConstructorInfo[result.size()];
    return result.toArray(array);
  }
  @Override
  public MethodInfo[] getDeclaredMethods() {
    Iterable<? extends Method> implMethods = classDef.getMethods();
    List<MethodInfo> result = new ArrayList<>();

    for (Method method : implMethods) {
      if (!isConstructor(method)) {
        MethodInfo mi = new MethodInfo();
        mi.parameterTypes = convertParameters(method.getParameters());
        mi.annotations = convertAnnotations(method.getAnnotations());
        mi.modifiers = method.getAccessFlags();
        mi.name = method.getName();
        mi.exceptionTypes = new ExceptionInfo[0];
        mi.returnType = DexlibAdapter.getTypeName(method.getReturnType());

        result.add(mi);
      }
    }

    MethodInfo[] array = new MethodInfo[result.size()];
    return result.toArray(array);
  }