Пример #1
0
        public void Inject(ICSharpCode.ILSpy.TreeNodes.ILSpyTreeNode node, string name, IMetadataTokenProvider member)
        {
            //Type
            var type = ((IMemberTreeNode)node).Member as TypeDefinition;

            //Creates the method definition
            var method = new MethodDefinition(
                name,
                MethodAttributes.Public,
                type.Module.TypeSystem.Void
            )
            {
                MetadataToken = new MetadataToken(TokenType.Method, ILEdit.GlobalContainer.GetFreeRID(type.Module))
            };

            //Checks if the destination type is an interface
            if (type.IsInterface)
                method.Attributes |= MethodAttributes.NewSlot | MethodAttributes.CheckAccessOnOverride | MethodAttributes.Abstract | MethodAttributes.Virtual;

            //Adds the method to the type
            type.Methods.Add(method);
            method.Overrides.Clear();
            if (node is TypeTreeNode)
            {
                node.Children.Add(new ILEditTreeNode(method, false));
                Helpers.Tree.SortChildren((TypeTreeNode)node);
            }
            else if (node is ILEditTreeNode)
            {
                ((ILEditTreeNode)node).RefreshChildren();
            }
        }
Пример #2
0
        /// <summary>
        /// Compare IMetadataTokenProvider instances based on their metadata token and their
        /// assembly.
        /// </summary>
        /// <param name="self">The IMetadataTokenProvider instance where the method is applied.</param>
        /// <param name="other">The IMetadataTokenProvider instance to compare to</param>
        /// <returns>True if the metadata tokens and assembly are identical, False otherwise</returns>
        public static bool Equals(this IMetadataTokenProvider self, IMetadataTokenProvider other)
        {
            if (self == other)
                return true;
            if (other == null)
                return (self == null);

            MetadataToken token = self.MetadataToken;
            if (!token.Equals(other.MetadataToken))
                return false;

            // metadata token is unique per assembly
            AssemblyDefinition self_assembly = GetAssembly(self);
            if (self_assembly == null)
            {
                // special case for Namespace (where GetAssembly would return null)
                if (token.TokenType == NamespaceDefinition.NamespaceTokenType)
                    return (self as NamespaceDefinition).Name == (other as NamespaceDefinition).Name;
                else
                    return false;
            }
            AssemblyDefinition other_assembly = GetAssembly(other);
            // compare assemblies tokens (but do not recurse)
            return other == null ? false : self_assembly.MetadataToken.Equals(other_assembly.MetadataToken);
        }
