public virtual void PrintTypeDefinitionName(ITypeDefinition typeDefinition)
        {
            INamespaceTypeDefinition namespaceTypeDefinition = typeDefinition as INamespaceTypeDefinition;

            if (namespaceTypeDefinition != null)
            {
                PrintIdentifier(namespaceTypeDefinition.Name);
                return;
            }

            INestedTypeDefinition nestedTypeDefinition = typeDefinition as INestedTypeDefinition;

            if (nestedTypeDefinition != null)
            {
                PrintIdentifier(nestedTypeDefinition.Name);
                return;
            }

            INamedEntity namedEntity = typeDefinition as INamedEntity;

            if (namedEntity != null)
            {
                PrintIdentifier(namedEntity.Name);
            }
            else
            {
                sourceEmitterOutput.Write(typeDefinition.ToString());
            }
        }
Exemple #2
0
 public override void RewriteChildren(NestedUnitNamespace unitNamespace)
 {
     if (!this.once)
     {
         List <INamespaceTypeDefinition> genericTypes = new List <INamespaceTypeDefinition>();
         int count = 0;
         for (int i = 0, n = unitNamespace.Members.Count; i < n; i++)
         {
             INamespaceTypeDefinition typ = unitNamespace.Members[i] as INamespaceTypeDefinition;
             if (typ != null && typ.IsGeneric && !typ.Name.Value.Contains("<<>>"))
             {
                 this.once = true;
                 if (count == this.number)
                 {
                     genericTypes.Add(typ);
                     break;
                 }
                 count++;
             }
         }
         if (genericTypes.Count > 0)
         {
             foreach (var t in this.WithMoreGenericParameters(genericTypes))
             {
                 unitNamespace.Members.Add(t);
             }
         }
     }
     base.RewriteChildren(unitNamespace);
 }
Exemple #3
0
        public override List <INamespaceMember> Rewrite(List <INamespaceMember> namespaceMembers)
        {
            List <INamespaceMember> newList = new List <INamespaceMember>();

            foreach (var namespaceMember in namespaceMembers)
            {
                INamespaceTypeDefinition namespaceTypeDefinition = namespaceMember as INamespaceTypeDefinition;
                if (namespaceTypeDefinition != null)
                {
                    if (this.ShouldWhack(namespaceTypeDefinition))
                    {
                        if (!this.WhackedTypes.ContainsKey(namespaceTypeDefinition.InternedKey))
                        {
                            this.WhackedTypes.Add(namespaceTypeDefinition.InternedKey, true);
                        }
                        continue;
                    }
                    var mutableNamespaceTypeDefinition = (NamespaceTypeDefinition)this.Rewrite(namespaceTypeDefinition);
                    if (this.backwardCompat)
                    {
                        mutableNamespaceTypeDefinition.IsBeforeFieldInit = false;
                    }
                    newList.Add(mutableNamespaceTypeDefinition);
                }
                else
                {
                    newList.Add(base.Rewrite(namespaceMember));
                }
            }
            return(newList);
        }
