Example #1
0
        private bool WeHidThisType(INamedTypeDefinition type)
        {
            // walk up all the declaring types to see if we hid one of them
            INamedTypeDefinition curType = type;

            while (curType != null && curType != Dummy.Type)
            {
                if (ShouldHideType(curType))
                {
                    return(true);
                }

                INestedTypeDefinition nestedType = curType as INestedTypeDefinition;
                if (nestedType != null)
                {
                    curType = Util.CanonicalizeType(nestedType.ContainingType);
                }
                else
                {
                    curType = null;
                }
            }

            return(false);
        }
Example #2
0
        public override uint GetFieldOffset(object item)
        {
            FieldDeclaration      field         = item as FieldDeclaration;
            INestedTypeDefinition nestedTypeDef = item as INestedTypeDefinition;
            uint result = field != null?MemberHelper.ComputeFieldOffset(field.FieldDefinition, field.FieldDefinition.ContainingTypeDefinition) : MemberHelper.ComputeFieldOffset(nestedTypeDef, this.TypeDefinition);

            // This distinguishes between anonymous nested types, where we need to walk upwards to the surrounding type,
            // and nested types that have their own field name, where we must not do this
            // the current AST representation requires such a complicated approach
            bool            nestedTypeHasFieldName = false;
            ITypeDefinition containingDef          = this.ContainingTypeDeclaration.TypeDefinition;

            foreach (ITypeDefinitionMember member in containingDef.Members)
            {
                IFieldDefinition fieldMember = member as IFieldDefinition;
                if (fieldMember != null && fieldMember.Type.ResolvedType == this.TypeDefinition && !String.IsNullOrEmpty(fieldMember.Name.Value))
                {
                    nestedTypeHasFieldName = true;
                    break;
                }
            }
            if (!nestedTypeHasFieldName)
            {
                result += this.ContainingTypeDeclaration.GetFieldOffset(this.TypeDefinition);
            }
            return(result);
        }
        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());
            }
        }
Example #4
0
        public override INestedTypeDefinition Rewrite(INestedTypeDefinition nestedTypeDefinition)
        {
            var typeContract = contractProvider.GetTypeContractFor(nestedTypeDefinition);

            VisitTypeDefinition(nestedTypeDefinition, typeContract);
            return(base.Rewrite(nestedTypeDefinition));
        }
 public override void Visit(INestedTypeDefinition nestedTypeDefinition)
 {
     if (Process(nestedTypeDefinition))
     {
         visitor.Visit(nestedTypeDefinition);
     }
     base.Visit(nestedTypeDefinition);
 }
 public override void TraverseChildren(INestedTypeDefinition nestedTypeDefinition)
 {
     if (!_filter.Include((ITypeDefinition)nestedTypeDefinition))
     {
         return;
     }
     base.TraverseChildren(nestedTypeDefinition);
 }
Example #7
0
 public override void TraverseChildren(INestedTypeDefinition nestedTypeDefinition)
 {
     if (!this.printCompilerGeneratedMembers && AttributeHelper.Contains(nestedTypeDefinition.Attributes, nestedTypeDefinition.PlatformType.SystemRuntimeCompilerServicesCompilerGeneratedAttribute))
     {
         return;
     }
     PrintTypeDefinition(nestedTypeDefinition as ITypeDefinition);
 }
        public bool IsForwardable(ITypeDefinition type)
        {
            INestedTypeDefinition nestedType = type as INestedTypeDefinition;

            if (nestedType != null)
            {
                return(false);
            }
            return(true);
        }
Example #9
0
        public void AddSynthesizedDefinition(TNamedTypeSymbol container, INestedTypeDefinition nestedType)
        {
            Debug.Assert(nestedType != null);

            SynthesizedDefinitions defs = GetCacheOfSynthesizedDefinitions(container);

            if (defs.NestedTypes == null)
            {
                Interlocked.CompareExchange(ref defs.NestedTypes, new Queue <INestedTypeDefinition>(), null);
            }

            defs.NestedTypes.Enqueue(nestedType);
        }
