protected void _doPrepare(ResolvedTypes resolvedTypes, IFeatureScopeSession featureScopeSession, JvmOperation operation, Map<JvmIdentifiableElement, ResolvedTypes> resolvedTypesByContext) {
StackedResolvedTypes childResolvedTypes = declareTypeParameters(resolvedTypes, operation, resolvedTypesByContext);
JvmTypeReference knownType = operation.getReturnType();
if (InferredTypeIndicator.isInferred(knownType)) {
XComputedTypeReference casted = (XComputedTypeReference) knownType;
JvmTypeReference reference = createComputedTypeReference(
resolvedTypesByContext, childResolvedTypes, featureScopeSession, operation, (InferredTypeIndicator) casted.getTypeProvider(), true);
casted.setEquivalent(reference);
} else if (knownType != null) {
LightweightTypeReference lightweightReference = childResolvedTypes.getReferenceOwner().toLightweightTypeReference(knownType);
childResolvedTypes.setType(operation, lightweightReference);
} else {
JvmTypeReference reference = createComputedTypeReference(resolvedTypesByContext, childResolvedTypes, featureScopeSession, operation, null, true);
operation.setReturnType(reference);
}
}