Exemple #4
0
        public override INamespaceTypeDefinition Rewrite(INamespaceTypeDefinition namespaceTypeDefinition)
        {
            var typeContract = contractProvider.GetTypeContractFor(namespaceTypeDefinition);

            VisitTypeDefinition(namespaceTypeDefinition, typeContract);
            return(base.Rewrite(namespaceTypeDefinition));
        }
 public override void Visit(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     if (Process(namespaceTypeDefinition))
     {
         visitor.Visit(namespaceTypeDefinition);
     }
     base.Visit(namespaceTypeDefinition);
 }
 public override void TraverseChildren(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     if (!_filter.Include(namespaceTypeDefinition))
     {
         return;
     }
     base.TraverseChildren(namespaceTypeDefinition);
 }
 public override void TraverseChildren(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     if (_filter.Matches(namespaceTypeDefinition))
     {
         _visitor.TypeEnter(namespaceTypeDefinition);
         base.TraverseChildren(namespaceTypeDefinition);
         _visitor.TypeExit(namespaceTypeDefinition);
     }
 }
 public override void TraverseChildren(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     if (_filter.Matches(namespaceTypeDefinition))
     {
         _visitor.TypeEnter(namespaceTypeDefinition);
         base.TraverseChildren(namespaceTypeDefinition);
         _visitor.TypeExit(namespaceTypeDefinition);
     }
 }
 internal static IModule GetInstrumented(IMetadataHost host, IModule module, PdbReader/*?*/ pdbReader, INamespaceTypeDefinition logger) {
   var copier = new MetadataDeepCopier(host);
   var copy = copier.Copy(module);
   var loggerCopy = copier.Copy(logger);
   loggerCopy.ContainingUnitNamespace = copy.UnitNamespaceRoot;
   var logEdgeCount = TypeHelper.GetMethod(loggerCopy, host.NameTable.GetNameFor("LogEdgeCount"), host.PlatformType.SystemUInt32);
   new Instrumenter(host, pdbReader, logEdgeCount).Rewrite(copy);
   copy.AllTypes.Add(loggerCopy);
   return copy;
 }
        public override void Visit(INamespaceTypeDefinition type)
        {
            string nsName = type.ContainingUnitNamespace.ResolvedUnitNamespace.ToString();
            _currentClass = new TestNodeClass(type.Name.Value)
                            {
                                Namespace = nsName

                            };
            _classes.Add(_currentClass);
        }
Exemple #11
0
        public override void Visit(INamespaceTypeDefinition type)
        {
            string nsName = type.ContainingUnitNamespace.ResolvedUnitNamespace.ToString();

            _currentClass = new TestNodeClass(type.Name.Value)
            {
                Namespace = nsName
            };
            _classes.Add(_currentClass);
        }
 public Type Load(INamespaceTypeDefinition namespaceTypeDefinition) {
   //first create (but do not initialize) all typeBuilder builders, since they are needed to create member builders.
   this.typeBuilderAllocator.Traverse(namespaceTypeDefinition);
   //next create (but do not initialize) builder for all other kinds of typeBuilder members, since there may be forward references during initialization
   this.memberBuilderAllocator.Traverse(namespaceTypeDefinition);
   //now initialize all the builders
   this.initializingTraverser.TraverseChildren(namespaceTypeDefinition);
   //finally create the type and return it
   this.typeCreator.Traverse(namespaceTypeDefinition);
   return this.mapper.GetType(namespaceTypeDefinition);
 }
Exemple #13
0
 private void trackPhoneApplicationClassname(ITypeDefinition typeDef)
 {
     if (PhoneCodeHelper.instance().PhonePlugin != null && typeDef.isPhoneApplicationClass(sink.host))
     {
         INamespaceTypeDefinition namedTypeDef = typeDef as INamespaceTypeDefinition;
         // string fullyQualifiedName = namedTypeDef.ContainingNamespace.Name.Value + "." + namedTypeDef.Name.Value;
         string fullyQualifiedName = namedTypeDef.ToString();
         PhoneCodeHelper.instance().setMainAppTypeReference(typeDef);
         PhoneCodeHelper.instance().setMainAppTypeName(fullyQualifiedName);
     }
 }
Exemple #14
0
    public override INamespaceTypeDefinition Rewrite(INamespaceTypeDefinition namespaceTypeDefinition)
    {
        var mutableNamespaceTypeDefinition = namespaceTypeDefinition as NamespaceTypeDefinition;

        if (mutableNamespaceTypeDefinition == null)
        {
            return(namespaceTypeDefinition);
        }
        mutableNamespaceTypeDefinition.Name = this.host.NameTable.GetNameFor(this.pattern.Replace(namespaceTypeDefinition.Name.Value, this.evaluator));
        this.RewriteChildren(mutableNamespaceTypeDefinition);
        return(mutableNamespaceTypeDefinition);
    }
        public bool isMethodIgnoredForFeedback(IMethodDefinition methodTranslated)
        {
            INamespaceTypeDefinition type = methodTranslated.ContainingType.ResolvedType as INamespaceTypeDefinition;

            if (type == null)
            {
                return(false);
            }

            string methodName = type.ContainingUnitNamespace.Name.Value + "." + type.Name + "." + methodTranslated.Name.Value;

            return(ignoredHandlers.Contains(methodName));
        }