Example #10
0
        public override void TraverseChildren(INestedTypeDefinition nestedTypeDefinition)
        {
            if (IsCompilerGenerated(nestedTypeDefinition))
                return;
            if (ContractHelper.IsContractClass(_host, nestedTypeDefinition))
                return;
            if (nestedTypeDefinition.GetType().Name == "GenericTypeParameter")
                return;
            if (!MemberHelper.IsVisibleOutsideAssembly(nestedTypeDefinition))
                return;

            base.TraverseChildren(nestedTypeDefinition);
        }
Example #11
0
        public static string MemberGroupHeading(ITypeDefinitionMember member)
        {
            if (member == null)
            {
                return(null);
            }

            IMethodDefinition method = member as IMethodDefinition;

            if (method != null)
            {
                if (method.IsConstructor)
                {
                    return("Constructors");
                }

                return("Methods");
            }

            IFieldDefinition field = member as IFieldDefinition;

            if (field != null)
            {
                return("Fields");
            }

            IPropertyDefinition property = member as IPropertyDefinition;

            if (property != null)
            {
                return("Properties");
            }

            IEventDefinition evnt = member as IEventDefinition;

            if (evnt != null)
            {
                return("Events");
            }

            INestedTypeDefinition nType = member as INestedTypeDefinition;

            if (nType != null)
            {
                return("Nested Types");
            }

            return(null);
        }
Example #12
0
        // Base case
        public override void Visit(INestedTypeDefinition type)
        {
            if (_visited.ContainsKey(type))
            {
                return;
            }
            _visited.Add(type, null);

            AddTypeReference(type);
            AddMembersWithExternalRelatives(type);

            // Recursion
            Visit(type.BaseClasses);
            Visit(type.ContainingType);
        }
Example #13
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);
     }
 }
Example #15
0
        static string GetVisibility(INestedTypeDefinition nestedType)
        {
            switch (nestedType.Visibility)
            {
            case TypeMemberVisibility.Assembly: return("internal");

            case TypeMemberVisibility.Family: return("protected");

            case TypeMemberVisibility.FamilyAndAssembly: return("protected and internal");

            case TypeMemberVisibility.FamilyOrAssembly: return("protected internal");

            case TypeMemberVisibility.Public: return("public");

            default: return("private");
            }
        }
Example #16
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);
        }
Example #17
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);
        }
Example #18
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);
        }
Example #20
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");
        }
Example #21
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!");
        }
Example #22
0
        private static IEnumerable <string> AllNamespaces(this ITypeDefinition type)
        {
            INestedTypeDefinition nestedType = type as INestedTypeDefinition;

            if (nestedType != null)
            {
                return(nestedType.AllNamespaces());
            }

            INamespaceTypeReference namespaceType = type as INamespaceTypeReference;

            if (namespaceType != null)
            {
                return(namespaceType.AllNamespaces());
            }

            return("".Return());
        }
Example #23
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);
            }
        }
Example #24
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");
        }
Example #25
0
        internal static string TypeDefinitionMember(IUnit currentUnit, ITypeDefinitionMember typeDefinitionMember)
        {
            INestedTypeDefinition nestedTypeDefinition = typeDefinitionMember as INestedTypeDefinition;

            if (nestedTypeDefinition != null)
            {
                StringBuilder sb = new StringBuilder(".class ");
                sb.Append(nestedTypeDefinition.Name.Value);
                return(sb.ToString());
            }
            IMethodDefinition methodDefinition = typeDefinitionMember as IMethodDefinition;

            if (methodDefinition != null)
            {
                StringBuilder sb = new StringBuilder(".method ");
                sb.AppendFormat("{0} : {1}", methodDefinition.Name.Value, Helper.SignatureDefinition(currentUnit, methodDefinition));
                return(sb.ToString());
            }
            IFieldDefinition fieldDefinition = typeDefinitionMember as IFieldDefinition;

            if (fieldDefinition != null)
            {
                StringBuilder sb = new StringBuilder(".field ");
                sb.AppendFormat("{0} : {1}", fieldDefinition.Name.Value, Helper.TypeDefinition(currentUnit, fieldDefinition.Type.ResolvedType));
                return(sb.ToString());
            }
            IEventDefinition eventDefinition = typeDefinitionMember as IEventDefinition;

            if (eventDefinition != null)
            {
                StringBuilder sb = new StringBuilder(".event ");
                sb.AppendFormat("{0} : {1}", eventDefinition.Name.Value, Helper.TypeDefinition(currentUnit, eventDefinition.Type.ResolvedType));
                return(sb.ToString());
            }
            IPropertyDefinition propertyDefinition = typeDefinitionMember as IPropertyDefinition;

            if (propertyDefinition != null)
            {
                StringBuilder sb = new StringBuilder(".property ");
                sb.AppendFormat("{0} : {1}", propertyDefinition.Name.Value, Helper.SignatureDefinition(currentUnit, propertyDefinition));
                return(sb.ToString());
            }
            return("!?!Error-TypeMember!?!");
        }
