Beispiel #1
0
        internal void Procesar(List <string> lineas)
        {
            // Empieza una clase
            this.Firma = lineas[0];
            // Limpiar extends de la firma
            var indexExtends    = this.Firma.IndexOf(" extends ");
            var firmaSinExtends = indexExtends < 0
                ? this.Firma
                : this.Firma.Substring(0, indexExtends);

            // Obtener nombre de la clase
            this.Nombre = firmaSinExtends.Substring(firmaSinExtends.LastIndexOf(" ") + 1);

            string linea;
            int    contadorLlaves = 0;

            do
            {
                // Borrar primer linea
                lineas.RemoveAt(0);
                linea = lineas[0];
                switch (linea)
                {
                case "{":
                    contadorLlaves++;
                    break;

                case "}":
                    contadorLlaves--;
                    break;

                default:
                    // procesar linea de la clase
                    if (linea.EndsWith(")") || linea.Replace(" ", "").EndsWith(")throwsException"))
                    {
                        // Metodo
                        var metodo = new Metodo(this);
                        metodo.Procesar(lineas);
                        this.Metodos.Add(metodo);
                    }
                    break;
                }
            } while (contadorLlaves != 0);
        }
Beispiel #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            Clase  clase  = (Clase)this.listBox2.SelectedItem;
            Metodo metodo = (Metodo)this.listBox1.SelectedItem;

            if (clase != null && metodo != null)
            {
                string fileName  = "informe.html";
                string textToAdd =
                    "<html>" +
                    "<head>" +
                    "<style>" +
                    // "body {background-color: #8cb8ff;}" +
                    "h1 {font-weight: bold; text-decoration: underline;}" +
                    "h3 {font-weight: bold;}" +
                    // "p {color: white;}" +
                    "</style>" +
                    "</head>" +
                    "<body>" +
                    "<h1>Archivo: " + clase.Nombre + "</h1>" +
                    "<h1>Metodo: " + metodo.ToString() + "</h1>" +
                    "<h3>Lineas con comentarios:</h3> <p>" + this.lblComentarios.Text + "</p>" +
                    "<h3>Complejidad ciclomatica:</h3> <p>" + this.lblCiclomatica.Text + "</p>" +
                    "<h3>Fan In:</h3> <p>" + this.lblFanIn.Text + "</p>" +
                    "<h3>Fan Out:</h3> <p>" + this.lblFanOut.Text + "</p>" +
                    "<h3>Longitud:</h3> <p>" + this.lblLongitud.Text + "</p>" +
                    "<h3>Volumen:</h3> <p>" + this.lblVolumen.Text + "</p>" +
                    "<h3>Operadores:</h3> <p>" + this.lblOperadores.Text + "</p>" +
                    "</body>" +
                    "</html>";

                using (StreamWriter writer = new StreamWriter(fileName, false))
                {
                    writer.Write(textToAdd);
                }
                System.Diagnostics.Process.Start(fileName);
                // MessageBox.Show("Informe generado correctamente", "Informe");
            }
            else
            {
                MessageBox.Show("Eliga una clase y método primero", "Error");
            }
        }
