public boolean isAssignableFrom(@Nonnull String first, @Nonnull String second) {
		// Any Object can be assigned from T.
		if (OBJECT.equals(first))
			return true;

		// Any T can be assigned from T.
		if (first.equals(second))
			return true;

		// Any non-Object T cannot be assigned from Object.
		if (second.equals(OBJECT))
			return false;

		// Lookup vertex for the child type, and see if any parent contains the supposed super/interface type.
		InheritanceVertex secondVertex = getVertex(second);
		if (secondVertex != null && secondVertex.hasParent(second))
			return true;

		// Lookup vertex for the parent type, and see if any child contains the supposed type.
		InheritanceVertex firstVertex = getVertex(first);
		return firstVertex != null && firstVertex.hasChild(second);
	}
Given {@code List.class.isAssignableFrom(ArrayList.class)} the {@code first} parameter would be
{@code java/util/List} and the {@code second} parameter would be {@code java/util/ArrayList}.

@param first
		Assumed super-class or interface type.
@param second
		Assumed child class which extends the super-class or implements the interface type.

@return {@code true} when {@code first.isAssignableFrom(second)}.
recaf-core/src/main/java/software/coley/recaf/services/inheritance/InheritanceGraph.java