public void AddDebuggerBrowsableAttribute(IMutableMember member, DebuggerBrowsableState debuggerBrowsableState)
        {
            ArgumentUtility.CheckNotNull("member", member);

            var attribute = new CustomAttributeDeclaration(s_debuggerBrowsableAttributeConstructor, new object[] { debuggerBrowsableState });

            member.AddCustomAttribute(attribute);
        }
        public void ReplicateAttributes(IAttributableDefinition source, IMutableMember destination)
        {
            ArgumentUtility.CheckNotNull("source", source);
            ArgumentUtility.CheckNotNull("destination", destination);

            foreach (var attribute in source.CustomAttributes)
            {
                AddAttribute(destination, attribute.Data);
            }
        }
        public void AddConcreteMixinTypeAttribute(IMutableMember member, ConcreteMixinTypeIdentifier concreteMixinTypeIdentifier)
        {
            ArgumentUtility.CheckNotNull("member", member);
            ArgumentUtility.CheckNotNull("concreteMixinTypeIdentifier", concreteMixinTypeIdentifier);

            var attributeData = ConcreteMixinTypeAttribute.Create(concreteMixinTypeIdentifier).ConcreteMixinTypeIdentifierData;
            var attribute     = new CustomAttributeDeclaration(s_concreteMixinTypeAttributeConstructor, new object[] { attributeData });

            member.AddCustomAttribute(attribute);
        }
Beispiel #4
0
        private void CheckAttributeInheritanceAllowMultiple(IMutableMember mutableInfo)
        {
            mutableInfo.AddCustomAttribute(CreateAttribute <InheritableAllowMultipleAttribute> (new object[] { "derived1" }));
            mutableInfo.AddCustomAttribute(CreateAttribute <NonInheritableAllowMultipleAttribute> (new object[] { "derived2" }));

            var filterType       = typeof(AllowMultipleBaseAttribute);
            var actualAttributes = (AllowMultipleBaseAttribute[])mutableInfo.GetCustomAttributes(filterType, true);

            Assert.That(actualAttributes.Select(a => a.CtorArg), Is.EquivalentTo(new[] { "derived1", "derived2", "base1" }));
        }
        public void AddGeneratedMethodWrapperAttribute(IMutableMember member, MethodInfo methodToBeWrapped)
        {
            ArgumentUtility.CheckNotNull("member", member);
            ArgumentUtility.CheckNotNull("methodToBeWrapped", methodToBeWrapped);

            var attribute = new CustomAttributeDeclaration(
                s_generatedMethodWrapperAttributeConstructor,
                new object[] { methodToBeWrapped.DeclaringType, methodToBeWrapped.Name, methodToBeWrapped.ToString() });

            member.AddCustomAttribute(attribute);
        }
        public void AddOverrideInterfaceMappingAttribute(IMutableMember member, MethodInfo overriddenMethod)
        {
            ArgumentUtility.CheckNotNull("member", member);
            ArgumentUtility.CheckNotNull("overriddenMethod", overriddenMethod);

            var attribute = new CustomAttributeDeclaration(
                s_overrideInterfaceMappingAttributeConstructor,
                new object[] { overriddenMethod.DeclaringType, overriddenMethod.Name, overriddenMethod.ToString() });

            member.AddCustomAttribute(attribute);
        }
        public void AddConcreteMixedTypeAttribute(IMutableMember member, ClassContext classContext, IEnumerable <Type> orderedMixinTypes)
        {
            ArgumentUtility.CheckNotNull("member", member);
            ArgumentUtility.CheckNotNull("classContext", classContext);
            ArgumentUtility.CheckNotNull("orderedMixinTypes", orderedMixinTypes);

            var attributeData = ConcreteMixedTypeAttribute.FromClassContext(classContext, orderedMixinTypes.ToArray());
            var attribute     = new CustomAttributeDeclaration(
                s_concreteMixedTypeAttributeConstructor, new object[] { attributeData.ClassContextData, attributeData.OrderedMixinTypes });

            member.AddCustomAttribute(attribute);
        }
        public void AddIntroducedMemberAttribute(IMutableMember member, MemberInfo interfaceMember, MemberDefinitionBase implementingMember)
        {
            ArgumentUtility.CheckNotNull("member", member);
            ArgumentUtility.CheckNotNull("interfaceMember", interfaceMember);
            ArgumentUtility.CheckNotNull("implementingMember", implementingMember);

            var attribute = new CustomAttributeDeclaration(
                s_introducedMemberAttributeConstructor,
                new object[] { implementingMember.DeclaringClass.Type, implementingMember.Name, interfaceMember.DeclaringType, interfaceMember.Name });

            member.AddCustomAttribute(attribute);
        }
        public void AddAttribute(IMutableMember member, ICustomAttributeData attributeData)
        {
            ArgumentUtility.CheckNotNull("member", member);
            ArgumentUtility.CheckNotNull("attributeData", attributeData);

            var attribute = new CustomAttributeDeclaration(
                attributeData.Constructor,
                attributeData.ConstructorArguments.ToArray(),
                attributeData.NamedArguments.Select(CreateNamedArgumentDeclaration).ToArray());

            member.AddCustomAttribute(attribute);
        }
        public void AddDebuggerDisplayAttribute(IMutableMember member, string debuggerDisplayString, string debuggerDisplayNameStringOrNull)
        {
            ArgumentUtility.CheckNotNull("member", member);
            ArgumentUtility.CheckNotNullOrEmpty("debuggerDisplayString", debuggerDisplayString);
            // Debugger display name may be null.

            var attribute = new CustomAttributeDeclaration(
                s_debuggerDisplayAttributeConstructor,
                new object[] { debuggerDisplayString },
                new NamedArgumentDeclaration(s_debuggerDisplayAttributeNameProperty, debuggerDisplayNameStringOrNull));

            member.AddCustomAttribute(attribute);
        }
        /// <summary>
        /// Retrieves the generated <see cref="MemberInfo"/> for the specified <see cref="IMutableMember"/>.
        /// </summary>
        /// <param name="mutableMember">The mutable member.</param>
        /// <returns>The generated member.</returns>
        public MemberInfo GetGeneratedMember(IMutableMember mutableMember)
        {
            ArgumentUtility.CheckNotNull("mutableMember", mutableMember);

            MemberInfo generatedMember;

            if (_mapping.TryGetValue(mutableMember, out generatedMember))
            {
                return(generatedMember);
            }

            BuildMapping(mutableMember.MutableDeclaringType);

            return(_mapping[mutableMember]);
        }
