2
2
// GenericInstanceType.cs
5
// Martin Baulig <martin@ximian.com>
6
// Jb Evain <jbevain@gmail.com>
5
// Jb Evain (jbevain@gmail.com)
8
// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
7
// Copyright (c) 2008 - 2010 Jb Evain
10
9
// Permission is hereby granted, free of charge, to any person obtaining
11
10
// a copy of this software and associated documentation files (the
27
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32
using Mono.Collections.Generic;
34
using MD = Mono.Cecil.Metadata;
30
36
namespace Mono.Cecil {
34
public sealed class GenericInstanceType : TypeSpecification, IGenericInstance {
36
private GenericArgumentCollection m_genArgs;
38
public GenericArgumentCollection GenericArguments {
40
if (m_genArgs == null)
41
m_genArgs = new GenericArgumentCollection (this);
38
public sealed class GenericInstanceType : TypeSpecification, IGenericInstance, IGenericContext {
40
Collection<TypeReference> arguments;
46
42
public bool HasGenericArguments {
47
get { return m_genArgs == null ? false : m_genArgs.Count > 0; }
50
public override bool IsValueType {
51
get { return m_isValueType; }
52
set { m_isValueType = value; }
43
get { return !arguments.IsNullOrEmpty (); }
46
public Collection<TypeReference> GenericArguments {
48
if (arguments == null)
49
arguments = new Collection<TypeReference> ();
55
public override TypeReference DeclaringType {
56
get { return ElementType.DeclaringType; }
57
set { throw new NotSupportedException (); }
55
60
public override string FullName {
57
StringBuilder sb = new StringBuilder ();
58
sb.Append (base.FullName);
60
for (int i = 0; i < this.GenericArguments.Count; i++) {
63
sb.Append (this.GenericArguments [i].FullName);
66
return sb.ToString ();
62
var name = new StringBuilder ();
63
name.Append (base.FullName);
64
this.GenericInstanceFullName (name);
65
return name.ToString ();
70
public GenericInstanceType (TypeReference elementType) : base (elementType)
69
public override bool IsGenericInstance {
73
internal override bool ContainsGenericParameter {
74
get { return this.ContainsGenericParameter () || base.ContainsGenericParameter; }
77
IGenericParameterProvider IGenericContext.Type {
78
get { return ElementType; }
81
public GenericInstanceType (TypeReference type)
72
m_isValueType = elementType.IsValueType;
84
base.IsValueType = type.IsValueType;
85
this.etype = MD.ElementType.GenericInst;