Exemple #16
0
        // Base case
        public override void Visit(INamespaceTypeDefinition type)
        {
            if (_visited.ContainsKey(type))
            {
                return;
            }
            _visited.Add(type, null);

            AddTypeReference(type);
            AddMembersWithExternalRelatives(type);

            // Recursion
            Visit(type.BaseClasses);
        }
Exemple #17
0
 private void trackPhonePageNameVariableName(ITypeDefinition typeDef)
 {
     if (PhoneCodeHelper.instance().PhonePlugin != null && typeDef.isPhoneApplicationPageClass(sink.host))
     {
         INamespaceTypeDefinition namedTypeDef = typeDef as INamespaceTypeDefinition;
         string fullyQualifiedName             = namedTypeDef.ToString();
         string xamlForClass = PhoneCodeHelper.instance().getXAMLForPage(fullyQualifiedName);
         if (xamlForClass != null) // if not it is possibly an abstract page
         {
             string       uriName     = UriHelper.getURIBase(xamlForClass);
             Bpl.Constant uriConstant = sink.FindOrCreateConstant(uriName);
             PhoneCodeHelper.instance().setBoogieStringPageNameForPageClass(fullyQualifiedName, uriConstant.Name);
         }
     }
 }
            private INamespaceTypeDefinition VisitNamespaceType(INamespaceTypeDefinition def)
            {
                // All generated top-level types are assumed to be in the global namespace.
                // However, this may be an embedded NoPIA type within a namespace.
                // Since we do not support edits that include references to NoPIA types
                // (see #855640), it's reasonable to simply drop such cases.
                if (!string.IsNullOrEmpty(def.NamespaceName))
                {
                    return null;
                }

                var topLevelTypes = this.GetTopLevelTypesByName();
                INamespaceTypeDefinition otherDef;
                topLevelTypes.TryGetValue(def.Name, out otherDef);
                return otherDef;
            }
Exemple #19
0
        static private bool IsPublic(ITypeDefinition typeDefinition)
        {
            INamespaceTypeDefinition namespaceTypeDefinition = typeDefinition as INamespaceTypeDefinition;

            if (namespaceTypeDefinition != null)
            {
                return(namespaceTypeDefinition.IsPublic);
            }
            INestedTypeDefinition nestedTypeDefinition = typeDefinition as INestedTypeDefinition;

            if (nestedTypeDefinition != null)
            {
                return(nestedTypeDefinition.Visibility == TypeMemberVisibility.Public);
            }
            return(false);
        }
 public virtual void PrintTypeDefinitionVisibility(ITypeDefinition typeDefinition)
 {
     if (typeDefinition is INamespaceTypeDefinition)
     {
         INamespaceTypeDefinition namespaceTypeDefinition = typeDefinition as INamespaceTypeDefinition;
         if (namespaceTypeDefinition.IsPublic)
         {
             PrintKeywordPublic();
         }
     }
     else if (typeDefinition is INestedTypeDefinition)
     {
         INestedTypeDefinition nestedTypeDefinition = typeDefinition as INestedTypeDefinition;
         PrintTypeMemberVisibility(nestedTypeDefinition.Visibility);
     }
 }
