Пример #1
0
        // TODO can we avoid visiting every type? Are there only a few, identifiable, types that may perform navigation?
        public override void TraverseChildren(ITypeDefinition typeDefinition)
        {
            typeBeingTraversed = typeDefinition;
            if (typeDefinition.isPhoneApplicationClass(host))
            {
                NamespaceTypeDefinition mutableTypeDef = typeDefinition as NamespaceTypeDefinition;
                if (mutableTypeDef != null)
                {
                    // TODO unify code for current uri fieldreference
                    FieldDefinition fieldDef = new FieldDefinition()
                    {
                        ContainingTypeDefinition = mutableTypeDef,
                        InternFactory            = host.InternFactory,
                        IsStatic   = true,
                        Name       = host.NameTable.GetNameFor(PhoneCodeHelper.IL_CURRENT_NAVIGATION_URI_VARIABLE),
                        Type       = host.PlatformType.SystemString,
                        Visibility = TypeMemberVisibility.Public,
                    };
                    PhoneCodeHelper.CurrentURIFieldDefinition = fieldDef;
                    mutableTypeDef.Fields.Add(fieldDef);
                }
            }

            codeTraverser.Traverse(typeDefinition);
            base.TraverseChildren(typeDefinition);
        }