コード例 #1
0
			private static string MakeMethodKey(MethodInfo method)
			{
				StringBuilder sb = new StringBuilder();
				sb.Append(method.ReturnType.AssemblyQualifiedName).Append(":").Append(method.Name);
				ParameterInfo[] paramInfo = method.GetParameters();
				Type[] paramTypes = new Type[paramInfo.Length];
				for(int i = 0; i < paramInfo.Length; i++)
				{
					paramTypes[i] = paramInfo[i].ParameterType;
					sb.Append(":").Append(paramInfo[i].ParameterType.AssemblyQualifiedName);
				}
				return sb.ToString();
			}
コード例 #2
0
ファイル: IkvmLoader.cs プロジェクト: jlyonsmith/NRefactory
        IUnresolvedMethod ReadMethod(MethodInfo method, IUnresolvedTypeDefinition parentType, EntityType methodType, IUnresolvedMember accessorOwner)
        {
            if (method == null)
                return null;
            var m = new DefaultUnresolvedMethod(parentType, method.Name);
            m.EntityType = methodType;
            m.AccessorOwner = accessorOwner;
            m.HasBody = method.GetMethodBody () != null;
            var genericArguments = method.GetGenericArguments ();
            if (genericArguments != null) {
                for (int i = 0; i < genericArguments.Length; i++) {
                    if (genericArguments[i].GenericParameterPosition != i)
                        throw new InvalidOperationException("g.Position != i");
                    m.TypeParameters.Add(new DefaultUnresolvedTypeParameter(
                        EntityType.Method, i, genericArguments[i].Name));
                }
                for (int i = 0; i < genericArguments.Length; i++) {
                    var tp = (DefaultUnresolvedTypeParameter)m.TypeParameters[i];
                    AddConstraints(tp, genericArguments[i]);
                    tp.ApplyInterningProvider(interningProvider);
                }
            }

            m.ReturnType = ReadTypeReference(method.ReturnType, typeAttributes: method.ReturnParameter.CustomAttributes);

            if (HasAnyAttributes(method))
                AddAttributes(method, m.Attributes, m.ReturnTypeAttributes);
            TranslateModifiers(method, m);

            foreach (var p in method.GetParameters ()) {
                m.Parameters.Add(ReadParameter(p));
            }

            // mark as extension method if the attribute is set
            if (method.IsStatic && HasExtensionAttribute(method)) {
                m.IsExtensionMethod = true;
            }

            int lastDot = method.Name.LastIndexOf('.');
            if (lastDot >= 0 /*&& method.HasOverrides*/) {
                // To be consistent with the parser-initialized type system, shorten the method name:
                m.Name = method.Name.Substring(lastDot + 1);
                m.IsExplicitInterfaceImplementation = true;

                foreach (var or in method.__GetMethodImpls ()) {
                    m.ExplicitInterfaceImplementations.Add(new DefaultMemberReference(
                        accessorOwner != null ? EntityType.Accessor : EntityType.Method,
                        ReadTypeReference(or.DeclaringType),
                        or.Name, or.GetGenericArguments ().Length, m.Parameters.Select(p => p.Type).ToList()));
                }
            }

            FinishReadMember(m, method);
            return m;
        }