예제 #1
0
        private static MethodDefinition DeclareMethod(AssemblyDefinition assembly, JavaClass jc, JavaMethod jm)
        {
            string           name           = IdentifierHelper.GetDotNetFullName(jm.GetName(jc));
            MethodAttributes attributes     = jm.GetAttributes();
            ModuleDefinition module         = assembly.MainModule;
            string           returnTypeName = jm.GetReturnType(jc);
            TypeReference    returnType     = module.GetDescriptorType(returnTypeName);

            if (name == ".ctor" || name == ".cctor")
            {
                attributes |= MethodAttributes.SpecialName | MethodAttributes.RTSpecialName;
                attributes &= ~MethodAttributes.Virtual;
            }

            MethodDefinition result = new MethodDefinition(name, attributes, returnType);

            string[] parameterTypes = jm.GetParameterTypes(jc);
            string[] parameterNames = jm.GetParameterNames(jc);

            for (int i = 0; i < parameterTypes.Length; i++)
            {
                result.Parameters.Add(new ParameterDefinition(parameterNames[i], ParameterAttributes.None, module.GetDescriptorType(parameterTypes[i])));
            }

            return(result);
        }