Example #26
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);
        }
Example #27
0
        public override void TraverseChildren(INestedTypeDefinition nestedTypeDefinition)
        {
            if (IsCompilerGenerated(nestedTypeDefinition))
            {
                return;
            }
            if (ContractHelper.IsContractClass(_host, nestedTypeDefinition))
            {
                return;
            }
            if (nestedTypeDefinition.GetType().Name == "GenericTypeParameter")
            {
                return;
            }
            if (!MemberHelper.IsVisibleOutsideAssembly(nestedTypeDefinition))
            {
                return;
            }

            base.TraverseChildren(nestedTypeDefinition);
        }
Example #28
0
        public override List <INestedTypeDefinition> Rewrite(List <INestedTypeDefinition> nestedTypeDefinitions)
        {
            List <INestedTypeDefinition> newList = new List <INestedTypeDefinition>();

            bool inParentSpecialType = CurrentTrimElement is SpecialTrimType;

            if (nestedTypeDefinitions == null)
            {
                return(newList);
            }
            foreach (INestedTypeDefinition nestedType in nestedTypeDefinitions)
            {
                string  typeName       = Util.FullyQualifiedTypeNameFromType(nestedType);
                Element currentElement = null;

                if (inParentSpecialType)
                {
                    currentElement = new SpecialTrimType(typeName);
                }
                else
                {
                    currentElement = _currentTrimAssembly.GetTypeElement(typeName);
                }

                // special case for the module class. In mscorlib we don't have any global functions, etc.
                // TODO: process its members too.
                if (currentElement != null)
                {
                    _trimElements.Push(currentElement);

                    // Need to create the Mutable copy here
                    INestedTypeDefinition newType = Rewrite(nestedType);
                    newList.Add(newType);
                    MutateType(newType, currentElement);
                    _trimElements.Pop();
                }
            }

            return(newList);
        }
Example #29
0
        public static INestedTypeDefinition GetCorresponding(this IUnit unit, INestedTypeDefinition type)
        {
            var parent = unit.GetCorresponding(type.ContainingTypeDefinition);

            if (parent == null)
            {
                return(null);
            }
            foreach (var candidate in parent.GetMembersNamed(type.Name, false))
            {
                INestedTypeDefinition result = candidate as INestedTypeDefinition;
                if (result == null)
                {
                    continue;
                }
                if (result.GenericParameterCount == type.GenericParameterCount)
                {
                    return(result);
                }
            }
            return(null);
        }
Example #30
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);
            }
        }
Example #31
0
        private void CheckSurface(INestedTypeDefinition nested, IEnumerable <INestedTypeDefinition> nestedTypes)
        {
            Contract.Requires(nested != null);
            Contract.Requires(nestedTypes != null);

            foreach (INamedTypeDefinition candidate in nestedTypes)
            {
                if (candidate.Name.UniqueKey == nested.Name.UniqueKey)
                {
                    CheckTypeSurface(nested, candidate);
                    return;
                }
            }
            if (nested.IsInterface && !TypeHelper.IsVisibleOutsideAssembly(nested))
            {
                // Allow internal interfaces to be in our contract reference assemblies in order to get right virtual bits on some members.
                Warning("Nested interface {0} only exists in contract reference assembly, but it is internal only, so allowed.", TypeHelper.GetTypeName(nested));
            }
            else
            {
                Error("Nested type {0} only exists in contract reference assembly", TypeHelper.GetTypeName(nested));
            }
        }