Exemple #21
0
        public override void RewriteChildren(RootUnitNamespace rootUnitNamespace)
        {
            this.classHoldingThreeArgVersions = this.GetContractClass(rootUnitNamespace);

            base.RewriteChildren(rootUnitNamespace);

            #region Possibly add class for any contract methods that were defined.
            if (0 < this.threeArgumentVersionofContractMethod.Count)
            {
                // Only add class to assembly if any 3 arg versions were actually created
                rootUnitNamespace.Members.Add(classHoldingThreeArgVersions);
                this.allTypes.Add(classHoldingThreeArgVersions);
            }
            #endregion Possibly add class for any contract methods that were defined.

            #region Create a reference to [ContractReferenceAssembly] to mark the assembly with
            INamespaceTypeDefinition contractReferenceAssemblyAttribute = null;
            #region First see if we can find it in the same assembly as the one we are rewriting
            var unit = rootUnitNamespace.Unit;
            contractReferenceAssemblyAttribute = UnitHelper.FindType(this.host.NameTable, unit, "System.Diagnostics.Contracts.ContractReferenceAssemblyAttribute")
                                                 as INamespaceTypeDefinition;
            #endregion First see if we can find it in the same assembly as the one we are rewriting
            #region If it doesn't exist there, then define it in the same place that the three-argument versions are defined
            if (contractReferenceAssemblyAttribute is Dummy)
            {
                contractReferenceAssemblyAttribute = CreateContractReferenceAssemblyAttribute(rootUnitNamespace);
            }
            #endregion If it doesn't exist there, then define it in the same place that the three-argument versions are defined
            #region Create a reference to the ctor
            var ctorRef = new Microsoft.Cci.MutableCodeModel.MethodReference()
            {
                CallingConvention = CallingConvention.HasThis,
                ContainingType    = contractReferenceAssemblyAttribute,
                InternFactory     = this.host.InternFactory,
                Name = host.NameTable.Ctor,
                Type = systemVoidType,
            };
            var rm = ctorRef.ResolvedMethod;
            this.ContractReferenceAssemblyAttributeInstance = new CustomAttribute()
            {
                Constructor = ctorRef,
            };
            #endregion Create a reference to the ctor
            #endregion Create a reference to [ContractReferenceAssembly] to mark the assembly with

            return;
        }
