protected IFeatureLinkingCandidate createResolvedLink(XAbstractFeatureCall featureCall, JvmIdentifiableElement resolvedTo) {
ExpressionAwareStackedResolvedTypes resolvedTypes = this.resolvedTypes.pushTypes(featureCall);
ExpressionTypeComputationState state = createExpressionComputationState(featureCall, resolvedTypes);
FeatureLinkHelper helper = new FeatureLinkHelper();
XExpression syntacticReceiver = helper.getSyntacticReceiver(featureCall);
if (syntacticReceiver != null) {
AbstractTypeComputationState child = state.withNonVoidExpectation();
child.computeTypes(syntacticReceiver);
}
XExpression implicitReceiver = featureCall.getImplicitReceiver();
if (implicitReceiver != null) {
AbstractTypeComputationState child = state.withNonVoidExpectation();
child.computeTypes(implicitReceiver);
}
XExpression implicitFirstArgument = featureCall.getImplicitFirstArgument();
if (implicitFirstArgument != null) {
AbstractTypeComputationState child = state.withNonVoidExpectation();
child.computeTypes(implicitFirstArgument);
}
if (featureCall.isTypeLiteral() || featureCall.isPackageFragment()) {
return new ResolvedTypeLiteral(featureCall, resolvedTo, getSingleExpectation(state), state);
}
return new ResolvedFeature(featureCall, resolvedTo, helper, getSingleExpectation(state), state);
}