Search in sources :

Example 1 with IConstructorLinkingCandidate

use of org.eclipse.xtext.xbase.typesystem.computation.IConstructorLinkingCandidate in project xtext-xtend by eclipse.

the class XtendHyperlinkHelper method createHyperlinksForCrossRef.

@Override
protected void createHyperlinksForCrossRef(XtextResource resource, INode crossRefNode, IHyperlinkAcceptor acceptor) {
    EObject crossLinkedEObject = getEObjectAtOffsetHelper().getCrossReferencedElement(crossRefNode);
    if (crossLinkedEObject != null && !crossLinkedEObject.eIsProxy()) {
        EObject containedElementAt = getEObjectAtOffsetHelper().resolveContainedElementAt(resource, crossRefNode.getOffset());
        if (containedElementAt instanceof XAbstractFeatureCall) {
            XAbstractFeatureCall casted = (XAbstractFeatureCall) containedElementAt;
            if (casted.getFeature() == crossLinkedEObject) {
                IFeatureLinkingCandidate candidate = getBatchTypeResolver().resolveTypes(casted).getLinkingCandidate(casted);
                if (candidate instanceof IAmbiguousLinkingCandidate) {
                    createMultipleLinks(resource, crossRefNode, ((IAmbiguousLinkingCandidate) candidate).getAlternatives(), acceptor);
                } else if (candidate instanceof ISuspiciouslyOverloadedCandidate) {
                    ISuspiciouslyOverloadedCandidate castedCandidate = (ISuspiciouslyOverloadedCandidate) candidate;
                    createMultipleLinks(resource, crossRefNode, Lists.newArrayList(castedCandidate.getChosenCandidate(), castedCandidate.getRejectedCandidate()), acceptor);
                }
            }
        } else if (containedElementAt instanceof XConstructorCall) {
            XConstructorCall casted = (XConstructorCall) containedElementAt;
            if (casted.getConstructor() == crossLinkedEObject) {
                IConstructorLinkingCandidate candidate = getBatchTypeResolver().resolveTypes(casted).getLinkingCandidate(casted);
                if (candidate instanceof IAmbiguousLinkingCandidate) {
                    createMultipleLinks(resource, crossRefNode, ((IAmbiguousLinkingCandidate) candidate).getAlternatives(), acceptor);
                }
            }
        }
    }
    super.createHyperlinksForCrossRef(resource, crossRefNode, acceptor);
}
Also used : ISuspiciouslyOverloadedCandidate(org.eclipse.xtext.xbase.typesystem.computation.ISuspiciouslyOverloadedCandidate) IConstructorLinkingCandidate(org.eclipse.xtext.xbase.typesystem.computation.IConstructorLinkingCandidate) IAmbiguousLinkingCandidate(org.eclipse.xtext.xbase.typesystem.computation.IAmbiguousLinkingCandidate) EObject(org.eclipse.emf.ecore.EObject) XConstructorCall(org.eclipse.xtext.xbase.XConstructorCall) XAbstractFeatureCall(org.eclipse.xtext.xbase.XAbstractFeatureCall) IFeatureLinkingCandidate(org.eclipse.xtext.xbase.typesystem.computation.IFeatureLinkingCandidate)

Aggregations

EObject (org.eclipse.emf.ecore.EObject)1 XAbstractFeatureCall (org.eclipse.xtext.xbase.XAbstractFeatureCall)1 XConstructorCall (org.eclipse.xtext.xbase.XConstructorCall)1 IAmbiguousLinkingCandidate (org.eclipse.xtext.xbase.typesystem.computation.IAmbiguousLinkingCandidate)1 IConstructorLinkingCandidate (org.eclipse.xtext.xbase.typesystem.computation.IConstructorLinkingCandidate)1 IFeatureLinkingCandidate (org.eclipse.xtext.xbase.typesystem.computation.IFeatureLinkingCandidate)1 ISuspiciouslyOverloadedCandidate (org.eclipse.xtext.xbase.typesystem.computation.ISuspiciouslyOverloadedCandidate)1