Example #32
0
 /// <summary>
 /// Traverses the nested type definition.
 /// </summary>
 public void Traverse(INestedTypeDefinition nestedTypeDefinition)
 {
     Contract.Requires(nestedTypeDefinition != null);
       if (this.preorderVisitor != null) this.preorderVisitor.Visit(nestedTypeDefinition);
       if (this.stopTraversal) return;
       this.TraverseChildren(nestedTypeDefinition);
       if (this.stopTraversal) return;
       if (this.postorderVisitor != null) this.postorderVisitor.Visit(nestedTypeDefinition);
 }
 /// <summary>
 /// Rewrites the given nested type definition.
 /// </summary>
 public virtual INestedTypeDefinition Rewrite(INestedTypeDefinition namespaceTypeDefinition)
 {
     return namespaceTypeDefinition;
 }
 public override void TraverseChildren(INestedTypeDefinition nestedTypeDefinition)
 {
     if (!_filter.Include((ITypeDefinition)nestedTypeDefinition))
         return;
     base.TraverseChildren(nestedTypeDefinition);
 }
Example #35
0
 public void Visit(INestedTypeDefinition nestedTypeDefinition)
 {
     throw new NotImplementedException();
 }
Example #36
0
 public override void Visit(INestedTypeDefinition nestedType)
 {
     EmitType(nestedType, nestedType.Name.Value);
 }
        public override void TraverseChildren(INestedTypeDefinition nestedTypeDefinition)
{ MethodEnter(nestedTypeDefinition);
            base.TraverseChildren(nestedTypeDefinition);
     MethodExit();   }
 void LoadNestedTypesOfType(
   TypeBase moduleType
 ) {
   uint currentClassRowId = moduleType.TypeDefRowId;
   uint numberOfNestedClassRows = this.PEFileReader.NestedClassTable.NumberOfRows;
   var moduleTypeArray = this.ModuleTypeDefArray;
   uint firstNestedClassRow = 0;
   uint nestedClassCounter = 0;
   for (uint i = 1; i <= numberOfNestedClassRows; ++i) {
     NestedClassRow nestedClassRow = this.PEFileReader.NestedClassTable[i];
     if (nestedClassRow.EnclosingClass != currentClassRowId) continue;
     if (firstNestedClassRow == 0) firstNestedClassRow = i;
     nestedClassCounter++;
     //  Check if its already created by someone else
     NestedType/*?*/ currType = moduleTypeArray[nestedClassRow.NestedClass] as NestedType;
     if (currType == null) {
       currType = this.CreateModuleNestedType(nestedClassRow.NestedClass, this.PEFileReader.TypeDefTable[nestedClassRow.NestedClass], moduleType);
       var redirectedType = this.ModuleReader.metadataReaderHost.Redirect(this.Module, currType);
       if (redirectedType == currType) moduleType.AddMember(currType);
       moduleTypeArray[nestedClassRow.NestedClass] = currType;
       this.RedirectedTypeDefArray[nestedClassRow.NestedClass] = redirectedType;
       this.ModuleTypeDefLoadState[nestedClassRow.NestedClass] = LoadState.Loaded;
     }
   }
   if (nestedClassCounter > 0) {
     var nestedTypes = new INestedTypeDefinition[nestedClassCounter];
     uint j = 0;
     for (uint i = firstNestedClassRow; j < nestedClassCounter && i <= numberOfNestedClassRows; ++i) {
       NestedClassRow nestedClassRow = this.PEFileReader.NestedClassTable[i];
       if (nestedClassRow.EnclosingClass != currentClassRowId) continue;
       nestedTypes[j++] = (INestedTypeDefinition)moduleTypeArray[nestedClassRow.NestedClass];
       Contract.Assume(nestedTypes[j-1] != null);
     }
     Contract.Assume(j == nestedClassCounter);
     moduleType.nestedTypes = IteratorHelper.GetReadonly(nestedTypes);
   }
 }
 public override void Visit(INestedTypeDefinition nestedTypeDefinition) {
   var builder = (TypeBuilder)this.loader.builderMap[nestedTypeDefinition];
   this.Visit(nestedTypeDefinition, builder);
 }