Beispiel #3
0
        private void cambioMetodoSeleccionado(object sender, EventArgs e)
        {
            Metodo metodo = (Metodo)listBox1.SelectedItem;

            List <Metodo> metodosTotales = new List <Metodo>();

            foreach (Metodo item in listBox1.Items)
            {
                metodosTotales.Add(item);
            }
            //richTextBox1.Clear();
            this.txtCodigo.ResetText();
            if (metodo != null)
            {
                /*for (int i = 0; i < metodo.obtenerCantidadLineas(); i++)
                 *  richTextBox1.AppendText(metodo.obtenerLinea(i) + "\n");*/
                //richTextBox1.AppendText(metodo.ToString());
                this.txtCodigo.Text = metodo.getCodigoToPrint();
            }
            if (metodo != null)
            {
                // Calcular complejidad ciclomática.
                lblCiclomatica.Text = calcularComplejidadCiclomatica(metodo.getLineasMetodo()).ToString();

                // Calcular cantidad de comentarios.
                int lineasDeCodigo      = getCantidadDeLineasNoComentadas(metodo.getLineasMetodo());
                int cantidadComentarios = calcularComentarios(metodo.getLineasMetodo());
                lblComentarios.Text = cantidadComentarios.ToString() +
                                      "/" +
                                      lineasDeCodigo.ToString() +
                                      //metodo.obtenerCantidadLineas().ToString() +
                                      " ( " +
                                      (((float)cantidadComentarios / lineasDeCodigo) * 100).ToString() +
                                      "% )";

                // Calcular Fan In.
                lblFanIn.Text = calcularFanIn(metodo, metodosTotales).ToString();
                // Calcular Fan Out.
                lblFanOut.Text = calcularFanOut(metodo.getLineasMetodo()).ToString();
                // Calcular medidas Halstead.
                MetricaHalstead medidasHalstead = calcularLongitudVolumen(metodo.getLineasMetodo());
                lblLongitud.Text = medidasHalstead.getLongitud().ToString() +
                                   " ( Operadores: " +
                                   medidasHalstead.getCantidadOperadores().ToString() +
                                   " - Operandos: " +
                                   medidasHalstead.getCantidadOperandos() +
                                   " )";
                lblVolumen.Text = medidasHalstead.getVolumen().ToString();
                string operadores = "";
                foreach (string operador in medidasHalstead.getOperadores())
                {
                    if (operador == "&&")
                    {
                        operadores += "&&&&";
                    }
                    else
                    {
                        operadores += operador.ToString();
                    }

                    operadores += " , ";
                }
                lblOperadores.Text = operadores;
            }
        }
Beispiel #4
0
        public int calcularFanIn(Metodo metodoActual, List <Metodo> metodosTotales)
        {
            int fanIn = 0;

            Console.WriteLine("entro fanin");
            bool enComentarioMultilinea = false;

            foreach (Metodo metodo in metodosTotales)
            {
                Console.WriteLine("leo metodo" + metodo.ToString());
                foreach (String linea in metodo.getLineasMetodo())
                {
                    bool lineaContada = false;
                    bool enComillas   = false;

                    for (int i = 0; i < linea.Length - 1; i++)
                    {
                        if (tieneComillas(linea, i))
                        {
                            enComillas = !enComillas;
                        }
                        if (enComillas)
                        {
                            continue;
                        }
                        if (!lineaContada &&
                            !enComillas &&
                            tieneComentario(linea, i))
                        {
                            lineaContada = true;
                            continue;
                        }
                        if (!enComentarioMultilinea &&
                            arrancaComentarioMultilinea(linea, i))
                        {
                            enComentarioMultilinea = true;
                        }
                        if (enComentarioMultilinea && !lineaContada)
                        {
                            lineaContada = true;
                        }
                        if (terminaComentarioMultilinea(linea, i))
                        {
                            enComentarioMultilinea = false;
                        }
                    }

                    //matchDeclaracion = patronDeclaracion.matcher(linea);
                    //matchPalabraReservada = patronesPalabraReservada.matcher(linea);

                    if (!enComentarioMultilinea &&
                        !enComillas)
                    {
                        String[] datos1 = linea.Split(metodoActual.ToString().ToArray());

                        if (linea.Contains(metodoActual.ToString()) && metodo.ToString() != metodoActual.ToString())
                        {
                            fanIn++;
                        }
                    }
                }
            }

            return(fanIn);
        }
