public override void VisitTypeDeclaration(TypeDeclaration typeDeclaration) { var list = new List<Tuple<VariableInitializer, IVariable, VariableState>>(); fieldStack.Push(list); foreach (var fieldDeclaration in ConvertToConstantIssue.CollectFields (this, typeDeclaration)) { if (fieldDeclaration.HasModifier(Modifiers.Const) || fieldDeclaration.HasModifier(Modifiers.Readonly)) continue; if (fieldDeclaration.HasModifier(Modifiers.Public) || fieldDeclaration.HasModifier(Modifiers.Protected) || fieldDeclaration.HasModifier(Modifiers.Internal)) continue; if (fieldDeclaration.Variables.Count() > 1) continue; var variable = fieldDeclaration.Variables.First(); var rr = ctx.Resolve(fieldDeclaration.ReturnType); if (rr.Type.IsReferenceType == false) { // Value type: var def = rr.Type.GetDefinition(); if (def != null && def.KnownTypeCode == KnownTypeCode.None) { // user-defined value type -- might be mutable continue; } else if (ctx.Resolve (variable.Initializer) is ConstantResolveResult) { // handled by ConvertToConstantIssue continue; } } var mr = ctx.Resolve(variable) as MemberResolveResult; if (mr == null) continue; list.Add(Tuple.Create(variable, mr.Member as IVariable, VariableState.None)); } base.VisitTypeDeclaration(typeDeclaration); Collect(); fieldStack.Pop(); }
public override void VisitTypeDeclaration(TypeDeclaration typeDeclaration) { var list = new List <Tuple <VariableInitializer, IVariable> >(); fieldStack.Push(list); foreach (var fieldDeclaration in ConvertToConstantIssue.CollectFields(this, typeDeclaration)) { if (!fieldDeclaration.HasModifier(Modifiers.Readonly)) { continue; } // var rr = ctx.Resolve(fieldDeclaration.ReturnType); if (fieldDeclaration.Variables.Count() > 1) { continue; } if (!fieldDeclaration.Variables.First().Initializer.IsNull) { continue; } var variable = fieldDeclaration.Variables.First(); var mr = ctx.Resolve(variable) as MemberResolveResult; if (mr == null) { continue; } list.Add(Tuple.Create(variable, mr.Member as IVariable)); } base.VisitTypeDeclaration(typeDeclaration); Collect(); fieldStack.Pop(); }