Exemple #22
0
        internal static IModule GetModuleForType(ITypeDefinition typeDefinition)
        {
            INestedTypeDefinition ntd = typeDefinition as INestedTypeDefinition;

            while (ntd != null)
            {
                typeDefinition = ntd.ContainingTypeDefinition;
                ntd            = typeDefinition as INestedTypeDefinition;
            }
            INamespaceTypeDefinition nstd = typeDefinition as INamespaceTypeDefinition;

            if (nstd != null)
            {
                return(nstd.ContainingUnitNamespace.Unit as IModule);
            }
            return(null);
        }
        public override void TraverseChildren(IMethodCall methodCall)
        {
            if (PhoneCodeHelper.instance().PhoneFeedbackToggled)
            {
                // check for handlers we do not wish to add feedback checks to
                if (methodCall.MethodToCall.Name.Value.StartsWith("add_"))
                {
                    string eventName = methodCall.MethodToCall.Name.Value.Remove(0, "add_".Length);
                    if (PhoneCodeHelper.IgnoredEvents.Contains(eventName))
                    {
                        IMethodReference eventHandler = null;
                        foreach (IExpression arg in methodCall.Arguments)
                        {
                            ICreateDelegateInstance createDelegate = arg as ICreateDelegateInstance;
                            if (createDelegate == null)
                            {
                                continue;
                            }

                            ITypeReference typeRef = createDelegate.Type;
                            if (!typeRef.isRoutedEventHandlerClass(host))
                            {
                                continue;
                            }

                            eventHandler = createDelegate.MethodToCallViaDelegate;
                            break;
                        }

                        if (eventHandler != null)
                        {
                            INamespaceTypeReference namedType = eventHandler.ContainingType.ResolvedType as INamespaceTypeReference;
                            if (namedType != null)
                            {
                                INamespaceTypeDefinition namedTypeDef = namedType.ResolvedType;
                                if (namedTypeDef != null)
                                {
                                    PhoneCodeHelper.instance().ignoreEventHandler(namedTypeDef.ContainingUnitNamespace.Name + "." + namedTypeDef.Name + "." + eventHandler.Name);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemple #24
0
        // this method doesn't take into account the FrameworkInternal annotation
        public static bool IsTypeExternallyVisible(INamedTypeDefinition type)
        {
            INamespaceTypeDefinition nsType = type as INamespaceTypeDefinition;

            if (nsType != null)
            {
                return(nsType.IsPublic);
            }

            INestedTypeDefinition nestedType = type as INestedTypeDefinition;

            if (nestedType != null)
            {
                return(IsMemberExternallyVisible(nestedType));
            }

            throw new Exception("We shouldn't ask this question on anything else");
        }
Exemple #25
0
        public static INamespaceDefinition GetNamespace(this ITypeDefinition type)
        {
            INamespaceTypeDefinition nsType = type as INamespaceTypeDefinition;

            if (nsType != null)
            {
                return(nsType.ContainingNamespace);
            }

            INestedTypeDefinition ntType = type as INestedTypeDefinition;

            if (ntType != null)
            {
                return(GetNamespace(ntType.ContainingTypeDefinition));
            }

            return(null);
        }
        public static string Name(this ITypeDefinition type)
        {
            INamespaceTypeDefinition nsType = type as INamespaceTypeDefinition;

            if (nsType != null)
            {
                return(nsType.Name.Value);
            }

            INestedTypeDefinition nType = type as INestedTypeDefinition;

            if (nType != null)
            {
                return(nType.Name.Value);
            }

            throw new NotImplementedException(LocalizedStrings.CalledNameOnUnsupportedDefinition);
        }
Exemple #27
0
        //private IApiInformationProvider m_apiInformation;

        // this method takes into account the FrameworkInternal annotation
        private bool IsTypeExternallyVisible2(INamedTypeDefinition type)
        {
            INamespaceTypeDefinition nsType = type as INamespaceTypeDefinition;

            if (nsType != null)
            {
                return(nsType.IsPublic || m_implModel.IsFrameworkInternal(type));
            }

            INestedTypeDefinition nestedType = type as INestedTypeDefinition;

            if (nestedType != null)
            {
                return(IsMemberExternallyVisible2(nestedType));
            }

            throw new Exception("We shouldn't ask this question on anything else");
        }
Exemple #28
0
        public override void Visit(ITypeDefinition type)
        {
            INamespaceTypeDefinition nsType     = type as INamespaceTypeDefinition;
            INestedTypeDefinition    nestedType = type as INestedTypeDefinition;

            if (nsType != null)
            {
                Visit(nsType);
            }
            else if (nestedType != null)
            {
                Visit(nestedType);
            }
            else
            {
                base.Visit(type);
            }
        }
Exemple #29
0
        public IEnumerable <INamespaceTypeDefinition> GetTopLevelTypes(EmitContext context)
        {
            CommonPEModuleBuilder module = (CommonPEModuleBuilder)context.Module;

            foreach (INamespaceTypeDefinition type in module.GetAnonymousTypes())
            {
                yield return(type);
            }

            foreach (ISymbol symbol in _changes.Keys)
            {
                INamespaceTypeDefinition namespaceTypeDef = (symbol as ITypeDefinition)?.AsNamespaceTypeDefinition(context);
                if (namespaceTypeDef != null)
                {
                    yield return(namespaceTypeDef);
                }
            }
        }
Exemple #30
0
        public static INamedTypeDefinition GetCorresponding(this IUnit unit, ITypeDefinition type)
        {
            INamespaceTypeDefinition nstd = type as INamespaceTypeDefinition;

            if (nstd != null)
            {
                return(unit.GetCorresponding(nstd));
            }

            INestedTypeDefinition nested = type as INestedTypeDefinition;

            if (nested != null)
            {
                return(unit.GetCorresponding(nested));
            }

            return(null);
        }
Exemple #31
0
        public static string Name(this ITypeDefinition type)
        {
            INamespaceTypeDefinition nsType = type as INamespaceTypeDefinition;

            if (nsType != null)
            {
                return(nsType.Name.Value);
            }

            INestedTypeDefinition nType = type as INestedTypeDefinition;

            if (nType != null)
            {
                return(nType.Name.Value);
            }

            throw new NotImplementedException("Called .Name on a currently unsupported type definition!");
        }
Exemple #32
0
        private List <IMethodImplementation> GetExplicitImplementationOverrides(TypeDefinitionMember member, List <IMethodImplementation> methodImpls)
        {
            INamespaceTypeDefinition namespaceTypeDef = member.ContainingTypeDefinition as INamespaceTypeDefinition;
            INestedTypeDefinition    nestedTypeDef    = member.ContainingTypeDefinition as INestedTypeDefinition;

            if (namespaceTypeDef != null)
            {
                methodImpls = ((NamespaceTypeDefinition)namespaceTypeDef).ExplicitImplementationOverrides;
            }
            else if (nestedTypeDef != null)
            {
                methodImpls = ((NamespaceTypeDefinition)namespaceTypeDef).ExplicitImplementationOverrides;
            }
            else
            {
                throw new InvalidOperationException("ExplicitImplementationOverrides can only be accessed on a NamespaceTypeDefinition or a NestedTypeDefinition object");
            }
            return(methodImpls);
        }
Exemple #33
0
        public static INamespaceTypeDefinition GetCorresponding(this IUnit unit, INamespaceTypeDefinition type)
        {
            INamespaceDefinition ns = unit.GetCorresponding(type.ContainingNamespace);

            if (ns == null)
            {
                return(null);
            }
            foreach (var mem in ns.GetMembersNamed(type.Name, true))
            {
                INamespaceTypeDefinition candidate = mem as INamespaceTypeDefinition;
                if (candidate == null)
                {
                    continue;
                }
                if (candidate.GenericParameterCount == type.GenericParameterCount)
                {
                    return(candidate);
                }
            }
            return(null);
        }
Exemple #34
0
        private bool ShouldWhack(ITypeDefinition typeDefinition)
        {
            if (SecurityWhatToKeep == SecurityKeepOptions.OnlyNonCritical)
            {
                if (IsSecurityCritical(typeDefinition))
                {
                    return(true);
                }
            }
            switch (this.WhatToKeep)
            {
            case KeepOptions.All:
                return(false);

            case KeepOptions.ExtVis:
                if (typeDefinition is INamespaceTypeDefinition || typeDefinition is INestedTypeDefinition)
                {
                    return(!TypeHelper.IsVisibleOutsideAssembly(typeDefinition));
                }
                return(false); // REVIEW: what is the right thing to do here?

            case KeepOptions.NonPrivate:
                INamespaceTypeDefinition namespaceTypeDefinition = typeDefinition as INamespaceTypeDefinition;
                if (namespaceTypeDefinition != null)
                {
                    return(!namespaceTypeDefinition.IsPublic);
                }
                INestedTypeDefinition nestedTypeDefinition = typeDefinition as INestedTypeDefinition;
                if (nestedTypeDefinition != null)
                {
                    return(nestedTypeDefinition.Visibility == TypeMemberVisibility.Private);
                }
                return(false);

            default:
                return(false);
            }
        }
Exemple #35
0
 /// <summary>
 /// Traverses the children of the namespace type definition.
 /// </summary>
 public virtual void TraverseChildren(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     Contract.Requires(namespaceTypeDefinition != null);
       this.TraverseChildren((INamedTypeDefinition)namespaceTypeDefinition);
 }
 public override void TraverseChildren(INamespaceTypeDefinition namespaceTypeDefinition) {
   object builder;
   if (!this.loader.builderMap.TryGetValue(namespaceTypeDefinition, out builder)) return;
   this.loader.builderMap.Remove(namespaceTypeDefinition);
   var typeBuilder = builder as TypeBuilder;
   if (typeBuilder == null) return;
   this.CreateTypesThatNeedToBeLoadedBeforeLoading(namespaceTypeDefinition);
   var type = typeBuilder.CreateType();
   this.loader.mapper.DefineMapping(namespaceTypeDefinition, type);
   this.Traverse(namespaceTypeDefinition.NestedTypes);
 }
Exemple #37
0
 /// <summary>
 /// Traverses the namespace type definition.
 /// </summary>
 public void Traverse(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     Contract.Requires(namespaceTypeDefinition != null);
       if (this.preorderVisitor != null) this.preorderVisitor.Visit(namespaceTypeDefinition);
       if (this.stopTraversal) return;
       this.TraverseChildren(namespaceTypeDefinition);
       if (this.stopTraversal) return;
       if (this.postorderVisitor != null) this.postorderVisitor.Visit(namespaceTypeDefinition);
 }
 internal PEAssemblyBuilderWithAdditionalReferences(CommonPEModuleBuilder builder, INamespaceTypeDefinition objectType) :
     base((SourceModuleSymbol)builder.CommonSourceModule, builder.EmitOptions, builder.OutputKind, builder.SerializationProperties, builder.ManifestResources)
 {
     _builder = builder;
     _objectType = new NamespaceTypeDefinitionNoBase(objectType);
 }
 public override void Visit(INamespaceTypeDefinition namespaceTypeDefinition) {
   namespaceTypeDefinition.ContainingUnitNamespace.Dispatch(this);
   this.Visit(namespaceTypeDefinition.Name.Value);
   if (namespaceTypeDefinition.GenericParameterCount > 0) {
     int h = this.hash;
     h = (h << 5 + h) ^ (int)namespaceTypeDefinition.GenericParameterCount;
     this.hash = h;
   }
 }
Exemple #40
0
 /// <summary>
 /// Performs some computation with the given namespace type definition.
 /// </summary>
 public virtual void Visit(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     this.Visit((INamedTypeDefinition)namespaceTypeDefinition);
 }
 public override void TraverseInterfaceImplementationAttributes(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     MethodEnter(namespaceTypeDefinition);
     base.TraverseInterfaceImplementationAttributes(namespaceTypeDefinition);
     MethodExit();
 }
Exemple #42
0
 private static bool IsRecordType(INamespaceTypeDefinition t)
 {
     foreach (ICustomAttribute attr in t.Attributes) {
     if (TypeHelper.GetTypeName(attr.Type) == NamespaceHelper.SystemDiagnosticsContractsCodeContractString + ".StringVccAttr") {
       List<IMetadataExpression> args = new List<IMetadataExpression>(attr.Arguments);
       if (args.Count == 2) {
     IMetadataConstant attrName = args[0] as IMetadataConstant;
     if (attrName != null && ((string)attrName.Value) == "record")
       return true;
       }
     }
       }
       return false;
 }
Exemple #43
0
 /// <summary>
 /// Performs some computation with the given namespace type definition.
 /// </summary>
 /// <param name="namespaceTypeDefinition"></param>
 public virtual void Visit(INamespaceTypeDefinition namespaceTypeDefinition)
   //^ ensures this.path.Count == old(this.path.Count);
 {
 }
 public override void TraverseChildren(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     if (!_filter.Include(namespaceTypeDefinition))
         return;
     base.TraverseChildren(namespaceTypeDefinition);
 }
 public override void TraverseChildren(INamespaceTypeDefinition namespaceTypeDefinition) {
   var name = TypeHelper.GetTypeName(namespaceTypeDefinition, NameFormattingOptions.UseGenericTypeNameSuffix);
   var attributes = GetTypeAttributes(namespaceTypeDefinition);
   if (namespaceTypeDefinition.IsPublic) attributes |= TypeAttributes.Public;
   var typeBuilder = this.loader.ModuleBuilder.DefineType(name, attributes);
   this.AllocateGenericParametersIfNecessary(namespaceTypeDefinition, typeBuilder);
   this.loader.builderMap.Add(namespaceTypeDefinition, typeBuilder);
   this.loader.mapper.DefineMapping(namespaceTypeDefinition, typeBuilder); //so that typeBuilder references can be treated uniformly later on
   foreach (var nestedType in namespaceTypeDefinition.NestedTypes)
     this.TraverseChildren(nestedType);
   //TODO: also look at private helper members and private helper types
 }
Exemple #46
0
 public void Visit(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     throw new NotImplementedException();
 }
 internal NamespaceTypeDefinitionNoBase(INamespaceTypeDefinition underlyingType)
 {
     UnderlyingType = underlyingType;
 }
 /// <summary>
 /// Rewrites the given namespace type definition.
 /// </summary>
 public virtual INamespaceTypeDefinition Rewrite(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     return namespaceTypeDefinition;
 }
Exemple #49
0
 /// <summary>
 /// Traverses any attributes that describe how the namespace type definition implements its interfaces.
 /// </summary>
 public virtual void TraverseInterfaceImplementationAttributes(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     Contract.Requires(namespaceTypeDefinition != null);
       foreach (var iface in namespaceTypeDefinition.Interfaces) {
     this.Traverse(namespaceTypeDefinition.AttributesFor(iface));
     if (this.stopTraversal) break;
       }
 }
        // Base case
        public override void Visit(INamespaceTypeDefinition type)
        {
            if (_visited.ContainsKey(type))
                return;
            _visited.Add(type, null);

            AddTypeReference(type);
            AddMembersWithExternalRelatives(type);

            // Recursion
            Visit(type.BaseClasses);
        }
Exemple #51
0
 public void Visit(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     this.traverser.Traverse(namespaceTypeDefinition);
 }
 public override void Visit(INamespaceTypeDefinition namespaceTypeDefinition) {
   var builder = (TypeBuilder)this.loader.builderMap[namespaceTypeDefinition];
   this.Visit(namespaceTypeDefinition, builder);
 }
Exemple #53
0
 //^ ensures this.path.Count == old(this.path.Count);
 /// <summary>
 /// Performs some computation with the given namespace type definition.
 /// </summary>
 /// <param name="namespaceTypeDefinition"></param>
 public virtual void Visit(INamespaceTypeDefinition namespaceTypeDefinition)
 {
 }
        public override void TraverseChildren(INamespaceTypeDefinition namespaceTypeDefinition)
{ MethodEnter(namespaceTypeDefinition);
            base.TraverseChildren(namespaceTypeDefinition);
     MethodExit();   }
Exemple #55
0
 public override void TraverseChildren(INamespaceTypeDefinition namespaceTypeDefinition) {
   PrintTypeDefinition(namespaceTypeDefinition as ITypeDefinition);
 }
Exemple #56
0
 public override void Visit(INamespaceTypeDefinition type)
 {
     EmitType(type, type.Name.Value);
 }
Exemple #57
0
 /// <summary>
 /// Performs some computation with the given namespace type definition.
 /// </summary>
 public void Visit(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     this.Visit((INamedTypeDefinition)namespaceTypeDefinition);
     if (!this.allTypes.Contains(namespaceTypeDefinition))
       this.ReportError(MetadataError.GetAllTypesIsIncomplete, namespaceTypeDefinition);
 }
Exemple #58
0
 public static INamespaceTypeDefinition GetCorresponding(this IUnit unit, INamespaceTypeDefinition type)
 {
   INamespaceDefinition ns = unit.GetCorresponding(type.ContainingNamespace);
   if (ns == null) return null;
   foreach (var mem in ns.GetMembersNamed(type.Name, true)) {
     INamespaceTypeDefinition candidate = mem as INamespaceTypeDefinition;
     if (candidate == null) continue;
     if (candidate.GenericParameterCount == type.GenericParameterCount) return candidate;
   }
   return null;
 }
 public virtual void onMetadataElement(INamespaceTypeDefinition namespaceTypeDefinition) { }
 public override void Visit(INamespaceTypeDefinition namespaceTypeDefinition)
 {
     if(Process(namespaceTypeDefinition)){visitor.Visit(namespaceTypeDefinition);}
     base.Visit(namespaceTypeDefinition);
 }