private static int handleClassMemberMapping(int line, int indent, int i, @Nonnull String mappingsText, @Nonnull Deque<Pair<String, String>> currentClass,
	                                            @Nonnull String type, @Nonnull MemberMappingsConsumer consumer) throws InvalidMappingException {
		// <name-a> <name-b> <formatted-access-modifier> <desc> <eol>
		// <name-b> = '' | '-' | <space> <name>
		updateIndent(currentClass, indent, () -> FAIL + type + " indent level " + indent + " too deep (expected max. "
				+ currentClass.size() + ", " + currentClass + ") @line " + line + " @char ", i);
		if (currentClass.isEmpty()) {
			throw new InvalidMappingException(FAIL + type + " without class context @line " + line + " @char " + i);
		}

		String nameA = mappingsText.substring(i = skipSpace(i, mappingsText), i = readToken(i, mappingsText));
		String nameB = mappingsText.substring(i = skipSpace(i, mappingsText), i = readToken(i, mappingsText));

		// If can have mapping
		if (!nameB.isEmpty() && !"-".equals(nameB) && !nameB.startsWith("ACC:")) {
			String desc = mappingsText.substring(i = skipSpace(i, mappingsText), i = readToken(i, mappingsText));
			if (desc.startsWith("ACC:")) { // skip optional access modifier
				desc = mappingsText.substring(i = skipSpace(i, mappingsText), i = readToken(i, mappingsText));
			}
			if (desc.isEmpty()) {
				// no desc found = line contained only one name and optional access modifier = no mapping
				return i;
			}
			assert currentClass.peek() != null; // checked above
			consumer.accept(currentClass.peek().getLeft(), desc, nameA, nameB);
		}
		return i;
	}
@param line
		Current line number in the mappings file <i>(1 based)</i>
@param indent
		Current level of indentation. Should be equal to or less than the size of the {@code currentClass} {@link Deque}.
@param i
		Current offset into the mappings file.
@param mappingsText
		Mappings file contents.
@param currentClass
		Deque of the current 'context' <i>(what class are we building mappings for)</i>.
@param type
		The expected type of content we're handling. IE, {@code CLASS}, {@code FIELD}, or {@code METHOD}.
@param consumer
		Consumer to record parsed mappings into.

@return Updated offset into the mappings file.

@throws InvalidMappingException
		When reading the mappings encounters any failure.
recaf-core/src/main/java/software/coley/recaf/services/mapping/format/EnigmaMappings.java