|
|
|
|
@ -46,15 +46,19 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -46,15 +46,19 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
CSharpUnresolvedTypeDefinition currentTypeDefinition; |
|
|
|
|
DefaultUnresolvedMethod currentMethod; |
|
|
|
|
|
|
|
|
|
IInterningProvider interningProvider = new SimpleInterningProvider(); |
|
|
|
|
InterningProvider interningProvider = new SimpleInterningProvider(); |
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets/Sets the interning provider to use.
|
|
|
|
|
/// The default value is a new <see cref="SimpleInterningProvider"/> instance.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IInterningProvider InterningProvider { |
|
|
|
|
public InterningProvider InterningProvider { |
|
|
|
|
get { return interningProvider; } |
|
|
|
|
set { interningProvider = value; } |
|
|
|
|
set { |
|
|
|
|
if (interningProvider == null) |
|
|
|
|
throw new ArgumentNullException(); |
|
|
|
|
interningProvider = value; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
@ -143,10 +147,8 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -143,10 +147,8 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
|
|
|
|
|
public override IUnresolvedEntity VisitUsingDeclaration(UsingDeclaration usingDeclaration) |
|
|
|
|
{ |
|
|
|
|
TypeOrNamespaceReference u = usingDeclaration.Import.ToTypeReference(NameLookupMode.TypeInUsingDeclaration) as TypeOrNamespaceReference; |
|
|
|
|
var u = ConvertTypeReference(usingDeclaration.Import, NameLookupMode.TypeInUsingDeclaration) as TypeOrNamespaceReference; |
|
|
|
|
if (u != null) { |
|
|
|
|
if (interningProvider != null) |
|
|
|
|
u = interningProvider.Intern(u); |
|
|
|
|
usingScope.Usings.Add(u); |
|
|
|
|
} |
|
|
|
|
return null; |
|
|
|
|
@ -154,10 +156,8 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -154,10 +156,8 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
|
|
|
|
|
public override IUnresolvedEntity VisitUsingAliasDeclaration(UsingAliasDeclaration usingDeclaration) |
|
|
|
|
{ |
|
|
|
|
TypeOrNamespaceReference u = usingDeclaration.Import.ToTypeReference(NameLookupMode.TypeInUsingDeclaration) as TypeOrNamespaceReference; |
|
|
|
|
TypeOrNamespaceReference u = ConvertTypeReference(usingDeclaration.Import, NameLookupMode.TypeInUsingDeclaration) as TypeOrNamespaceReference; |
|
|
|
|
if (u != null) { |
|
|
|
|
if (interningProvider != null) |
|
|
|
|
u = interningProvider.Intern(u); |
|
|
|
|
usingScope.UsingAliases.Add(new KeyValuePair<string, TypeOrNamespaceReference>(usingDeclaration.Alias, u)); |
|
|
|
|
} |
|
|
|
|
return null; |
|
|
|
|
@ -225,7 +225,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -225,7 +225,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
ConvertTypeParameters(td.TypeParameters, typeDeclaration.TypeParameters, typeDeclaration.Constraints, EntityType.TypeDefinition); |
|
|
|
|
|
|
|
|
|
foreach (AstType baseType in typeDeclaration.BaseTypes) { |
|
|
|
|
td.BaseTypes.Add(baseType.ToTypeReference(NameLookupMode.BaseTypeReference)); |
|
|
|
|
td.BaseTypes.Add(ConvertTypeReference(baseType, NameLookupMode.BaseTypeReference)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (EntityDeclaration member in typeDeclaration.Members) { |
|
|
|
|
@ -233,9 +233,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -233,9 +233,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
currentTypeDefinition = (CSharpUnresolvedTypeDefinition)currentTypeDefinition.DeclaringTypeDefinition; |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
td.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
td.ApplyInterningProvider(interningProvider); |
|
|
|
|
return td; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -252,7 +250,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -252,7 +250,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
|
|
|
|
|
ConvertTypeParameters(td.TypeParameters, delegateDeclaration.TypeParameters, delegateDeclaration.Constraints, EntityType.TypeDefinition); |
|
|
|
|
|
|
|
|
|
ITypeReference returnType = delegateDeclaration.ReturnType.ToTypeReference(); |
|
|
|
|
ITypeReference returnType = ConvertTypeReference(delegateDeclaration.ReturnType); |
|
|
|
|
List<IUnresolvedParameter> parameters = new List<IUnresolvedParameter>(); |
|
|
|
|
ConvertParameters(parameters, delegateDeclaration.Parameters); |
|
|
|
|
AddDefaultMethodsToDelegate(td, returnType, parameters); |
|
|
|
|
@ -273,9 +271,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -273,9 +271,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
currentTypeDefinition = (CSharpUnresolvedTypeDefinition)currentTypeDefinition.DeclaringTypeDefinition; |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
td.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
td.ApplyInterningProvider(interningProvider); |
|
|
|
|
return td; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -364,7 +360,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -364,7 +360,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
field.IsVolatile = (modifiers & Modifiers.Volatile) != 0; |
|
|
|
|
field.IsReadOnly = (modifiers & Modifiers.Readonly) != 0; |
|
|
|
|
|
|
|
|
|
field.ReturnType = fieldDeclaration.ReturnType.ToTypeReference(); |
|
|
|
|
field.ReturnType = ConvertTypeReference(fieldDeclaration.ReturnType); |
|
|
|
|
|
|
|
|
|
if ((modifiers & Modifiers.Const) != 0) { |
|
|
|
|
field.ConstantValue = ConvertConstantValue(field.ReturnType, vi.Initializer); |
|
|
|
|
@ -372,9 +368,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -372,9 +368,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
currentTypeDefinition.Members.Add(field); |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
field.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
field.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
return isSingleField ? field : null; |
|
|
|
|
} |
|
|
|
|
@ -397,9 +391,9 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -397,9 +391,9 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
} else { |
|
|
|
|
ITypeReference[] typeArgs = new ITypeReference[currentTypeDefinition.TypeParameters.Count]; |
|
|
|
|
for (int i = 0; i < typeArgs.Length; i++) { |
|
|
|
|
typeArgs[i] = new TypeParameterReference(EntityType.TypeDefinition, i); |
|
|
|
|
typeArgs[i] = TypeParameterReference.Create(EntityType.TypeDefinition, i); |
|
|
|
|
} |
|
|
|
|
field.ReturnType = new ParameterizedTypeReference(currentTypeDefinition, typeArgs); |
|
|
|
|
field.ReturnType = interningProvider.Intern(new ParameterizedTypeReference(currentTypeDefinition, typeArgs)); |
|
|
|
|
} |
|
|
|
|
field.Accessibility = Accessibility.Public; |
|
|
|
|
field.IsStatic = true; |
|
|
|
|
@ -410,14 +404,12 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -410,14 +404,12 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
if (prevField == null || prevField.ConstantValue == null) { |
|
|
|
|
field.ConstantValue = ConvertConstantValue(field.ReturnType, new PrimitiveExpression(0)); |
|
|
|
|
} else { |
|
|
|
|
field.ConstantValue = new IncrementConstantValue(prevField.ConstantValue); |
|
|
|
|
field.ConstantValue = interningProvider.Intern(new IncrementConstantValue(prevField.ConstantValue)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
currentTypeDefinition.Members.Add(field); |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
field.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
field.ApplyInterningProvider(interningProvider); |
|
|
|
|
return field; |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
@ -438,12 +430,13 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -438,12 +430,13 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
tp.Region = MakeRegion(tpDecl); |
|
|
|
|
ConvertAttributes(tp.Attributes, tpDecl.Attributes); |
|
|
|
|
tp.Variance = tpDecl.Variance; |
|
|
|
|
tp.ApplyInterningProvider(interningProvider); |
|
|
|
|
m.TypeParameters.Add(tp); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
ConvertTypeParameters(m.TypeParameters, methodDeclaration.TypeParameters, methodDeclaration.Constraints, EntityType.Method); |
|
|
|
|
} |
|
|
|
|
m.ReturnType = methodDeclaration.ReturnType.ToTypeReference(); |
|
|
|
|
m.ReturnType = ConvertTypeReference(methodDeclaration.ReturnType); |
|
|
|
|
ConvertAttributes(m.Attributes, methodDeclaration.Attributes.Where(s => s.AttributeTarget != "return")); |
|
|
|
|
ConvertAttributes(m.ReturnTypeAttributes, methodDeclaration.Attributes.Where(s => s.AttributeTarget == "return")); |
|
|
|
|
|
|
|
|
|
@ -459,16 +452,16 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -459,16 +452,16 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
if (!methodDeclaration.PrivateImplementationType.IsNull) { |
|
|
|
|
m.Accessibility = Accessibility.None; |
|
|
|
|
m.IsExplicitInterfaceImplementation = true; |
|
|
|
|
m.ExplicitInterfaceImplementations.Add(new DefaultMemberReference( |
|
|
|
|
m.EntityType, methodDeclaration.PrivateImplementationType.ToTypeReference(), m.Name, |
|
|
|
|
m.TypeParameters.Count, GetParameterTypes(m.Parameters))); |
|
|
|
|
m.ExplicitInterfaceImplementations.Add( |
|
|
|
|
interningProvider.Intern(new DefaultMemberReference( |
|
|
|
|
m.EntityType, |
|
|
|
|
ConvertTypeReference(methodDeclaration.PrivateImplementationType), |
|
|
|
|
m.Name, m.TypeParameters.Count, GetParameterTypes(m.Parameters)))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
currentTypeDefinition.Members.Add(m); |
|
|
|
|
currentMethod = null; |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
m.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
m.ApplyInterningProvider(interningProvider); |
|
|
|
|
return m; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -480,7 +473,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -480,7 +473,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
for (int i = 0; i < types.Length; i++) { |
|
|
|
|
types[i] = parameters[i].Type; |
|
|
|
|
} |
|
|
|
|
return types; |
|
|
|
|
return interningProvider.InternList(types); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool InheritsConstraints(MethodDeclaration methodDeclaration) |
|
|
|
|
@ -523,30 +516,15 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -523,30 +516,15 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
var lookupMode = (ownerType == EntityType.TypeDefinition) ? NameLookupMode.BaseTypeReference : NameLookupMode.Type; |
|
|
|
|
tp.Constraints.Add(type.ToTypeReference(lookupMode)); |
|
|
|
|
tp.Constraints.Add(ConvertTypeReference(type, lookupMode)); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
IMemberReference ConvertInterfaceImplementation(AstType interfaceType, AbstractUnresolvedMember unresolvedMember) |
|
|
|
|
{ |
|
|
|
|
ITypeReference interfaceTypeReference = interfaceType.ToTypeReference(); |
|
|
|
|
int typeParameterCount = 0; |
|
|
|
|
IList<ITypeReference> parameterTypes = null; |
|
|
|
|
if (unresolvedMember.EntityType == EntityType.Method) { |
|
|
|
|
typeParameterCount = ((IUnresolvedMethod)unresolvedMember).TypeParameters.Count; |
|
|
|
|
foreach (DefaultUnresolvedTypeParameter tp in list) { |
|
|
|
|
tp.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
IUnresolvedParameterizedMember parameterizedMember = unresolvedMember as IUnresolvedParameterizedMember; |
|
|
|
|
if (parameterizedMember != null) { |
|
|
|
|
parameterTypes = new ITypeReference[parameterizedMember.Parameters.Count]; |
|
|
|
|
for (int i = 0; i < parameterTypes.Count; i++) { |
|
|
|
|
parameterTypes[i] = parameterizedMember.Parameters[i].Type; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return new DefaultMemberReference(unresolvedMember.EntityType, interfaceTypeReference, unresolvedMember.Name, typeParameterCount, parameterTypes); |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
@ -559,7 +537,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -559,7 +537,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
m.BodyRegion = MakeRegion(operatorDeclaration.Body); |
|
|
|
|
AddXmlDocumentation(m, operatorDeclaration); |
|
|
|
|
|
|
|
|
|
m.ReturnType = operatorDeclaration.ReturnType.ToTypeReference(); |
|
|
|
|
m.ReturnType = ConvertTypeReference(operatorDeclaration.ReturnType); |
|
|
|
|
ConvertAttributes(m.Attributes, operatorDeclaration.Attributes.Where(s => s.AttributeTarget != "return")); |
|
|
|
|
ConvertAttributes(m.ReturnTypeAttributes, operatorDeclaration.Attributes.Where(s => s.AttributeTarget == "return")); |
|
|
|
|
|
|
|
|
|
@ -569,9 +547,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -569,9 +547,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
ConvertParameters(m.Parameters, operatorDeclaration.Parameters); |
|
|
|
|
|
|
|
|
|
currentTypeDefinition.Members.Add(m); |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
m.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
m.ApplyInterningProvider(interningProvider); |
|
|
|
|
return m; |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
@ -602,9 +578,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -602,9 +578,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
ApplyModifiers(ctor, modifiers); |
|
|
|
|
|
|
|
|
|
currentTypeDefinition.Members.Add(ctor); |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
ctor.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
ctor.ApplyInterningProvider(interningProvider); |
|
|
|
|
return ctor; |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
@ -625,9 +599,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -625,9 +599,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
AddXmlDocumentation(dtor, destructorDeclaration); |
|
|
|
|
|
|
|
|
|
currentTypeDefinition.Members.Add(dtor); |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
dtor.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
dtor.ApplyInterningProvider(interningProvider); |
|
|
|
|
return dtor; |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
@ -639,22 +611,20 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -639,22 +611,20 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
p.Region = MakeRegion(propertyDeclaration); |
|
|
|
|
p.BodyRegion = MakeBraceRegion(propertyDeclaration); |
|
|
|
|
ApplyModifiers(p, propertyDeclaration.Modifiers); |
|
|
|
|
p.ReturnType = propertyDeclaration.ReturnType.ToTypeReference(); |
|
|
|
|
p.ReturnType = ConvertTypeReference(propertyDeclaration.ReturnType); |
|
|
|
|
ConvertAttributes(p.Attributes, propertyDeclaration.Attributes); |
|
|
|
|
AddXmlDocumentation(p, propertyDeclaration); |
|
|
|
|
if (!propertyDeclaration.PrivateImplementationType.IsNull) { |
|
|
|
|
p.Accessibility = Accessibility.None; |
|
|
|
|
p.IsExplicitInterfaceImplementation = true; |
|
|
|
|
p.ExplicitInterfaceImplementations.Add(new DefaultMemberReference( |
|
|
|
|
p.EntityType, propertyDeclaration.PrivateImplementationType.ToTypeReference(), p.Name)); |
|
|
|
|
p.ExplicitInterfaceImplementations.Add(interningProvider.Intern(new DefaultMemberReference( |
|
|
|
|
p.EntityType, ConvertTypeReference(propertyDeclaration.PrivateImplementationType), p.Name))); |
|
|
|
|
} |
|
|
|
|
bool isExtern = propertyDeclaration.HasModifier(Modifiers.Extern); |
|
|
|
|
p.Getter = ConvertAccessor(propertyDeclaration.Getter, p, "get_", isExtern); |
|
|
|
|
p.Setter = ConvertAccessor(propertyDeclaration.Setter, p, "set_", isExtern); |
|
|
|
|
currentTypeDefinition.Members.Add(p); |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
p.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
p.ApplyInterningProvider(interningProvider); |
|
|
|
|
return p; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -665,7 +635,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -665,7 +635,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
p.Region = MakeRegion(indexerDeclaration); |
|
|
|
|
p.BodyRegion = MakeBraceRegion(indexerDeclaration); |
|
|
|
|
ApplyModifiers(p, indexerDeclaration.Modifiers); |
|
|
|
|
p.ReturnType = indexerDeclaration.ReturnType.ToTypeReference(); |
|
|
|
|
p.ReturnType = ConvertTypeReference(indexerDeclaration.ReturnType); |
|
|
|
|
ConvertAttributes(p.Attributes, indexerDeclaration.Attributes); |
|
|
|
|
AddXmlDocumentation(p, indexerDeclaration); |
|
|
|
|
|
|
|
|
|
@ -674,17 +644,15 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -674,17 +644,15 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
if (!indexerDeclaration.PrivateImplementationType.IsNull) { |
|
|
|
|
p.Accessibility = Accessibility.None; |
|
|
|
|
p.IsExplicitInterfaceImplementation = true; |
|
|
|
|
p.ExplicitInterfaceImplementations.Add(new DefaultMemberReference( |
|
|
|
|
p.EntityType, indexerDeclaration.PrivateImplementationType.ToTypeReference(), p.Name, 0, GetParameterTypes(p.Parameters))); |
|
|
|
|
p.ExplicitInterfaceImplementations.Add(interningProvider.Intern(new DefaultMemberReference( |
|
|
|
|
p.EntityType, indexerDeclaration.PrivateImplementationType.ToTypeReference(), p.Name, 0, GetParameterTypes(p.Parameters)))); |
|
|
|
|
} |
|
|
|
|
bool isExtern = indexerDeclaration.HasModifier(Modifiers.Extern); |
|
|
|
|
p.Getter = ConvertAccessor(indexerDeclaration.Getter, p, "get_", isExtern); |
|
|
|
|
p.Setter = ConvertAccessor(indexerDeclaration.Setter, p, "set_", isExtern); |
|
|
|
|
|
|
|
|
|
currentTypeDefinition.Members.Add(p); |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
p.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
p.ApplyInterningProvider(interningProvider); |
|
|
|
|
return p; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -705,7 +673,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -705,7 +673,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
|
|
|
|
|
a.Region = MakeRegion(accessor); |
|
|
|
|
a.BodyRegion = MakeRegion(accessor.Body); |
|
|
|
|
// An accessor has no body if all both are true:
|
|
|
|
|
// An accessor has no body if both are true:
|
|
|
|
|
// a) there's no body in the code
|
|
|
|
|
// b) the member is either abstract or extern
|
|
|
|
|
a.HasBody = !(accessor.Body.IsNull && (p.IsAbstract || memberIsExtern)); |
|
|
|
|
@ -733,12 +701,13 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -733,12 +701,13 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
if (p.IsExplicitInterfaceImplementation) { |
|
|
|
|
a.IsExplicitInterfaceImplementation = true; |
|
|
|
|
Debug.Assert(p.ExplicitInterfaceImplementations.Count == 1); |
|
|
|
|
a.ExplicitInterfaceImplementations.Add(new DefaultMemberReference( |
|
|
|
|
a.ExplicitInterfaceImplementations.Add(interningProvider.Intern(new DefaultMemberReference( |
|
|
|
|
EntityType.Accessor, |
|
|
|
|
p.ExplicitInterfaceImplementations[0].DeclaringTypeReference, |
|
|
|
|
a.Name, 0, GetParameterTypes(a.Parameters) |
|
|
|
|
)); |
|
|
|
|
))); |
|
|
|
|
} |
|
|
|
|
a.ApplyInterningProvider(interningProvider); |
|
|
|
|
return a; |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
@ -758,7 +727,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -758,7 +727,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
ApplyModifiers(ev, modifiers); |
|
|
|
|
AddXmlDocumentation(ev, eventDeclaration); |
|
|
|
|
|
|
|
|
|
ev.ReturnType = eventDeclaration.ReturnType.ToTypeReference(); |
|
|
|
|
ev.ReturnType = ConvertTypeReference(eventDeclaration.ReturnType); |
|
|
|
|
|
|
|
|
|
var valueParameter = new DefaultUnresolvedParameter(ev.ReturnType, "value"); |
|
|
|
|
ev.AddAccessor = CreateDefaultEventAccessor(ev, "add_" + ev.Name, valueParameter); |
|
|
|
|
@ -777,9 +746,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -777,9 +746,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
currentTypeDefinition.Members.Add(ev); |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
ev.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
ev.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
return isSingleEvent ? ev : null; |
|
|
|
|
} |
|
|
|
|
@ -810,15 +777,15 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -810,15 +777,15 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
e.Region = MakeRegion(eventDeclaration); |
|
|
|
|
e.BodyRegion = MakeBraceRegion(eventDeclaration); |
|
|
|
|
ApplyModifiers(e, eventDeclaration.Modifiers); |
|
|
|
|
e.ReturnType = eventDeclaration.ReturnType.ToTypeReference(); |
|
|
|
|
e.ReturnType = ConvertTypeReference(eventDeclaration.ReturnType); |
|
|
|
|
ConvertAttributes(e.Attributes, eventDeclaration.Attributes); |
|
|
|
|
AddXmlDocumentation(e, eventDeclaration); |
|
|
|
|
|
|
|
|
|
if (!eventDeclaration.PrivateImplementationType.IsNull) { |
|
|
|
|
e.Accessibility = Accessibility.None; |
|
|
|
|
e.IsExplicitInterfaceImplementation = true; |
|
|
|
|
e.ExplicitInterfaceImplementations.Add(new DefaultMemberReference( |
|
|
|
|
e.EntityType, eventDeclaration.PrivateImplementationType.ToTypeReference(), e.Name)); |
|
|
|
|
e.ExplicitInterfaceImplementations.Add(interningProvider.Intern(new DefaultMemberReference( |
|
|
|
|
e.EntityType, eventDeclaration.PrivateImplementationType.ToTypeReference(), e.Name))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// custom events can't be extern; the non-custom event syntax must be used for extern events
|
|
|
|
|
@ -826,9 +793,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -826,9 +793,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
e.RemoveAccessor = ConvertAccessor(eventDeclaration.RemoveAccessor, e, "remove_", false); |
|
|
|
|
|
|
|
|
|
currentTypeDefinition.Members.Add(e); |
|
|
|
|
if (interningProvider != null) { |
|
|
|
|
e.ApplyInterningProvider(interningProvider); |
|
|
|
|
} |
|
|
|
|
e.ApplyInterningProvider(interningProvider); |
|
|
|
|
return e; |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
@ -904,18 +869,18 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -904,18 +869,18 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
internal static ITypeReference ConvertAttributeType(AstType type) |
|
|
|
|
internal static ITypeReference ConvertAttributeType(AstType type, InterningProvider interningProvider) |
|
|
|
|
{ |
|
|
|
|
ITypeReference tr = type.ToTypeReference(); |
|
|
|
|
ITypeReference tr = type.ToTypeReference(NameLookupMode.Type, interningProvider); |
|
|
|
|
if (!type.GetChildByRole(Roles.Identifier).IsVerbatim) { |
|
|
|
|
// Try to add "Attribute" suffix, but only if the identifier
|
|
|
|
|
// (=last identifier in fully qualified name) isn't a verbatim identifier.
|
|
|
|
|
SimpleTypeOrNamespaceReference st = tr as SimpleTypeOrNamespaceReference; |
|
|
|
|
MemberTypeOrNamespaceReference mt = tr as MemberTypeOrNamespaceReference; |
|
|
|
|
if (st != null) |
|
|
|
|
return new AttributeTypeReference(st, st.AddSuffix("Attribute")); |
|
|
|
|
return interningProvider.Intern(new AttributeTypeReference(st, interningProvider.Intern(st.AddSuffix("Attribute")))); |
|
|
|
|
else if (mt != null) |
|
|
|
|
return new AttributeTypeReference(mt, mt.AddSuffix("Attribute")); |
|
|
|
|
return interningProvider.Intern(new AttributeTypeReference(mt, interningProvider.Intern(mt.AddSuffix("Attribute")))); |
|
|
|
|
} |
|
|
|
|
return tr; |
|
|
|
|
} |
|
|
|
|
@ -923,20 +888,21 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -923,20 +888,21 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
CSharpAttribute ConvertAttribute(CSharp.Attribute attr) |
|
|
|
|
{ |
|
|
|
|
DomRegion region = MakeRegion(attr); |
|
|
|
|
ITypeReference type = ConvertAttributeType(attr.Type); |
|
|
|
|
ITypeReference type = ConvertAttributeType(attr.Type, interningProvider); |
|
|
|
|
List<IConstantValue> positionalArguments = null; |
|
|
|
|
List<KeyValuePair<string, IConstantValue>> namedCtorArguments = null; |
|
|
|
|
List<KeyValuePair<string, IConstantValue>> namedArguments = null; |
|
|
|
|
foreach (Expression expr in attr.Arguments) { |
|
|
|
|
NamedArgumentExpression nae = expr as NamedArgumentExpression; |
|
|
|
|
if (nae != null) { |
|
|
|
|
string name = interningProvider.Intern(nae.Name); |
|
|
|
|
if (namedCtorArguments == null) |
|
|
|
|
namedCtorArguments = new List<KeyValuePair<string, IConstantValue>>(); |
|
|
|
|
namedCtorArguments.Add(new KeyValuePair<string, IConstantValue>(nae.Name, ConvertAttributeArgument(nae.Expression))); |
|
|
|
|
namedCtorArguments.Add(new KeyValuePair<string, IConstantValue>(name, ConvertAttributeArgument(nae.Expression))); |
|
|
|
|
} else { |
|
|
|
|
NamedExpression namedExpression = expr as NamedExpression; |
|
|
|
|
if (namedExpression != null) { |
|
|
|
|
string name = namedExpression.Name; |
|
|
|
|
string name = interningProvider.Intern(namedExpression.Name); |
|
|
|
|
if (namedArguments == null) |
|
|
|
|
namedArguments = new List<KeyValuePair<string, IConstantValue>>(); |
|
|
|
|
namedArguments.Add(new KeyValuePair<string, IConstantValue>(name, ConvertAttributeArgument(namedExpression.Expression))); |
|
|
|
|
@ -947,53 +913,55 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -947,53 +913,55 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return new CSharpAttribute(type, region, positionalArguments, namedCtorArguments, namedArguments); |
|
|
|
|
return new CSharpAttribute(type, region, interningProvider.InternList(positionalArguments), namedCtorArguments, namedArguments); |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Types
|
|
|
|
|
[Obsolete("Use AstType.ToTypeReference() instead.")] |
|
|
|
|
public static ITypeReference ConvertType(AstType type, NameLookupMode lookupMode = NameLookupMode.Type) |
|
|
|
|
ITypeReference ConvertTypeReference(AstType type, NameLookupMode lookupMode = NameLookupMode.Type) |
|
|
|
|
{ |
|
|
|
|
return type.ToTypeReference(lookupMode); |
|
|
|
|
return type.ToTypeReference(lookupMode, interningProvider); |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Constant Values
|
|
|
|
|
IConstantValue ConvertConstantValue(ITypeReference targetType, AstNode expression) |
|
|
|
|
{ |
|
|
|
|
return ConvertConstantValue(targetType, expression, currentTypeDefinition, currentMethod, usingScope); |
|
|
|
|
return ConvertConstantValue(targetType, expression, currentTypeDefinition, currentMethod, usingScope, interningProvider); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
internal static IConstantValue ConvertConstantValue( |
|
|
|
|
ITypeReference targetType, AstNode expression, |
|
|
|
|
IUnresolvedTypeDefinition parentTypeDefinition, IUnresolvedMethod parentMethodDefinition, UsingScope parentUsingScope) |
|
|
|
|
IUnresolvedTypeDefinition parentTypeDefinition, IUnresolvedMethod parentMethodDefinition, UsingScope parentUsingScope, |
|
|
|
|
InterningProvider interningProvider) |
|
|
|
|
{ |
|
|
|
|
ConstantValueBuilder b = new ConstantValueBuilder(false); |
|
|
|
|
ConstantValueBuilder b = new ConstantValueBuilder(false, interningProvider); |
|
|
|
|
ConstantExpression c = expression.AcceptVisitor(b); |
|
|
|
|
if (c == null) |
|
|
|
|
return new ErrorConstantValue(targetType); |
|
|
|
|
PrimitiveConstantExpression pc = c as PrimitiveConstantExpression; |
|
|
|
|
if (pc != null && pc.Type == targetType) { |
|
|
|
|
// Save memory by directly using a SimpleConstantValue.
|
|
|
|
|
return new SimpleConstantValue(targetType, pc.Value); |
|
|
|
|
return interningProvider.Intern(new SimpleConstantValue(targetType, pc.Value)); |
|
|
|
|
} |
|
|
|
|
// cast to the desired type
|
|
|
|
|
return new ConstantCast(targetType, c); |
|
|
|
|
return interningProvider.Intern(new ConstantCast(targetType, c)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
IConstantValue ConvertAttributeArgument(Expression expression) |
|
|
|
|
{ |
|
|
|
|
ConstantValueBuilder b = new ConstantValueBuilder(true); |
|
|
|
|
ConstantValueBuilder b = new ConstantValueBuilder(true, interningProvider); |
|
|
|
|
return expression.AcceptVisitor(b); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sealed class ConstantValueBuilder : DepthFirstAstVisitor<ConstantExpression> |
|
|
|
|
{ |
|
|
|
|
readonly InterningProvider interningProvider; |
|
|
|
|
readonly bool isAttributeArgument; |
|
|
|
|
|
|
|
|
|
public ConstantValueBuilder(bool isAttributeArgument) |
|
|
|
|
public ConstantValueBuilder(bool isAttributeArgument, InterningProvider interningProvider) |
|
|
|
|
{ |
|
|
|
|
this.interningProvider = interningProvider; |
|
|
|
|
this.isAttributeArgument = isAttributeArgument; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1004,13 +972,21 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -1004,13 +972,21 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
|
|
|
|
|
public override ConstantExpression VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression) |
|
|
|
|
{ |
|
|
|
|
return new PrimitiveConstantExpression(KnownTypeReference.Object, null); |
|
|
|
|
return interningProvider.Intern( |
|
|
|
|
new PrimitiveConstantExpression(KnownTypeReference.Object, null)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public override ConstantExpression VisitPrimitiveExpression(PrimitiveExpression primitiveExpression) |
|
|
|
|
{ |
|
|
|
|
TypeCode typeCode = Type.GetTypeCode(primitiveExpression.Value.GetType()); |
|
|
|
|
return new PrimitiveConstantExpression(typeCode.ToTypeReference(), primitiveExpression.Value); |
|
|
|
|
object val = interningProvider.InternValue(primitiveExpression.Value); |
|
|
|
|
TypeCode typeCode = Type.GetTypeCode(val.GetType()); |
|
|
|
|
return interningProvider.Intern( |
|
|
|
|
new PrimitiveConstantExpression(typeCode.ToTypeReference(), val)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ITypeReference ConvertTypeReference(AstType type) |
|
|
|
|
{ |
|
|
|
|
return type.ToTypeReference(NameLookupMode.Type, interningProvider); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
IList<ITypeReference> ConvertTypeArguments(AstNodeCollection<AstType> types) |
|
|
|
|
@ -1021,31 +997,33 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -1021,31 +997,33 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
ITypeReference[] result = new ITypeReference[count]; |
|
|
|
|
int pos = 0; |
|
|
|
|
foreach (AstType type in types) { |
|
|
|
|
result[pos++] = type.ToTypeReference(); |
|
|
|
|
result[pos++] = ConvertTypeReference(type); |
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
return interningProvider.InternList(result); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public override ConstantExpression VisitIdentifierExpression(IdentifierExpression identifierExpression) |
|
|
|
|
{ |
|
|
|
|
return new ConstantIdentifierReference(identifierExpression.Identifier, ConvertTypeArguments(identifierExpression.TypeArguments)); |
|
|
|
|
string identifier = interningProvider.Intern(identifierExpression.Identifier); |
|
|
|
|
return new ConstantIdentifierReference(identifier, ConvertTypeArguments(identifierExpression.TypeArguments)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public override ConstantExpression VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression) |
|
|
|
|
{ |
|
|
|
|
string memberName = interningProvider.Intern(memberReferenceExpression.MemberName); |
|
|
|
|
TypeReferenceExpression tre = memberReferenceExpression.Target as TypeReferenceExpression; |
|
|
|
|
if (tre != null) { |
|
|
|
|
// handle "int.MaxValue"
|
|
|
|
|
return new ConstantMemberReference( |
|
|
|
|
tre.Type.ToTypeReference(), |
|
|
|
|
memberReferenceExpression.MemberName, |
|
|
|
|
ConvertTypeReference(tre.Type), |
|
|
|
|
memberName, |
|
|
|
|
ConvertTypeArguments(memberReferenceExpression.TypeArguments)); |
|
|
|
|
} |
|
|
|
|
ConstantExpression v = memberReferenceExpression.Target.AcceptVisitor(this); |
|
|
|
|
if (v == null) |
|
|
|
|
return null; |
|
|
|
|
return new ConstantMemberReference( |
|
|
|
|
v, memberReferenceExpression.MemberName, |
|
|
|
|
v, memberName, |
|
|
|
|
ConvertTypeArguments(memberReferenceExpression.TypeArguments)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1059,7 +1037,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -1059,7 +1037,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
ConstantExpression v = castExpression.Expression.AcceptVisitor(this); |
|
|
|
|
if (v == null) |
|
|
|
|
return null; |
|
|
|
|
return new ConstantCast(castExpression.Type.ToTypeReference(), v); |
|
|
|
|
return interningProvider.Intern(new ConstantCast(ConvertTypeReference(castExpression.Type), v)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public override ConstantExpression VisitCheckedExpression(CheckedExpression checkedExpression) |
|
|
|
|
@ -1082,7 +1060,8 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -1082,7 +1060,8 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
|
|
|
|
|
public override ConstantExpression VisitDefaultValueExpression(DefaultValueExpression defaultValueExpression) |
|
|
|
|
{ |
|
|
|
|
return new ConstantDefaultValue(defaultValueExpression.Type.ToTypeReference()); |
|
|
|
|
return interningProvider.Intern( |
|
|
|
|
new ConstantDefaultValue(ConvertTypeReference(defaultValueExpression.Type))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public override ConstantExpression VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression) |
|
|
|
|
@ -1113,7 +1092,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -1113,7 +1092,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
public override ConstantExpression VisitTypeOfExpression(TypeOfExpression typeOfExpression) |
|
|
|
|
{ |
|
|
|
|
if (isAttributeArgument) { |
|
|
|
|
return new TypeOfConstantExpression(typeOfExpression.Type.ToTypeReference()); |
|
|
|
|
return new TypeOfConstantExpression(ConvertTypeReference(typeOfExpression.Type)); |
|
|
|
|
} else { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
@ -1128,9 +1107,9 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -1128,9 +1107,9 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
if (arrayCreateExpression.Type.IsNull) { |
|
|
|
|
type = null; |
|
|
|
|
} else { |
|
|
|
|
type = arrayCreateExpression.Type.ToTypeReference(); |
|
|
|
|
type = ConvertTypeReference(arrayCreateExpression.Type); |
|
|
|
|
foreach (var spec in arrayCreateExpression.AdditionalArraySpecifiers.Reverse()) { |
|
|
|
|
type = new ArrayTypeReference(type, spec.Dimensions); |
|
|
|
|
type = interningProvider.Intern(new ArrayTypeReference(type, spec.Dimensions)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
ConstantExpression[] elements = new ConstantExpression[initializer.Elements.Count]; |
|
|
|
|
@ -1153,17 +1132,17 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -1153,17 +1132,17 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
void ConvertParameters(IList<IUnresolvedParameter> outputList, IEnumerable<ParameterDeclaration> parameters) |
|
|
|
|
{ |
|
|
|
|
foreach (ParameterDeclaration pd in parameters) { |
|
|
|
|
DefaultUnresolvedParameter p = new DefaultUnresolvedParameter(pd.Type.ToTypeReference(), pd.Name); |
|
|
|
|
DefaultUnresolvedParameter p = new DefaultUnresolvedParameter(ConvertTypeReference(pd.Type), interningProvider.Intern(pd.Name)); |
|
|
|
|
p.Region = MakeRegion(pd); |
|
|
|
|
ConvertAttributes(p.Attributes, pd.Attributes); |
|
|
|
|
switch (pd.ParameterModifier) { |
|
|
|
|
case ParameterModifier.Ref: |
|
|
|
|
p.IsRef = true; |
|
|
|
|
p.Type = new ByReferenceTypeReference(p.Type); |
|
|
|
|
p.Type = interningProvider.Intern(new ByReferenceTypeReference(p.Type)); |
|
|
|
|
break; |
|
|
|
|
case ParameterModifier.Out: |
|
|
|
|
p.IsOut = true; |
|
|
|
|
p.Type = new ByReferenceTypeReference(p.Type); |
|
|
|
|
p.Type = interningProvider.Intern(new ByReferenceTypeReference(p.Type)); |
|
|
|
|
break; |
|
|
|
|
case ParameterModifier.Params: |
|
|
|
|
p.IsParams = true; |
|
|
|
|
@ -1171,17 +1150,17 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -1171,17 +1150,17 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
} |
|
|
|
|
if (!pd.DefaultExpression.IsNull) |
|
|
|
|
p.DefaultValue = ConvertConstantValue(p.Type, pd.DefaultExpression); |
|
|
|
|
outputList.Add(p); |
|
|
|
|
outputList.Add(interningProvider.Intern(p)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
internal static IList<ITypeReference> GetParameterTypes(IEnumerable<ParameterDeclaration> parameters) |
|
|
|
|
internal static IList<ITypeReference> GetParameterTypes(IEnumerable<ParameterDeclaration> parameters, InterningProvider interningProvider) |
|
|
|
|
{ |
|
|
|
|
List<ITypeReference> result = new List<ITypeReference>(); |
|
|
|
|
foreach (ParameterDeclaration pd in parameters) { |
|
|
|
|
ITypeReference type = pd.Type.ToTypeReference(); |
|
|
|
|
ITypeReference type = pd.Type.ToTypeReference(NameLookupMode.Type, interningProvider); |
|
|
|
|
if (pd.ParameterModifier == ParameterModifier.Ref || pd.ParameterModifier == ParameterModifier.Out) |
|
|
|
|
type = new ByReferenceTypeReference(type); |
|
|
|
|
type = interningProvider.Intern(new ByReferenceTypeReference(type)); |
|
|
|
|
result.Add(type); |
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
|