protected void resolveKnownArgumentType(XExpression argument, LightweightTypeReference knownType,
LightweightTypeReference declaredType, ITypeComputationState argumentState) {
if (!(argumentState instanceof AbstractTypeComputationState))
throw new IllegalArgumentException("argumentState was " + argumentState);
AbstractTypeComputationState castedArgumentState = (AbstractTypeComputationState) argumentState;
ResolvedTypes resolvedTypes = getState().getResolvedTypes();
LightweightTypeReference copiedDeclaredType = declaredType != null ? declaredType.copyInto(resolvedTypes.getReferenceOwner()) : null;
TypeExpectation expectation = new TypeExpectation(copiedDeclaredType, castedArgumentState, false);
LightweightTypeReference copiedReceiverType = knownType.copyInto(resolvedTypes.getReferenceOwner());
resolvedTypes.acceptType(argument, expectation, copiedReceiverType, false, ConformanceFlags.UNCHECKED);
if (copiedDeclaredType != null)
resolveAgainstActualType(copiedDeclaredType, copiedReceiverType, castedArgumentState);
}