private static Result findAllConstructorsAndFields(final ASTNode typeNode) {
    final List<FieldDeclaration> fields = new ArrayList<FieldDeclaration>();
    final List<MethodDeclaration> constructors =
        new ArrayList<MethodDeclaration>();
    ASTVisitor visitor = new ASTVisitor() {
      
      @Override
      public boolean visit(FieldDeclaration node) {
        if (!isStatic(node)) {
          fields.add(node);
        }
        return false;
      }

      @Override
      public boolean visit(MethodDeclaration node) {
        if (!node.isConstructor()) {
          return false;
        }
        constructors.add(node);
        return false;
      }

      @Override
      /**
       * Prevents this from finding constructors from inner classes (and 
       * otherwise wasted effort).
       */
      public boolean visit(TypeDeclaration node) {
        return node == typeNode;
      }

    };
    typeNode.accept(visitor);

    FieldDeclaration field = fields.get(0);
    return new Result(constructors, field);
  }