2010-06-21 Atsushi Enomoto <atsushi@ximian.com>
[mcs.git] / class / System.ComponentModel.Composition / src / ComponentModel / System / ComponentModel / Composition / CompositionResult.cs
blob3cdda7123bf942d339d0bb181073f31f072c5f56
1 // -----------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 // -----------------------------------------------------------------------
4 using System;
5 using System.Collections.Generic;
6 using System.Diagnostics.CodeAnalysis;
7 using System.Linq;
8 using Microsoft.Internal.Collections;
9 using System.ComponentModel.Composition.Hosting;
11 namespace System.ComponentModel.Composition
13 internal struct CompositionResult
15 public static readonly CompositionResult SucceededResult = new CompositionResult();
16 private readonly IEnumerable<CompositionError> _errors;
18 public CompositionResult(params CompositionError[] errors)
19 : this((IEnumerable<CompositionError>)errors)
23 public CompositionResult(IEnumerable<CompositionError> errors)
25 this._errors = errors;
28 public bool Succeeded
30 get { return this._errors == null || !this._errors.FastAny(); }
33 public IEnumerable<CompositionError> Errors
35 get { return this._errors ?? Enumerable.Empty<CompositionError>(); }
38 public CompositionResult MergeResult(CompositionResult result)
40 if (this.Succeeded)
42 return result;
44 if (result.Succeeded)
46 return this;
48 return MergeErrors(result._errors);
51 public CompositionResult MergeError(CompositionError error)
53 return MergeErrors(new CompositionError[] { error });
56 public CompositionResult MergeErrors(IEnumerable<CompositionError> errors)
58 return new CompositionResult(this._errors.ConcatAllowingNull(errors));
61 public CompositionResult<T> ToResult<T>(T value)
63 return new CompositionResult<T>(value, this._errors);
66 public void ThrowOnErrors()
68 ThrowOnErrors(null);
71 public void ThrowOnErrors(AtomicComposition atomicComposition)
73 if (!this.Succeeded)
75 if (atomicComposition == null)
77 throw new CompositionException(this._errors);
79 else
81 throw new ChangeRejectedException(this._errors);