Apr 10, 2005

MonoUML, Ingeniería Inversa, Cuarta Parte

Casi todo listo para terminar la librería, he limpiado el código ahora esta más legible, más rápido y con mayor soporte: clases anidadas, enumeraciones, arreglos, elementos pasados por referencia y punteros, y lo que había dicho antes, un parámetro para "nivelar" la profundidad de la importación, ahora por defecto se hace la importación AssemblyImport, es decir únicamente se hace ingeniería inversa a los ensamblados importados y no a sus dependencias, algo que por lo general es lo que se busca, y además esta el clásico FullImport, donde se busca hasta el nivel más bajo de información, por ejemplo si un método utiliza un System.Int32 (o un int en pocas palabras), también se la hace ingeniería inversa al System.Int32 a pesar de que es parte de la librería base, y así, todo recursivamente. Además de eso ya no hay problemas de Duplicated Key al cargarlo en MonoUML, en pocas palabras todo va genial.

Reverse Engineering

El código correspondiente es el siguiente:

using System;

namespace NamespaceSample
{
        public interface MyInterface
        {
                string HelloWorld ();
        }

        public enum MyEnumeration
        {
                Some,
                Thing,
                Here
        }

        public abstract class MyAbstractClass
        {
                public MyAbstractClass (MyEnumeration em)
                {
                }
        }

        public class MyClass : MyAbstractClass, MyInterface
        {
                public MyClass (MyEnumeration enm) : base (enm)
                {
                }

                public string HelloWorld ()
                {
                        return "hola mundo!";
                }

                public void ByReference (ref int i)
                {
                }

                protected class InternalClass
                {
                        public InternalClass (MyClass parentClass)
                        {
                        }

                        private void InternalHelloWorld ()
                        {
                        }

                        private string _myString;
                        private int[] _myArray;
                }
        }
}

Espero acepten mi propuesta, tengo mucho que platicar :)

Actualización: Correción de errores en imagén, CVS refleja los cambios.