예제 #1
0
        public object MapToIdlStruct(Type clsType)
        {
            lock (structTCs)
            {
                StructTC result = structTCs[clsType] as StructTC;
                if (result != null)
                {
                    return(result);
                }

                result = new StructTC();
                RegisterCreatedTypeCodeForType(clsType, AttributeExtCollection.EmptyCollection,
                                               result);

                FieldInfo[]    members       = ReflectionHelper.GetAllDeclaredInstanceFieldsOrdered(clsType);
                StructMember[] structMembers = new StructMember[members.Length];
                for (int i = 0; i < members.Length; i++)
                {
                    omg.org.CORBA.TypeCode memberType =
                        CreateOrGetTypeCodeForType(members[i].FieldType,
                                                   ReflectionHelper.GetCustomAttriutesForField(members[i],
                                                                                               true));
                    structMembers[i] = new StructMember(members[i].Name, memberType);
                }
                result.Initalize(Repository.GetRepositoryID(clsType),
                                 IdlNaming.ReverseIdlToClsNameMapping(clsType.Name),
                                 structMembers);

                structTCs[clsType] = result;

                return(result);
            }
        }
예제 #2
0
        public void TestGenerateSpecialNameRepId()
        {
            string   name     = "TestStructGenForTypeCodeType3";
            string   typeName = "Ch.Elca.Iiop.Tests." + name;
            string   repId    = "IDL:Ch/Elca/Iiop/Tests/Special_TestStructGenForTypeCodeType3:1.0";
            StructTC tc       = new StructTC(repId,
                                             name, new StructMember[] {
                new StructMember("M1", new LongTC())
            });
            Type res = m_gen.CreateOrGetType(typeName, tc);

            Assert.NotNull(res);
            Assert.AreEqual(typeName, res.FullName, "type name");
            Assert.AreEqual(repId, Repository.GetRepositoryID(res), "rep id");
        }
예제 #3
0
        public void TestGenerate()
        {
            string       name     = "TestStructGenForTypeCodeType";
            string       typeName = "Ch.Elca.Iiop.Tests." + name;
            string       repId    = "IDL:Ch/Elca/Iiop/Tests/TestStructGenForTypeCodeType:1.0";
            StructMember m1       = new StructMember("M1", new LongTC());
            StructTC     tc       = new StructTC(repId,
                                                 name, new StructMember[] {
                m1
            });
            Type res = m_gen.CreateOrGetType(typeName, tc);

            Assert.NotNull(res);
            Assert.AreEqual(typeName, res.FullName, "type name");
            Assert.AreEqual(repId, Repository.GetRepositoryID(res), "rep id");
            Assert.NotNull(res.GetField(m1.name,
                                        BindingFlags.Public | BindingFlags.Instance), "field M1");
            Assert.IsTrue(res.IsSerializable, "Serializable");
        }