Free cookie consent management tool by TermsFeed Policy Generator

source: tags/3.3.13/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory-5.5.0/TypeSystem/Implementation/UnresolvedAttributeBlob.cs @ 18242

Last change on this file since 18242 was 11700, checked in by jkarder, 10 years ago

#2077: created branch and added first version

File size: 3.0 KB
Line 
1//
2// UnresolvedAttributeBlob.cs
3//
4// Author:
5//       Daniel Grunwald <daniel@danielgrunwald.de>
6//
7// Copyright (c) 2010-2013 AlphaSierraPapa for the SharpDevelop Team
8//
9// Permission is hereby granted, free of charge, to any person obtaining a copy
10// of this software and associated documentation files (the "Software"), to deal
11// in the Software without restriction, including without limitation the rights
12// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13// copies of the Software, and to permit persons to whom the Software is
14// furnished to do so, subject to the following conditions:
15//
16// The above copyright notice and this permission notice shall be included in
17// all copies or substantial portions of the Software.
18//
19// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25// THE SOFTWARE.
26
27using System;
28using System.Collections.Generic;
29
30namespace ICSharpCode.NRefactory.TypeSystem.Implementation
31{
32  /// <summary>
33  /// <c>IUnresolvedAttribute</c> implementation that loads the arguments from a binary blob.
34  /// </summary>
35  [Serializable]
36  public sealed class UnresolvedAttributeBlob : IUnresolvedAttribute, ISupportsInterning
37  {
38    internal readonly ITypeReference attributeType;
39    internal readonly IList<ITypeReference> ctorParameterTypes;
40    internal readonly byte[] blob;
41   
42    public UnresolvedAttributeBlob(ITypeReference attributeType, IList<ITypeReference> ctorParameterTypes, byte[] blob)
43    {
44      if (attributeType == null)
45        throw new ArgumentNullException("attributeType");
46      if (ctorParameterTypes == null)
47        throw new ArgumentNullException("ctorParameterTypes");
48      if (blob == null)
49        throw new ArgumentNullException("blob");
50      this.attributeType = attributeType;
51      this.ctorParameterTypes = ctorParameterTypes;
52      this.blob = blob;
53    }
54   
55    DomRegion IUnresolvedAttribute.Region {
56      get { return DomRegion.Empty; }
57    }
58   
59    public IAttribute CreateResolvedAttribute(ITypeResolveContext context)
60    {
61      if (context.CurrentAssembly == null)
62        throw new InvalidOperationException("Cannot resolve CecilUnresolvedAttribute without a parent assembly");
63      return new CecilResolvedAttribute(context, this);
64    }
65   
66    int ISupportsInterning.GetHashCodeForInterning()
67    {
68      return attributeType.GetHashCode() ^ ctorParameterTypes.GetHashCode() ^ BlobReader.GetBlobHashCode(blob);
69    }
70   
71    bool ISupportsInterning.EqualsForInterning(ISupportsInterning other)
72    {
73      UnresolvedAttributeBlob o = other as UnresolvedAttributeBlob;
74      return o != null && attributeType == o.attributeType && ctorParameterTypes == o.ctorParameterTypes
75        && BlobReader.BlobEquals(blob, o.blob);
76    }
77  }
78}
Note: See TracBrowser for help on using the repository browser.