protected ICrossReferenceDescription getCrossReferenceDescription() { ICrossReferenceDescription _xblockexpression = null; { ASTNode _node = this.myElement.getNode(); IElementType _elementType = _node.getElementType(); EObject _grammarElement = ((IGrammarAwareElementType) _elementType).getGrammarElement(); final CrossReference crossReference = ((CrossReference) _grammarElement); BaseXtextFile _xtextFile = this.myElement.getXtextFile(); ASTNode _node_1 = this.myElement.getNode(); final INode node = _xtextFile.getINode(_node_1); final EObject context = NodeModelUtils.findActualSemanticObjectFor(node); final EReference reference = GrammarUtil.getReference(crossReference); List<INode> _findNodesForFeature = NodeModelUtils.findNodesForFeature(context, reference); Iterable<Pair<Integer, INode>> _indexed = IterableExtensions.<INode>indexed(_findNodesForFeature); final Function1<Pair<Integer, INode>, Boolean> _function = new Function1<Pair<Integer, INode>, Boolean>() { @Override public Boolean apply(final Pair<Integer, INode> it) { boolean _and = false; INode _value = it.getValue(); int _totalOffset = _value.getTotalOffset(); int _totalOffset_1 = node.getTotalOffset(); boolean _lessEqualsThan = (_totalOffset <= _totalOffset_1); if (!_lessEqualsThan) { _and = false; } else { INode _value_1 = it.getValue(); int _totalEndOffset = _value_1.getTotalEndOffset(); int _totalEndOffset_1 = node.getTotalEndOffset(); boolean _greaterEqualsThan = (_totalEndOffset >= _totalEndOffset_1); _and = _greaterEqualsThan; } return Boolean.valueOf(_and); } }; Pair<Integer, INode> _findFirst = IterableExtensions.<Pair<Integer, INode>>findFirst(_indexed, _function); Integer _key = null; if (_findFirst != null) { _key = _findFirst.getKey(); } final Integer index = _key; _xblockexpression = this.crossReferenceDescriptionProvider.get(context, reference, index); } return _xblockexpression; }