Example #1
0
        private static IMethod MapGenericMethod(IMethod method, GenericParameterDeclarationCollection genericArgs)
        {
            var args = method.GenericInfo.GenericParameters
                       .Select(gp => (IType)genericArgs.First(ga => ga.Name == gp.Name).Entity).ToArray();

            return(method.GenericInfo.ConstructMethod(args));
        }
 public GenericParameterCollectionTreeNode( GenericParameterDeclarationCollection genericParameters )
     : base( TreeViewImage.Folder, null )
 {
     this.Text = "Generic parameters";
     this.genericParameters = genericParameters;
     this.EnableLatePopulate();
 }
 public GenericParameterCollectionTreeNode(GenericParameterDeclarationCollection genericParameters)
     : base(TreeViewImage.Folder, null)
 {
     this.Text = "Generic parameters";
     this.genericParameters = genericParameters;
     this.EnableLatePopulate();
 }
Example #4
0
        private void BuildGenericParameters(GenericParameterDeclarationCollection declarations)
        {
            _genericParameters = new InternalGenericParameter[declarations.Count];

            int i = 0;

            foreach (GenericParameterDeclaration gpd in declarations)
            {
                gpd.Entity = _genericParameters[i] = new InternalGenericParameter(_typeSystemServices, gpd, this, i);
                i++;
            }
        }
Example #5
0
 private static void InheritTypeParameters(TypeDefinition type, GenericParameterDeclarationCollection gpds)
 {
     foreach (var param in gpds.Reverse())
     {
         var match = type.GenericParameters.FirstOrDefault(p => p.Name.Equals(param.Name));
         if (match == null)
         {
             match = param.CloneNode();
             type.GenericParameters.Insert(0, match);
         }
         match["InternalGenericParent"] = param;
     }
     type["TypeRefReplacement"] = BuildReplacement(type);
 }
        private IMethod RemapMethod(Node node, GenericMappedMethod gmm, GenericParameterDeclarationCollection genParams)
        {
            var sourceMethod = gmm.SourceMember;

            if (sourceMethod.GenericInfo != null)
            {
                throw new CompilerError(node, "Mapping generic methods in generators is not implemented yet");
            }

            var baseType    = sourceMethod.DeclaringType;
            var genericInfo = baseType.GenericInfo;

            if (genericInfo == null)
            {
                throw new CompilerError(node, "Mapping generic nested types in generators is not implemented yet");
            }

            var genericArgs = ((IGenericArgumentsProvider)gmm.DeclaringType).GenericArguments;
            var mapList     = new List <IType>();

            foreach (var arg in genericArgs)
            {
                var mappedArg = genParams.SingleOrDefault(gp => gp.Name == arg.Name);
                if (mappedArg != null)
                {
                    mapList.Add((IType)mappedArg.Entity);
                }
                else
                {
                    mapList.Add(arg);
                }
            }
            var newType = (IConstructedTypeInfo) new GenericConstructedType(baseType, mapList.ToArray());

            return((IMethod)newType.Map(sourceMethod));
        }
Example #7
0
 void WriteGenericParameterList(GenericParameterDeclarationCollection items)
 {
     Write("[of ");
     WriteCommaSeparatedList(items);
     Write("]");
 }
Example #8
0
 public GenericConstraintsValidator(CompilerContext ctx, Node node, GenericParameterDeclarationCollection parameters)
 {
     _context    = ctx;
     _node       = node;
     _parameters = parameters;
 }