Example #40
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="host"></param>
 /// <param name="closureClass"></param>
 /// <returns></returns>
 public static ISourceMethodBody/*?*/ FindClosureGetEnumerator(IMetadataHost host, INestedTypeDefinition closureClass) {
   return null;
 }
 public override void Visit(INestedTypeDefinition nestedTypeDefinition)
 {
     if(Process(nestedTypeDefinition)){visitor.Visit(nestedTypeDefinition);}
     base.Visit(nestedTypeDefinition);
 }
Example #42
0
 //^ ensures this.path.Count == old(this.path.Count);
 /// <summary>
 /// Performs some computation with the given nested type definition.
 /// </summary>
 /// <param name="nestedTypeDefinition"></param>
 public virtual void Visit(INestedTypeDefinition nestedTypeDefinition)
 {
 }
Example #43
0
 public override void Visit(INestedTypeDefinition nestedTypeDefinition) {
   nestedTypeDefinition.ContainingTypeDefinition.Dispatch(this);
   this.Visit(nestedTypeDefinition.Name.Value);
   if (nestedTypeDefinition.GenericParameterCount > 0) {
     int h = this.hash;
     h = (h << 5 + h) ^ (int)nestedTypeDefinition.GenericParameterCount;
     this.hash = h;
   }
 }
Example #44
0
 public void Visit(INestedTypeDefinition nestedTypeDefinition)
 {
     this.traverser.Traverse(nestedTypeDefinition);
 }
Example #45
0
 public override INestedTypeDefinition Rewrite(INestedTypeDefinition nestedTypeDefinition) {
   this.VisitTypeDefinition(nestedTypeDefinition);
   return base.Rewrite(nestedTypeDefinition);
 }
 public override void TraverseChildren(INestedTypeDefinition nestedTypeDefinition) {
   object builder;
   if (!this.loader.builderMap.TryGetValue(nestedTypeDefinition, out builder)) return;
   this.loader.builderMap.Remove(nestedTypeDefinition);
   var typeBuilder = builder as TypeBuilder;
   if (typeBuilder == null) return;
   this.CreateTypesThatNeedToBeLoadedBeforeLoading(nestedTypeDefinition);
   var type = typeBuilder.CreateType();
   this.loader.mapper.DefineMapping(nestedTypeDefinition, type);
   this.Traverse(nestedTypeDefinition.NestedTypes);
 }
        // Base case
        public override void Visit(INestedTypeDefinition type)
        {
            if (_visited.ContainsKey(type))
                return;
            _visited.Add(type, null);

            AddTypeReference(type);
            AddMembersWithExternalRelatives(type);

            // Recursion
            Visit(type.BaseClasses);
            Visit(type.ContainingType);
        }
Example #48
0
 /// <summary>
 /// Performs some computation with the given nested type definition.
 /// </summary>
 /// <param name="nestedTypeDefinition"></param>
 public virtual void Visit(INestedTypeDefinition nestedTypeDefinition)
   //^ ensures this.path.Count == old(this.path.Count);
 {
 }
Example #49
0
 /// <summary>
 /// Traverses the children of the nested type definition.
 /// </summary>
 public virtual void TraverseChildren(INestedTypeDefinition nestedTypeDefinition)
 {
     Contract.Requires(nestedTypeDefinition != null);
       this.TraverseChildren((INamedTypeDefinition)nestedTypeDefinition);
 }
Example #50
0
 /// <summary>
 /// Traverses the children of the nested type definition.
 /// </summary>
 public virtual void TraverseChildren(INestedTypeDefinition nestedTypeDefinition)
 {
     this.TraverseChildren((INamedTypeDefinition)nestedTypeDefinition);
 }
