code: private Type parseUnionType(EnclosingScope scope) {
  		int start = index;
  		Type t = parseIntersectionType(scope);
  		// Now, attempt to look for union and/or intersection types
  		if (tryAndMatch(true, VerticalBar) != null) {
  			// This is a union type
  			ArrayList<Type> types = new ArrayList<>();
  			types.add(t);
  			do {
  				types.add(parseIntersectionType(scope));
  			} while (tryAndMatch(true, VerticalBar) != null);
  			//
  			Type[] bounds = types.toArray(new Type[types.size()]);
  			t = annotateSourceLocation(new Type.Union(bounds), start);
  		}
  		return t;
  	}
docs: Parse a union type, which is of the form:
  
  <pre>
  UnionType ::= IntersectionType ('|' IntersectionType)*
  </pre>
  
  @return