private String getMetamodelNsURI(ILeafNode text) {
   try {
     return (String)
         valueConverterService.toValue(
             text.getText(), getLinkingHelper().getRuleNameFrom(text.getGrammarElement()), text);
   } catch (ValueConverterException e) {
     LOG.debug("Exception on leaf '" + text.getText() + "'", e);
     return null;
   }
 }
 public @Nullable String getText(@Nullable INode node) {
   if (node == null) {
     return null;
   }
   ILeafNode leafNode = ElementUtil.getLeafNode(node);
   if (leafNode == null) {
     return null;
   }
   EObject grammarElement = leafNode.getGrammarElement();
   if (grammarElement == null) {
     return null;
   }
   String ruleName = getLinkingHelper().getRuleNameFrom(grammarElement);
   return (String) valueConverterService.toValue(leafNode.getText(), ruleName, leafNode);
 }
  public String getCrossRefText(
      EObject owner,
      CrossReference crossref,
      EObject target,
      RefTextEvaluator refTextEvaluator,
      ITextRegion linkTextRegion,
      StatusWrapper status) {
    try {
      final EReference ref = GrammarUtil.getReference(crossref, owner.eClass());
      final IScope scope = scopeProvider.getScope(owner, ref);
      if (scope == null) {
        throw new IllegalStateException("Could not create scope for the given cross reference.");
      }
      String ruleName = linkingHelper.getRuleNameFrom(crossref);

      Iterable<IEObjectDescription> descriptionsForCrossRef = scope.getElements(target);
      String bestRefText = null;
      for (IEObjectDescription desc : descriptionsForCrossRef) {
        try {
          String unconvertedRefText = qualifiedNameConverter.toString(desc.getName());
          String convertedRefText = valueConverter.toString(unconvertedRefText, ruleName);
          if (refTextEvaluator.isValid(convertedRefText)
              && (bestRefText == null
                  || refTextEvaluator.isBetterThan(convertedRefText, bestRefText)))
            bestRefText = convertedRefText;
        } catch (ValueConverterException e) {
          status.add(
              RefactoringStatus.WARNING,
              "Missconfigured language: New reference text has invalid syntax.",
              owner,
              linkTextRegion);
        }
      }
      if (bestRefText == null)
        status.add(
            RefactoringStatus.ERROR,
            "Refactoring introduces a name conflict.",
            owner,
            linkTextRegion);
      return bestRefText;

    } catch (Exception exc) {
      status.add(ERROR, exc.getMessage(), owner, linkTextRegion);
      return null;
    }
  }