Example #51
0
 /// <summary>
 /// Performs some computation with the given nested type definition.
 /// </summary>
 public virtual void Visit(INestedTypeDefinition nestedTypeDefinition)
 {
     this.Visit((INamedTypeDefinition)nestedTypeDefinition);
 }
 public override void TraverseChildren(INestedTypeDefinition nestedTypeDefinition) {
   var name = nestedTypeDefinition.Name.Value;
   if (nestedTypeDefinition.IsGeneric) name = name + "`" + nestedTypeDefinition.GenericParameterCount;
   var attributes = GetTypeAttributes(nestedTypeDefinition);
   attributes |= GetNestedTypeVisibility(nestedTypeDefinition);
   var containingType = (TypeBuilder)this.loader.mapper.GetType(nestedTypeDefinition.ContainingTypeDefinition);
   var typeBuilder = containingType.DefineNestedType(name);
   this.AllocateGenericParametersIfNecessary(nestedTypeDefinition, typeBuilder);
   this.loader.builderMap.Add(nestedTypeDefinition, typeBuilder); //so that typeBuilder references can be treated uniformly later on
   this.loader.mapper.DefineMapping(nestedTypeDefinition, typeBuilder);
   foreach (var nestedType in nestedTypeDefinition.NestedTypes)
     this.TraverseChildren(nestedType);
 }
Example #53
0
 public override void TraverseChildren(INestedTypeDefinition nestedTypeDefinition) {
   if (!this.printCompilerGeneratedMembers && AttributeHelper.Contains(nestedTypeDefinition.Attributes, nestedTypeDefinition.PlatformType.SystemRuntimeCompilerServicesCompilerGeneratedAttribute))
     return;
   PrintTypeDefinition(nestedTypeDefinition as ITypeDefinition);
 }
Example #54
0
    private void CheckSurface(INestedTypeDefinition nested, IEnumerable<INestedTypeDefinition> nestedTypes)
    {
      Contract.Requires(nested != null);
      Contract.Requires(nestedTypes != null);

      foreach (INamedTypeDefinition candidate in nestedTypes)
      {
        if (candidate.Name.UniqueKey == nested.Name.UniqueKey)
        {
          CheckTypeSurface(nested, candidate);
          return;
        }
      }
      if (nested.IsInterface && !TypeHelper.IsVisibleOutsideAssembly(nested))
      {
        // Allow internal interfaces to be in our contract reference assemblies in order to get right virtual bits on some members.
        Warning("Nested interface {0} only exists in contract reference assembly, but it is internal only, so allowed.", TypeHelper.GetTypeName(nested));
      }
      else
      {
        Error("Nested type {0} only exists in contract reference assembly", TypeHelper.GetTypeName(nested));
      }
    }
Example #55
0
 /// <summary>
 /// Performs some computation with the given nested type definition.
 /// </summary>
 public void Visit(INestedTypeDefinition nestedTypeDefinition)
 {
     this.Visit((INamedTypeDefinition)nestedTypeDefinition);
     if (!this.allTypes.Contains(nestedTypeDefinition))
       this.ReportError(MetadataError.GetAllTypesIsIncomplete, nestedTypeDefinition);
 }
Example #56
0
 public static INestedTypeDefinition GetCorresponding(this IUnit unit, INestedTypeDefinition type)
 {
   var parent = unit.GetCorresponding(type.ContainingTypeDefinition);
   if (parent == null) return null;
   foreach (var candidate in parent.GetMembersNamed(type.Name, false))
   {
     INestedTypeDefinition result = candidate as INestedTypeDefinition;
     if (result == null) continue;
     if (result.GenericParameterCount == type.GenericParameterCount) return result;
   }
   return null;
 }
 public virtual void onMetadataElement(INestedTypeDefinition nestedTypeDefinition) { }
Example #58
0
 /// <summary>
 /// Visits the specified nested type definition.
 /// </summary>
 /// <param name="nestedTypeDefinition">The nested type definition.</param>
 public override INestedTypeDefinition Visit(INestedTypeDefinition nestedTypeDefinition)
 {
     var result = base.Visit(nestedTypeDefinition);
       if (this.contractProvider != null) {
     ITypeContract/*?*/ typeContract = this.contractProvider.GetTypeContractFor(nestedTypeDefinition);
     if (typeContract != null)
       this.contractProvider.AssociateTypeWithContract(result, this.Visit(typeContract));
       }
       return result;
 }