Beispiel #5
0
        private List <Metodo> obtenerMetodos(String[] lineasArchivo)
        {
            //string regexp = "^\\s*(public|private|protected|public static){1}\\s+(void|int|double|boolean|float|char|([A-Z]{1}[a-z]*)*){1}\\s+([a-z]*([A-Z]{1}[a-z]*)*)\\s*\\({1}.*";
            string regexp     = "((public|private|protected|static|final|native|synchronized|abstract|transient)+\\s)+[\\$_\\w\\<\\>\\[\\]]*\\s+[\\$_\\w]+\\([^\\)]*\\)?\\s*\\{?[^\\}]*\\}?";
            string ctorRegExp = "(public|protected|private|static|\\s)\\s+(\\w+) *\\([^\\)]*\\) *(\\{?|[^;])";

            Regex p = new Regex(regexp, RegexOptions.IgnoreCase);
            Match m;

            Regex p2 = new Regex(ctorRegExp, RegexOptions.IgnoreCase);
            Match m2;

            List <Metodo> metodos = new List <Metodo>();
            bool          enComentarioMultilinea = false;
            bool          enMetodo                  = false;
            int           cantidadLlaves            = 0;
            int           indiceDelUltimoComentario = 1;
            int           indiceComienzoMetodo      = 0;

            /*String linea : lineasArchivo*/
            for (int j = 0; j < lineasArchivo.Length; j++)
            {
                bool lineaContada = false;
                bool enComillas   = false;


                m  = p.Match(lineasArchivo[j]);
                m2 = p2.Match(lineasArchivo[j]);
                if (m.Success && !enMetodo &&
                    !enComentarioMultilinea &&
                    !enComillas)
                {
                    enMetodo = true;
                    Console.WriteLine("Metodo Encontrado" + lineasArchivo[j]);
                    indiceComienzoMetodo = j;
                }

                /*else if (m2.Success && !enMetodo &&
                 *      !enComentarioMultilinea &&
                 *      !enComillas)
                 * {
                 *  enMetodo = true;
                 *  Console.WriteLine("Metodo Encontrado" + lineasArchivo[j]);
                 *  indiceComienzoMetodo = j;
                 * }*/

                if (enMetodo)
                {
                    for (int i = 0; i < lineasArchivo[j].Length; i++)
                    {
                        if (abreLlave(lineasArchivo[j], i))
                        {
                            cantidadLlaves++;
                        }

                        if (cierraLlave(lineasArchivo[j], i) && cantidadLlaves > 0)
                        {
                            cantidadLlaves--;
                            Console.WriteLine("cuento linea que cierra");
                            if (cantidadLlaves == 0)
                            {
                                String   nombreDelMetodo = "";
                                String[] datos           = lineasArchivo[indiceComienzoMetodo].Split(' ');
                                foreach (string dato in datos)
                                {
                                    if (dato.Contains('(') && nombreDelMetodo == "")
                                    {
                                        nombreDelMetodo = dato.Split('(')[0];
                                    }
                                }
                                if (indiceDelUltimoComentario != 0)
                                {
                                    if (hayJavaDoc(indiceDelUltimoComentario, indiceComienzoMetodo, lineasArchivo))
                                    {
                                        List <String> lineasMetodo = new List <String>();
                                        for (int z = indiceDelUltimoComentario; z <= j + 1; z++)
                                        {
                                            lineasMetodo.Add(lineasArchivo[z]);
                                        }
                                        Metodo aux = new Metodo(lineasMetodo.ToArray(),
                                                                nombreDelMetodo);
                                        metodos.Add(aux);
                                        Console.WriteLine("Creo Metodo " + nombreDelMetodo);
                                        enMetodo       = false;
                                        cantidadLlaves = 0;
                                    }
                                    else
                                    {
                                        List <String> lineasMetodo = new List <String>();
                                        for (int z = indiceComienzoMetodo; z <= j + 1; z++)
                                        {
                                            lineasMetodo.Add(lineasArchivo[z]);
                                        }
                                        Metodo aux = new Metodo(lineasMetodo.ToArray(),
                                                                nombreDelMetodo);

                                        metodos.Add(aux);
                                        Console.WriteLine("Creo Metodo " + nombreDelMetodo);
                                        enMetodo       = false;
                                        cantidadLlaves = 0;
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < lineasArchivo[j].Length - 1; i++)
                    {
                        if (tieneComillas(lineasArchivo[j], i))
                        {
                            enComillas = !enComillas;
                        }

                        if (enComillas)
                        {
                            continue;
                        }

                        if (!lineaContada &&
                            !enComillas &&
                            tieneComentario(lineasArchivo[j], i))
                        {
                            indiceDelUltimoComentario = j;
                            lineaContada = true;
                            continue;
                        }

                        if (!enComentarioMultilinea &&
                            arrancaComentarioMultilinea(lineasArchivo[j], i))
                        {
                            enComentarioMultilinea    = true;
                            indiceDelUltimoComentario = j;
                        }

                        if (enComentarioMultilinea && !lineaContada)
                        {
                            lineaContada = true;
                        }

                        if (terminaComentarioMultilinea(lineasArchivo[j], i))
                        {
                            enComentarioMultilinea = false;
                        }
                    }
                }
            }
            return(metodos);
        }