private void scan(@Nonnull ResultSink resultSink, @Nonnull ClassPathNode classPath) {
		ClassInfo classInfo = classPath.getValue();
		for (FieldMember field : classInfo.getFields()) {
			String owner = classInfo.getName();
			String name = field.getName();
			String desc = field.getDescriptor();
			if (isMemberRefMatch(owner, name, desc))
				resultSink.accept(classPath.child(field), new MemberReference(owner, name, desc));
		}
		for (MethodMember method : classInfo.getMethods()) {
			String owner = classInfo.getName();
			String name = method.getName();
			String desc = method.getDescriptor();
			if (isMemberRefMatch(owner, name, desc))
				resultSink.accept(classPath.child(method), new MemberReference(owner, name, desc));
		}
	}
Member declaration query.
<p/>
Do note that each target value is nullable/optional.
Including only the owner and {@code null} for the name/desc will yield declarations to all members in the class.
Including only the desc will yield declarations of all members with that desc in all classes.

@param ownerPredicate
		String matching predicate for comparison against declared member owners.
       {@code null} to ignore matching against owner names.
@param namePredicate
		String matching predicate for comparison against declared member names.
       {@code null} to ignore matching against member names.
@param descriptorPredicate
		String matching predicate for comparison against declared member descriptors.
       {@code null} to ignore matching against member descriptors.
recaf-core/src/main/java/software/coley/recaf/services/search/query/DeclarationQuery.java