public void visit(final EditorVisitor visitor) {
		// First visit ourself
		visitor.visitClassEditor(this);

		final EditorContext context = this.context();

		// Visit each field
		final FieldInfo[] fields = this.fields();
		for (int i = 0; i < fields.length; i++) {
			final FieldEditor fieldEditor = context.editField(fields[i]);
			visitor.visitFieldEditor(fieldEditor);
			context.release(fields[i]);
		}

		// Visit each method
		final ArrayList regularMethods = new ArrayList();
		final MethodInfo[] methods = this.methods();
		for (int i = 0; i < methods.length; i++) {
			final MethodEditor methodEditor = context.editMethod(methods[i]);

			if (methodEditor.name().charAt(0) != '<') {
				regularMethods.add(methods[i]);

			} else {
				visitor.visitMethodEditor(methodEditor);
			}

			context.release(methods[i]);
		}

		final Iterator iter = regularMethods.iterator();
		while (iter.hasNext()) {
			final MethodInfo info = (MethodInfo) iter.next();
			final MethodEditor me = context.editMethod(info);
			visitor.visitMethodEditor(me);
			context.release(info);
		}
	}