Beispiel #12
0
        private void ImplementAttributes(
            IMutableMember member, IAttributeIntroductionTarget targetConfiguration, TargetClassDefinition targetClassDefinition)
        {
            foreach (var attribute in targetConfiguration.CustomAttributes)
            {
                if (_attributeGenerator.ShouldBeReplicated(attribute, targetConfiguration, targetClassDefinition))
                {
                    _attributeGenerator.AddAttribute(member, attribute.Data);
                }
            }

            foreach (var introducedAttribute in targetConfiguration.ReceivedAttributes)
            {
                _attributeGenerator.AddAttribute(member, introducedAttribute.Attribute.Data);
            }
        }
        private void BuildMapping(MutableType mutableType)
        {
            var generatedType                = (Type)_mapping[mutableType];
            var generatedMembers             = generatedType.GetMembers(c_allDeclared);
            var generatedMembersByNameAndSig = generatedMembers.ToDictionary(m => Tuple.Create(m.Name, MemberSignatureProvider.GetMemberSignature(m)));

            var addedMembers =
                new IMutableMember[] { mutableType.MutableTypeInitializer }.Where(m => m != null)
            .Concat(mutableType.AddedNestedTypes.Cast <IMutableMember>())
            .Concat(mutableType.AddedFields.Cast <IMutableMember>())
            .Concat(mutableType.AddedConstructors.Cast <IMutableMember>())
            .Concat(mutableType.AddedMethods.Cast <IMutableMember>())
            .Concat(mutableType.AddedProperties.Cast <IMutableMember>())
            .Concat(mutableType.AddedEvents.Cast <IMutableMember>());

            foreach (var addedMember in addedMembers)
            {
                var member          = (MemberInfo)addedMember;
                var nameAndSig      = Tuple.Create(member.Name, MemberSignatureProvider.GetMemberSignature(member));
                var generatedMember = generatedMembersByNameAndSig[nameAndSig];

                _mapping.Add(addedMember, generatedMember);
            }
        }