Free cookie consent management tool by TermsFeed Policy Generator

source: branches/CodeEditor/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory-5.5.0/TypeSystem/Implementation/DefaultResolvedProperty.cs @ 11700

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

#2077: created branch and added first version

File size: 2.9 KB
Line 
1// Copyright (c) 2010-2013 AlphaSierraPapa for the SharpDevelop Team
2//
3// Permission is hereby granted, free of charge, to any person obtaining a copy of this
4// software and associated documentation files (the "Software"), to deal in the Software
5// without restriction, including without limitation the rights to use, copy, modify, merge,
6// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
7// to whom the Software is furnished to do so, subject to the following conditions:
8//
9// The above copyright notice and this permission notice shall be included in all copies or
10// substantial portions of the Software.
11//
12// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
13// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
15// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17// DEALINGS IN THE SOFTWARE.
18
19using System;
20using System.Collections.Generic;
21using System.Linq;
22using ICSharpCode.NRefactory.Utils;
23
24namespace ICSharpCode.NRefactory.TypeSystem.Implementation
25{
26  public class DefaultResolvedProperty : AbstractResolvedMember, IProperty
27  {
28    protected new readonly IUnresolvedProperty unresolved;
29    readonly IList<IParameter> parameters;
30    IMethod getter;
31    IMethod setter;
32   
33    public DefaultResolvedProperty(IUnresolvedProperty unresolved, ITypeResolveContext parentContext)
34      : base(unresolved, parentContext)
35    {
36      this.unresolved = unresolved;
37      this.parameters = unresolved.Parameters.CreateResolvedParameters(context);
38    }
39   
40    public IList<IParameter> Parameters {
41      get { return parameters; }
42    }
43   
44    public bool CanGet {
45      get { return unresolved.CanGet; }
46    }
47   
48    public bool CanSet {
49      get { return unresolved.CanSet; }
50    }
51   
52    public IMethod Getter {
53      get { return GetAccessor(ref getter, unresolved.Getter); }
54    }
55   
56    public IMethod Setter {
57      get { return GetAccessor(ref setter, unresolved.Setter); }
58    }
59   
60    public bool IsIndexer {
61      get { return unresolved.IsIndexer; }
62    }
63   
64    public override ISymbolReference ToReference()
65    {
66      var declTypeRef = this.DeclaringType.ToTypeReference();
67      if (IsExplicitInterfaceImplementation && ImplementedInterfaceMembers.Count == 1) {
68        return new ExplicitInterfaceImplementationMemberReference(declTypeRef, ImplementedInterfaceMembers[0].ToReference());
69      } else {
70        return new DefaultMemberReference(
71          this.SymbolKind, declTypeRef, this.Name, 0,
72          this.Parameters.Select(p => p.Type.ToTypeReference()).ToList());
73      }
74    }
75   
76    public override IMember Specialize(TypeParameterSubstitution substitution)
77    {
78      if (TypeParameterSubstitution.Identity.Equals(substitution))
79        return this;
80      return new SpecializedProperty(this, substitution);
81    }
82  }
83}
Note: See TracBrowser for help on using the repository browser.