Beispiel #1
0
        public virtual IType CreateInstantiatedGenericType(IType type, IList <IReturnType> genericArguments)
        {
            if (genericArguments == null || type == null || type is InstantiatedType)
            {
                return(type);
            }

            string name = DomType.GetInstantiatedTypeName(type.FullName, genericArguments);

            lock (instantiatedTypeCache) {
                IType gtype;
                if (instantiatedTypeCache.TryGetValue(name, out gtype))
                {
                    return(gtype);
                }

                gtype = DomType.CreateInstantiatedGenericTypeInternal(type, genericArguments);
                instantiatedTypeCache [name] = gtype;
                return(gtype);
            }
        }
Beispiel #2
0
        public void ExtensionMethodTest()
        {
            // build "T MyMethod<T, S> (this KeyValuePair<T, S> a, S b)"
            DomMethod method = new DomMethod();

            method.Name       = "MyMethod";
            method.ReturnType = new DomReturnType("T");
            method.AddTypeParameter(new TypeParameter("T"));
            method.AddTypeParameter(new TypeParameter("S"));

            DomReturnType returnType = new DomReturnType("KeyValuePair");

            returnType.AddTypeParameter(new DomReturnType("T"));
            returnType.AddTypeParameter(new DomReturnType("S"));
            method.Add(new DomParameter(method, "a", returnType));
            method.Add(new DomParameter(method, "b", new DomReturnType("S")));

            // Build extendet type KeyValuePair<int, object>
            DomType type = new DomType("KeyValuePair");

            type.AddTypeParameter(new TypeParameter("T"));
            type.AddTypeParameter(new TypeParameter("S"));
            IType extType = DomType.CreateInstantiatedGenericTypeInternal(type, new IReturnType[] { DomReturnType.Int32, DomReturnType.Object });

            Console.WriteLine(extType);

            // extend method
            List <IReturnType> genArgs = new List <IReturnType> ();
            List <IReturnType> args    = new List <IReturnType> ();

            ExtensionMethod extMethod = new ExtensionMethod(extType, method, genArgs, args);

            Console.WriteLine(extMethod);
            // check
            Assert.AreEqual(DomReturnType.Int32.FullName, extMethod.ReturnType.FullName);
            Assert.AreEqual(DomReturnType.Object.FullName, extMethod.Parameters[0].ReturnType.FullName);
        }