Пример #3
0
        public void Inject(ICSharpCode.ILSpy.TreeNodes.ILSpyTreeNode node, string name, IMetadataTokenProvider member)
        {
            //Name and namespace
            var typeName = node is ModuleTreeNode ? (name.Substring(name.Contains(".") ? name.LastIndexOf('.') + 1 : 0)) : name;
            var typeNamespace = node is ModuleTreeNode ? (name.Substring(0, name.Contains(".") ? name.LastIndexOf('.') : 0)) : string.Empty;

            //Checks that the typename isn't empty
            if (string.IsNullOrEmpty(typeName))
            {
                MessageBox.Show("Please, specify the name of the type", "Type name required", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            //Creates a new class definition
            var c = new TypeDefinition(
                typeNamespace,
                typeName,
                TypeAttributes.Class | TypeAttributes.Interface | TypeAttributes.Public | TypeAttributes.AutoClass | TypeAttributes.AnsiClass | TypeAttributes.Abstract
            )
            {
                IsAnsiClass = true,
            };

            //Adds to the node
            Helpers.Tree.AddTreeNode(node, c, null, null);
        }
		void CheckParametersAndValues (IMetadataTokenProvider provider, IMethodSignature constructor, IList<CustomAttributeArgument> arguments)
		{
			for (int index = 0; index < arguments.Count; index++) {
				ParameterDefinition parameter = constructor.Parameters[index];
				if (parameter.ParameterType.IsNamed ("System", "String")) {
					string value = (string) arguments [index].Value;
					if (Contains (parameter.Name, "version")) {
						Version v = null;
						if (!Version.TryParse (value, out v)) {
							string msg = String.Format (CultureInfo.InvariantCulture, "The value passed: {0} can't be parsed to a valid Version.", value);
							Runner.Report (provider, Severity.High, Confidence.High, msg);
						}
						continue;
					}
					if (Contains (parameter.Name, "url") ||
						Contains (parameter.Name, "uri") ||
						Contains (parameter.Name, "urn")) {
						Uri parsed = null;
						if (!Uri.TryCreate (value, UriKind.Absolute, out parsed)) {
							string msg = String.Format (CultureInfo.InvariantCulture, "The valued passed {0} can't be parsed to a valid Uri.", value);
							Runner.Report (provider, Severity.High, Confidence.High, msg);
						}
						continue;
					}
					if (Contains (parameter.Name, "guid")) {
						Guid g;
						if (!Guid.TryParse (value, out g)) {
							string msg = String.Format (CultureInfo.InvariantCulture, "The valued passed {0} can't be parsed to a valid Guid.", value);
							Runner.Report (provider, Severity.High, Confidence.High, msg);
						}
						continue;
					}
				}
			}
		}
Пример #5
0
		void ProcessProvider (IMetadataTokenProvider provider)
		{
			if (!TunerAnnotations.IsInternalized (Context, provider))
				return;

			Console.WriteLine ("[internalized] {0}", provider);
		}
Пример #6
0
 static TypeReference GetReference(Type type, IMetadataTokenProvider metadata)
 {
     ModuleDefinition module = metadata.GetAssembly().MainModule;
     TypeReference tr;
     if (!module.TryGetTypeReference(type.FullName, out tr))
         tr = module.Import(type);
     return tr;
 }
Пример #7
0
		public void Add (string rule, IMetadataTokenProvider metadata)
		{
			HashSet<IMetadataTokenProvider> list;
			if (!ignore.TryGetValue (rule, out list)) {
				list = new HashSet<IMetadataTokenProvider> ();
				ignore.Add (rule, list);
			}
			list.Add (metadata);
		}
Пример #8
0
		void Mark (IMetadataTokenProvider provider, CustomAttribute preserve_attribute)
		{
			if (IsConditionalAttribute (preserve_attribute)) {
				PreserveConditional (provider);
				return;
			}

			PreserveUnconditional (provider);
		}
		private bool CheckReturnVoid (IMetadataTokenProvider eventType, IMethodSignature invoke)
		{
			string full_name = invoke.ReturnType.FullName;
			if (String.Compare (full_name, "System.Void") == 0)
				return true;

			string msg = String.Format ("The delegate should return void, not {0}", full_name);
			Runner.Report (eventType, Severity.Medium, Confidence.High, msg);
			return false;
		}
Пример #10
0
        /// <summary>
        /// Creates a new instance of this MemberImporter
        /// </summary>
        /// <param name="member">Member to import</param>
        /// <param name="destination">Destination of the importing</param>
        /// <param name="session">Importing session</param>
        public MemberImporter(IMetadataTokenProvider member, IMetadataTokenProvider destination, MemberImportingSession session)
        {
            //Checks if the member can be imported (and that member and destination aren't null)
            if (!CanImport(member, destination))
                throw new ArgumentException(string.Format("{0} cannot import '{1}' into '{2}'", this.GetType().Name, member, destination));

            //Stores member and destination
            _member = member;
            _destination = destination;
            _Session = session;
        }
Пример #11
0
        /// <summary>
        /// Creates a new instance of the class ILEditTreeNode
        /// </summary>
        /// <param name="tokenProvider"></param>
        public ILEditTreeNode(IMetadataTokenProvider tokenProvider, bool manuallyFilledChildren)
        {
            //Stores the parameters
            language = MainWindow.Instance.CurrentLanguage;
            _tokenProvider = tokenProvider;
            this.LazyLoading = !manuallyFilledChildren;
            _manuallyFilledChildren = manuallyFilledChildren;

            //Sets the foreground
            this.Foreground = GlobalContainer.NewNodesBrush;
        }
Пример #12
0
		private static MethodDefinition FindMethodFromLocation (IMetadataTokenProvider location)
		{
			ParameterDefinition parameter = (location as ParameterDefinition);
			if (parameter != null)
				return (parameter.Method as MethodDefinition);

			MethodReturnType return_type = (location as MethodReturnType);
			if (return_type != null)
				return (return_type.Method as MethodDefinition);

			return (location as MethodDefinition);
		}
Пример #13
0
        public void Inject(ICSharpCode.ILSpy.TreeNodes.ILSpyTreeNode node, string name, IMetadataTokenProvider member)
        {
            //Gets the parent module
            var moduleNode = Helpers.Tree.GetModuleNode(node);

            //Injects the assembly reference
            moduleNode.Module.AssemblyReferences.Add(AssemblyNameReference.Parse(name));

            //Adds the node
            node.Children.Add(new AssemblyReferenceTreeNode(AssemblyNameReference.Parse(name), Helpers.Tree.GetAssemblyNode(moduleNode)) { Foreground = GlobalContainer.NewNodesBrush });
            Helpers.Tree.SortChildren((ReferenceFolderTreeNode)node);
        }
Пример #14
0
		// AssemblyDefinition						AttributeTargets.Assembly
		//	ModuleDefinition					AttributeTargets.Module
		//		TypeDefinition					AttributeTargets.Class | Delegate | Enum | Interface | Struct
		//			EventDefinition				AttributeTargets.Event
		//			FieldDefinition				AttributeTargets.Field
		//			GenericParameterDefinition		AttributeTargets.GenericParameter
		//			PropertyDefinition			AttributeTargets.Property
		//			MethodDefinition			AttributeTargets.Constructor | Method
		//				GenericParameterDefinition	AttributeTargets.GenericParameter
		//				ParameterDefinition		AttributeTargets.Parameter
		//				MethodReturnType		AttributeTargets.ReturnValue
		// NamespaceDefinition						special case
		public bool IsIgnored (IRule rule, IMetadataTokenProvider metadata)
		{
			// Note that the Runner tearing_down code may call us with nulls.
			if (metadata == null)
				return false;

			if ((rule == null) || !rule.Active)
				return true;

			HashSet<IMetadataTokenProvider> list;
			if (!ignore.TryGetValue (rule.FullName, out list))
				return false; // nothing is ignored for this rule

			return IsIgnored (list, metadata);
		}
Пример #15
0
		private static TypeDefinition FindTypeFromLocation (IMetadataTokenProvider location)
		{
			MethodDefinition method = (location as MethodDefinition);
			if (method != null)
				return (method.DeclaringType as TypeDefinition);

			FieldDefinition field = (location as FieldDefinition);
			if (field != null)
				return (field.DeclaringType as TypeDefinition);

			ParameterDefinition parameter = (location as ParameterDefinition);
			if (parameter != null)
				return FindTypeFromLocation (parameter.Method);

			return (location as TypeDefinition);
		}
Пример #16
0
		public Defect (IRule rule, IMetadataTokenProvider target, IMetadataTokenProvider location, Severity severity, Confidence confidence, string text)
		{
			if (rule == null)
				throw new ArgumentNullException ("rule");
			if (target == null)
				throw new ArgumentNullException ("target");
			if (location == null)
				throw new ArgumentNullException ("location");

			Rule = rule;
			Target = target;
			Location = location;
			Confidence = confidence;
			Severity = severity;
			Text = text;
		}
Пример #17
0
        protected override void OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs e)
        {
            //Selected item
            var selected = (e.AddedItems == null || e.AddedItems.Count == 0 || e.AddedItems[0] == null || !(e.AddedItems[0] is ILEditTreeNode)) ? null : ((ILEditTreeNode)e.AddedItems[0]).TokenProvider;

            //Checks the token
            if (selected == null || !SelectableMembers.Any(x => x == selected.MetadataToken.TokenType))
            {
                SelectedMember = null;
            }
            else
            {
                SelectedMember = selected;
            }

            //Call to base method
            base.OnSelectionChanged(e);
        }
Пример #18
0
        public void Inject(ICSharpCode.ILSpy.TreeNodes.ILSpyTreeNode node, string name, IMetadataTokenProvider member)
        {
            //Name and namespace
            var typeName = node is ModuleTreeNode ? (name.Substring(name.Contains(".") ? name.LastIndexOf('.') + 1 : 0)) : name;
            var typeNamespace = node is ModuleTreeNode ? (name.Substring(0, name.Contains(".") ? name.LastIndexOf('.') : 0)) : string.Empty;

            //Checks that the typename isn't empty
            if (string.IsNullOrEmpty(typeName))
            {
                MessageBox.Show("Please, specify the name of the type", "Type name required", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            //Creates a new class definition
            var c = new TypeDefinition(
                typeNamespace,
                typeName,
                TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.AutoClass | TypeAttributes.AnsiClass | TypeAttributes.Sealed
            )
            {
                IsAnsiClass = true,
            };

            //Destination module
            ModuleDefinition module = null;

            //Adds to the node and specifies the base class
            Helpers.Tree.AddTreeNode(node, c,
                m => { module = m; c.BaseType = new TypeReference("System", "Enum", m, m.TypeSystem.Corlib, true); },
                t => { module = t.Module; c.BaseType = new TypeReference("System", "Enum", t.Module, t.Module.TypeSystem.Corlib, true); }
            );

            //Injects the field value___
            c.Fields.Add(new FieldDefinition(
                "value__",
                FieldAttributes.Public | FieldAttributes.SpecialName | FieldAttributes.RTSpecialName,
                module.TypeSystem.Int32
            ));
        }
Пример #19
0
		public bool IsPublic (IMetadataTokenProvider provider)
		{
			return public_api.Contains (provider);
		}
Пример #20
0
 public void Processed(IMetadataTokenProvider provider)
 {
     processed.Add(provider);
 }
Пример #21
0
		public bool IsProcessed (IMetadataTokenProvider provider)
		{
			return processed.Contains (provider);
		}
Пример #22
0
 public bool IsProcessed(IMetadataTokenProvider provider)
 {
     return(processed.Contains(provider));
 }
Пример #23
0
 public AnnotatedStringValue(IMetadataTokenProvider sourceContext, DynamicallyAccessedMemberTypes dynamicallyAccessedMemberTypes)
 {
     Kind = ValueNodeKind.AnnotatedString;
     DynamicallyAccessedMemberTypes = dynamicallyAccessedMemberTypes;
     SourceContext = sourceContext;
 }
Пример #24
0
 public void Mark(IMetadataTokenProvider provider)
 {
     throw null;
 }
Пример #25
0
 public void SetCustomAnnotation(object key, IMetadataTokenProvider item, object value)
 {
     throw null;
 }
Пример #26
0
 public bool IsPublic(IMetadataTokenProvider provider)
 {
     return(public_api.Contains(provider));
 }
Пример #27
0
 protected abstract bool CanImportCore(IMetadataTokenProvider member, IMetadataTokenProvider destination);
Пример #28
0
        public void UnrecognizedReflectionAccessPattern(IMemberDefinition source, Instruction sourceInstruction, IMetadataTokenProvider accessedItem, string message)
        {
            var origin = new MessageOrigin(source, sourceInstruction?.Offset);

            _context.LogWarning(message, 2006, origin, MessageSubCategory.TrimAnalysis);
        }
Пример #29
0
 // let product filters what get's included to help preserve extraneous serialization members
 // e.g. ensure we don't keep stuff that triggers DRM checks
 protected virtual IMetadataTokenProvider FilterExtraSerializationMembers(IMetadataTokenProvider provider)
 {
     return(provider);
 }
Пример #30
0
 public void RecognizedReflectionAccessPattern(IMemberDefinition source, Instruction sourceInstruction, IMetadataTokenProvider accessedItem)
 {
     // Do nothing - there's no logging for successfully recognized patterns
 }
Пример #31
0
 public AssemblyReferenceImporter(IMetadataTokenProvider member, MemberImportingSession session)
     : base(member, session.DestinationModule, session)
 {
 }
Пример #32
0
 void InternalMark(IMetadataTokenProvider provider)
 {
     Annotations.Mark(provider);
     Annotations.SetPublic(provider);
 }
		private bool CheckParameterName (IMetadataTokenProvider eventType, ParameterReference invokeParameter, string expectedName)
		{
			if (String.Compare (invokeParameter.Name, expectedName) == 0)
				return true;

			Runner.Report (eventType, Severity.Low, Confidence.High, String.Format ("The expected name is {0}, not {1}", expectedName, invokeParameter.Name));
			return false;
		}
Пример #34
0
 protected override bool CanImportCore(IMetadataTokenProvider member, IMetadataTokenProvider destination)
 {
     return(true);
 }
Пример #35
0
 public EventImporter(IMetadataTokenProvider member, IMetadataTokenProvider destination, MemberImportingSession session, bool createNode)
     : base(member, destination, session)
 {
     _createNode = createNode;
 }
Пример #36
0
 /// <summary>
 /// Creates a new instance of this MemberImporter
 /// </summary>
 /// <param name="member">Member to import</param>
 /// <param name="session">Importing session</param>
 public MemberImporter(IMetadataTokenProvider member, MemberImportingSession session)
     : this(member, session.Destination, session)
 {
 }
Пример #37
0
 public object GetCustomAnnotation(object key, IMetadataTokenProvider item)
 {
     throw null;
 }
        private RuleResult ReportResults(IMetadataTokenProvider method)
        {
            foreach (KeyValuePair<string, KeyValuePair<MethodDefinition, int>> kvp in calls) {
                // look which getter we're calling more than once
                int count = kvp.Value.Value;
                if (count == 1)
                    continue;

                MethodDefinition md = kvp.Value.Key;
                if (md.IsVirtual && !md.IsFinal) {
                    // virtual calls are expensive, so the code better cache the value
                    string msg = String.Format (CultureInfo.InvariantCulture,
                        "Multiple ({0}) calls to virtual property '{1}'.", count, md.ToString ());
                    Runner.Report (method, GetSeverity (count, true), Confidence.Normal, msg);
                } else if (!IsInliningCandidate (md)) {
                    // non-virtual calls might be inlined
                    // otherwise caching the value is again a good idea
                    int size = md.HasBody ? md.Body.CodeSize : 0;
                    string msg = String.Format (CultureInfo.InvariantCulture,
                        "Multiple ({0}) calls to non-virtual property '{1}', likely non-inlined due to size ({2} >= {3}).",
                        count, md.ToString (), size, InlineLimit);
                    Runner.Report (method, GetSeverity (count, false), Confidence.Normal, msg);
                }
            }

            return Runner.CurrentRuleResult;
        }
Пример #39
0
        private void CheckSatelliteResource(EmbeddedResource mainResource, EmbeddedResource satelliteResource, IMetadataTokenProvider satelliteAssembly)
        {
            using (Stream resourceStream = satelliteResource.GetResourceStream())
                using (ResourceSet resourceSet = new ResourceSet(resourceStream))
                {
                    foreach (DictionaryEntry entry in resourceSet)
                    {
                        string resourceName   = (string)entry.Key;
                        object satelliteValue = entry.Value;
                        object mainValue;
                        if (!mainAssemblyResourceCache.TryGetMainResource(mainResource, resourceName, out mainValue))
                        {
                            string msg = String.Format(CultureInfo.InvariantCulture,
                                                       "The resource {0} in the file {1} exist in the satellite assembly but not in the main assembly",
                                                       resourceName, satelliteResource.Name);
                            Runner.Report(satelliteAssembly, Severity.Low, Confidence.High, msg);
                            continue;
                        }

                        Type satelliteType = satelliteValue.GetType();
                        Type mainType      = mainValue.GetType();
                        if (!satelliteType.Equals(mainType))
                        {
                            string msg = String.Format(CultureInfo.InvariantCulture,
                                                       "The resource {0} in the file {1} is of type {2} in the satellite assembly but of type {3} in the main assembly",
                                                       resourceName, satelliteResource.Name, satelliteType, mainType);
                            Runner.Report(satelliteAssembly, Severity.High, Confidence.High, msg);
                            continue;
                        }

                        if (satelliteType.Equals(typeof(string)))
                        {
                            Bitmask <int> mainParameters      = GetStringFormatExpectedParameters((string)mainValue);
                            Bitmask <int> satelliteParameters = GetStringFormatExpectedParameters((string)satelliteValue);

                            if (!mainParameters.Equals(satelliteParameters))
                            {
                                string msg = String.Format(CultureInfo.InvariantCulture,
                                                           "The string resource {0} in the file {1} does not use the same string format parameters in the satellite and main assemblies",
                                                           resourceName, satelliteResource.Name);
                                Runner.Report(satelliteAssembly, Severity.High, Confidence.Normal, msg);
                            }
                        }
                    }
                }
        }
Пример #40
0
 public void SetPublic(IMetadataTokenProvider provider)
 {
     public_api.Add(provider);
 }
Пример #41
0
        public void Inject(ICSharpCode.ILSpy.TreeNodes.ILSpyTreeNode node, string name, IMetadataTokenProvider member)
        {
            //Name and namespace
            var typeName      = node is ModuleTreeNode ? (name.Substring(name.Contains(".") ? name.LastIndexOf('.') + 1 : 0)) : name;
            var typeNamespace = node is ModuleTreeNode ? (name.Substring(0, name.Contains(".") ? name.LastIndexOf('.') : 0)) : string.Empty;

            //Checks that the typename isn't empty
            if (string.IsNullOrEmpty(typeName))
            {
                MessageBox.Show("Please, specify the name of the type", "Type name required", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            //Creates a new class definition
            var c = new TypeDefinition(
                typeNamespace,
                typeName,
                TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.AutoClass | TypeAttributes.AnsiClass | TypeAttributes.Sealed
                )
            {
                IsAnsiClass = true,
            };

            //Destination module
            ModuleDefinition module = null;

            //Adds to the node and specifies the base class
            Helpers.Tree.AddTreeNode(node, c,
                                     m => { module = m; c.BaseType = new TypeReference("System", "Enum", m, m.TypeSystem.Corlib, true); },
                                     t => { module = t.Module; c.BaseType = new TypeReference("System", "Enum", t.Module, t.Module.TypeSystem.Corlib, true); }
                                     );

            //Injects the field value___
            c.Fields.Add(new FieldDefinition(
                             "value__",
                             FieldAttributes.Public | FieldAttributes.SpecialName | FieldAttributes.RTSpecialName,
                             module.TypeSystem.Int32
                             ));
        }
		private bool CheckAmountOfParameters (IMetadataTokenProvider eventType, IMethodSignature invoke)
		{
			if (invoke.HasParameters && (invoke.Parameters.Count == 2))
				return true;

			Runner.Report (eventType, Severity.Medium, Confidence.High, "The delegate should have 2 parameters");
			return false;
		}
Пример #43
0
 public MethodParameterValue(int parameterIndex, DynamicallyAccessedMemberTypes dynamicallyAccessedMemberTypes, IMetadataTokenProvider sourceContext)
 {
     Kind           = ValueNodeKind.MethodParameter;
     ParameterIndex = parameterIndex;
     DynamicallyAccessedMemberTypes = dynamicallyAccessedMemberTypes;
     SourceContext = sourceContext;
 }
Пример #44
0
 public bool IsMarked(IMetadataTokenProvider provider)
 {
     throw null;
 }
Пример #45
0
		public void Processed (IMetadataTokenProvider provider)
		{
			processed.Add (provider);
		}
Пример #46
0
        /// <summary>
        /// Loads the children
        /// </summary>
        protected override void LoadChildren()
        {
            //Checks if the children must be filled manually
            if (ManuallyFilledChildren)
                return;

            //IEnumerable containing the childrenot the node
            IEnumerable<IMetadataTokenProvider> children = null;

            //Assembly
            if (_tokenProvider is AssemblyDefinition)
                children = ((AssemblyDefinition)_tokenProvider).Modules;
            //Module
            else if (_tokenProvider is ModuleDefinition)
            {
                //Types
                IEnumerable<TypeDefinition> types = ((ModuleDefinition)_tokenProvider).Types;
                if (this.ChildrenFilter != null)
                    types = types.Where(x => this.ChildrenFilter(x));

                //Groups the types by namespace and adds
                foreach (var node in types.GroupBy(x => x.Namespace)
                                     .OrderBy(x => x.Key)
                                     .Select(x =>
                                     {
                                         var n = new NamespaceTreeNode(x.Key);
                                         foreach (var t in x.OrderBy(y => y.Name))
                                             n.Children.Add(new ILEditTreeNode(t, false) { ChildrenFilter = this.ChildrenFilter, Foreground = this.Foreground });
                                         return n;
                                     })) 
                {
                    this.Children.Add(node);
                }

                //Returns
                return;
            }
            //Type
            else if (_tokenProvider is TypeDefinition)
            {
                var type = (TypeDefinition)_tokenProvider;
                children =
                    type.NestedTypes.Cast<IMetadataTokenProvider>()
                    .Concat(type.Fields)
                    .Concat(type.Methods.Where(x => !(x.IsGetter || x.IsSetter || x.IsAddOn || x.IsRemoveOn || x.IsFire)))
                    .Concat(type.Properties)
                    .Concat(type.Events);
            }
            //Property
            else if (_tokenProvider is PropertyDefinition)
            {
                var prop = (PropertyDefinition)_tokenProvider;
                children =
                    new IMetadataTokenProvider[] { prop.GetMethod, prop.SetMethod }
                    .Where(x => x != null)
                    .Concat(prop.HasOtherMethods ? prop.OtherMethods.Cast<IMetadataTokenProvider>() : new IMetadataTokenProvider[] { });
            }
            //Event
            else if (_tokenProvider is EventDefinition)
            {
                var evt = (EventDefinition)_tokenProvider;
                children =
                    new IMetadataTokenProvider[] { evt.AddMethod, evt.RemoveMethod, evt.InvokeMethod }
                    .Where(x => x != null)
                    .Concat(evt.HasOtherMethods ? evt.OtherMethods.Cast<IMetadataTokenProvider>() : new IMetadataTokenProvider[] { });
            }

            //If there are no children returns
            if (children == null)
                return;

            //Applies the filtering
            if (ChildrenFilter != null)
                children = children.Where(x => ChildrenFilter(x));

            //Adds the children
            foreach (var x in children)
                this.Children.Add(new ILEditTreeNode(x, false) { ChildrenFilter = this.ChildrenFilter, Foreground = this.Foreground });
        }
Пример #47
0
		public void SetPublic (IMetadataTokenProvider provider)
		{
			public_api.Add (provider);
		}
Пример #48
0
 public bool IsMarked(IMetadataTokenProvider provider)
 {
     return(marked.Contains(provider));
 }
		private bool CheckParameterTypes (IMetadataTokenProvider eventType, IMethodSignature invoke)
		{
			bool ok = true;
			if (!invoke.HasParameters)
				return ok;

			IList<ParameterDefinition> pdc = invoke.Parameters;
			if (pdc.Count >= 1) {
				string type_name = pdc [0].ParameterType.FullName;
				if (String.Compare (type_name, "System.Object") != 0) {
					Runner.Report (eventType, Severity.Medium, Confidence.High, String.Format ("The first parameter should have an object, not {0}", type_name));
					ok = false;
				}
			}
			if (pdc.Count >= 2) {
				if (!pdc [1].ParameterType.Inherits ("System.EventArgs")) {
					Runner.Report (eventType, Severity.Medium, Confidence.High, "The second parameter should be a subclass of System.EventArgs");
					ok = false;
				}
			}
			return ok;
		}
 /// <summary>
 /// Creates a new instance of the <see cref="MethodBodySerializationContext"/> class.
 /// </summary>
 /// <param name="tokenProvider">
 /// The object responsible for providing new metadata tokens to members referenced by instructions.
 /// </param>
 /// <param name="diagnosticBag">
 /// The bag that is used to collect diagnostic information during the serialization process.
 /// </param>
 public MethodBodySerializationContext(IMetadataTokenProvider tokenProvider, DiagnosticBag diagnosticBag)
 {
     TokenProvider = tokenProvider ?? throw new ArgumentNullException(nameof(tokenProvider));
     DiagnosticBag = diagnosticBag ?? throw new ArgumentNullException(nameof(diagnosticBag));
 }
 public void UnrecognizedReflectionAccessPattern(IMemberDefinition source, Instruction sourceInstruction, IMetadataTokenProvider accessedItem, string message)
 {
     PreviousRecorder?.UnrecognizedReflectionAccessPattern(source, sourceInstruction, accessedItem, message);
     UnrecognizedPatterns.Add(new ReflectionAccessPattern {
         Source            = source,
         SourceInstruction = sourceInstruction,
         AccessedItem      = accessedItem,
         Message           = message
     });
 }
Пример #52
0
 public EventImporter(IMetadataTokenProvider member, IMetadataTokenProvider destination, MemberImportingSession session)
     : this(member, destination, session, true)
 {
 }
Пример #53
0
 public GenericInstanceTypeImporter(IMetadataTokenProvider member, IMetadataTokenProvider destination, MemberImportingSession session)
     : base(member, destination, session)
 {
 }
Пример #54
0
 string GetKey(IMetadataTokenProvider provider)
 {
     return($"{provider.MetadataToken.TokenType}:{provider}");
 }
Пример #55
0
 private UInt32 GetMetadataToken(
     IMetadataTokenProvider token)
 {
     UInt16 referenceId;
     switch (token.MetadataToken.TokenType)
     {
         case TokenType.TypeRef:
             _context.TypeReferencesTable.TryGetTypeReferenceId((TypeReference)token, out referenceId);
             return (UInt32)0x01000000 | referenceId;
         case TokenType.TypeDef:
             _context.TypeDefinitionTable.TryGetTypeReferenceId((TypeDefinition)token, out referenceId);
             return (UInt32)0x04000000 | referenceId;
         case TokenType.TypeSpec:
             _context.TypeSpecificationsTable.TryGetTypeReferenceId((TypeReference) token, out referenceId);
             return (UInt32)0x08000000 | referenceId;
         case TokenType.Field:
             _context.FieldsTable.TryGetFieldReferenceId((FieldDefinition) token, false, out referenceId);
             return (UInt32)0x05000000 | referenceId;
     }
     return 0U;
 }
Пример #56
0
        public ReflectionPatternContext(LinkContext context, IMemberDefinition source, IMetadataTokenProvider memberWithRequirements,
                                        Instruction instruction = null)
        {
            _context = context;
            Source   = source;
            MemberWithRequirements = memberWithRequirements;
            Instruction            = instruction;

#if DEBUG
            _patternAnalysisAttempted = false;
            _patternReported          = false;
#endif
        }
Пример #57
0
 protected virtual void ElementRemoved(IMetadataTokenProvider element)
 {
 }
Пример #58
0
 public void Mark(IMetadataTokenProvider provider)
 {
     marked.Add(provider);
 }
Пример #59
0
		protected bool CheckProcessed (IMetadataTokenProvider provider)
		{
			if (Annotations.IsProcessed (provider))
				return true;

			Annotations.Processed (provider);
			return false;
		}
 public void RecognizedReflectionAccessPattern(IMemberDefinition source, Instruction sourceInstruction, IMetadataTokenProvider accessedItem)
 {
     PreviousRecorder?.RecognizedReflectionAccessPattern(source, sourceInstruction, accessedItem);
     RecognizedPatterns.Add(new ReflectionAccessPattern {
         Source            = source,
         SourceInstruction = sourceInstruction,
         AccessedItem      = accessedItem
     });
 }