protected String resolveAlias(String alias, LinkedHashSet<String> visited) {
			String already = resolvedAliases.get(alias);
			if (already != null) {
				return already;
			}
			if (!visited.add(alias)) {
				throw new IllegalArgumentException("Cycle of aliases: " + visited);
			}
			String to = aliases.get(alias);
			if (to == null) {
				return alias;
			}
			if (to.equals("")) {
				throw new IllegalArgumentException(
					"Cannot alias to key '' (from %s)".formatted(alias));
			}
			String result = resolveAlias(to, visited);
			resolvedAliases.put(alias, result);
			return result;
		}
{@inheritDoc}

<p>
Generally speaking, object identity is sufficient for checking equality in production;
however, this method is provided for testing equality between an actual and expected
attribute schema.
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/target/schema/DefaultTraceObjectSchema.java