code: public Iterable<IEObjectDescription> getCandidateDescriptions(XExpression expression, EReference reference, /* @Nullable */ EObject toBeLinked,
  			IFeatureScopeSession session, IResolvedTypes types) throws IllegalNodeException {
  		if (toBeLinked == null) {
  			return Collections.emptyList();
  		}
  		if (!toBeLinked.eIsProxy()) {
  			throw new IllegalStateException(expression + " was already linked to " + toBeLinked);
  		}
  		URI uri = EcoreUtil.getURI(toBeLinked);
  		String fragment = uri.fragment();
  		if (encoder.isCrossLinkFragment(expression.eResource(), fragment)) {
  			INode node = encoder.getNode(expression, fragment);
  			final EClass requiredType = reference.getEReferenceType();
  			if (requiredType == null)
  				return Collections.emptyList();
  
  			final String crossRefString = linkingHelper.getCrossRefNodeAsString(node, true);
  			if (crossRefString != null && !crossRefString.equals("")) {
  				QualifiedName qualifiedLinkName = qualifiedNameConverter.toQualifiedName(crossRefString);
  				if (!qualifiedLinkName.isEmpty()) {
  					final IScope scope = session.getScope(expression, reference, types);
  					Iterable<IEObjectDescription> descriptions = scope.getElements(qualifiedLinkName);
  					if (Iterables.isEmpty(descriptions)) {
  						INode errorNode = getErrorNode(expression, node);
  						if (errorNode != node) {
  							qualifiedLinkName = getErrorName(errorNode);
  						}
  						return Collections.<IEObjectDescription>singletonList(new ErrorDescription(getErrorNode(expression, node), qualifiedLinkName));
  					}
  					return descriptions;
  				} else {
  					return Collections.<IEObjectDescription>singletonList(new ErrorDescription(null /* followUp problem */));
  				}
  			}
  			return Collections.emptyList();
  		} else {
  			throw new IllegalStateException(expression + " uses unsupported uri fragment " + uri);
  		}
  	}
docs: Returns a bunch of descriptions most of which are actually {@link IIdentifiableElementDescription describing identifiables}.
  The provided iterable is never empty but it may contain a single {@link ErrorDescription error description}.
  
  @return the available descriptions.