Ejemplo n.º 1
0
        //Cuando se encuentra un metodo o una clase pero solo son invocados
        private int ObtenerDatosInvocados(RevisaLinea DatosLinea, string LineaOriginal, string Archivo,
                                          HashSet <string> InventarioCM, List <string> Resultado, int NoLinea, string Ruta,
                                          HashSet <string> Librerias, string Extension, int DependenciaID)
        {
            try
            {
                List <string> Subconjunto;

                if ((LineaOriginal.IndexOf(".class") == -1) && ((LineaOriginal.IndexOf("private") > -1) ||
                                                                (LineaOriginal.IndexOf("public") > -1) || (LineaOriginal.IndexOf("protected") > -1) ||
                                                                (LineaOriginal.IndexOf("final") > -1) ||
                                                                (LineaOriginal.IndexOf("static") > -1) ||
                                                                (LineaOriginal.IndexOf("= new") > -1)))
                {
                    string Linea    = LineaOriginal.Replace(" final", string.Empty);
                    bool   Variable = EsVariable(LineaOriginal, 0);
                    Regex  Regex    = new Regex(@"(private \s\w+\s\w+)|(public \s\w+\s\w+)|(protected \s\w+\s\w+)|(private static\s\w+\s\w+)|(public static\s\w+\s\w+)|(protected static\s\w+\s\w+)|(\w+\s\w+|\w+\<\w+\>\s\w+|\w+\[\]\s\w+)\s*= new");
                    Match  Match    = Regex.Match(Linea);
                    if ((Match.Success) && (!Variable))
                    {
                        string Instancia;
                        string Clase;
                        if (LineaOriginal.IndexOf("= new") > -1)
                        {
                            Linea     = Linea.Substring(0, Linea.IndexOf("= new")).Trim();
                            Instancia = Linea.Split(' ').Last();
                            Clase     = Linea.Split(' ').ElementAt(Linea.Split(' ').Length - 2);
                            Clase     = Clase.Replace("[]", string.Empty);

                            foreach (string Libreria in LibreriasArchivo)
                            {
                                string LibreriaAux = Libreria.Split('.').Length <= 1 ? Libreria : Libreria.Split('.').Last();
                                if (LibreriaAux.Length <= 1)
                                {
                                    LibreriaAux = "No Valida";
                                }
                                Regex = new Regex(@"" + LibreriaAux);
                                Match = Regex.Match(LineaOriginal);

                                if (Match.Success)
                                {
                                    string Espacio = Libreria.Split('.').Length == 1 ? Libreria :
                                                     Libreria.Substring(0, Libreria.Length - Libreria.Split('.').Last().Length - 1);

                                    if (!string.IsNullOrEmpty(Clase) && !string.IsNullOrEmpty(Instancia))
                                    {
                                        Instancias.Add(Clase + "|" + Instancia + "|" + Espacio);
                                    }
                                }
                            }
                        }
                        else
                        {
                            Clase = Match.Value.Split(' ').ElementAt(Match.Value.Split(' ').Count() - 2);
                        }

                        if (string.IsNullOrEmpty(UltimoMetodo))
                        {
                            string[] ClaseLista = ListaClases.ElementAt(ListaClases.Count - 1).Split('|');

                            DatosLinea.TipoPadre = "Clase";
                            DatosLinea.BibPadre  = Archivo;
                            DatosLinea.ObjPadre  = ClaseLista[0];
                        }
                        else
                        {
                            DatosLinea.TipoPadre = "Metodo";
                            DatosLinea.BibPadre  = Archivo;
                            DatosLinea.ObjPadre  = UltimoMetodo;
                        }
                        DatosLinea.TipoHijo = "Clase";
                        DatosLinea.BibHijo  = Clase;
                        DatosLinea.ObjHijo  = Clase;

                        Variable = EsVariable(DatosLinea.ObjHijo, 1);
                        if (!string.IsNullOrEmpty(DatosLinea.ObjHijo) && !Variable)
                        {
                            ++DependenciaID;
                            Resultado.Add(DatosLinea.TipoPadre + "|" + DatosLinea.BibPadre + "|" + DatosLinea.ObjPadre + "|" + DatosLinea.TipoHijo + "|" + DatosLinea.BibHijo + "|" + DatosLinea.ObjHijo + "|" + Ruta + "|" + NoLinea + "|" + Extension + "|" + DependenciaID + "|" + UltimoPadre + "|" + LineaOriginal.Replace("|", string.Empty));
                        }
                    }
                }
                else
                {
                    Regex Regex = new Regex(@"\w+\.\w+");
                    Match Match = Regex.Match(LineaOriginal);

                    if (Match.Success)
                    {
                        //Para C#
                        string ObjetoClase   = Match.Value.Split('.').First();
                        string ObjetoMetodo  = Match.Value.Split('.').Last();
                        string ClaseOriginal = string.Empty;
                        Subconjunto = (from ICM in InventarioCM
                                       where ICM.Split('|').First() == ObjetoClase
                                       select ICM).ToList();
                        //Para Java
                        if (Subconjunto.Count == 0)
                        {
                            string Espacio = string.Empty;
                            foreach (string Instancia in Instancias)
                            {
                                if (ObjetoClase == Instancia.Split('|').ElementAt(1).ToString())
                                {
                                    Espacio       = Instancia.Split('|').Last();
                                    ClaseOriginal = Instancia.Split('|').First();
                                }
                            }
                            if (!string.IsNullOrEmpty(Espacio))
                            {
                                Subconjunto = (from ICM in InventarioCM
                                               where ICM.Split('|').First() == Espacio && ICM.Split('|').ElementAt(2) == "Metodo"
                                               select ICM).ToList();
                            }
                        }
                        bool Excepcion = EsExcepcion(LineaOriginal);
                        foreach (string Item in Subconjunto)
                        {
                            Regex = new Regex(@"([^/\\\w<>{}-]|^)" + Item.Split('|').ElementAt(1) + @"([^/\\\w<>{}-]|$)");
                            Match = Regex.Match(LineaOriginal);

                            if ((Match.Success) && (!Excepcion))
                            {
                                if (ListaClases.Count > 0 && Item.Split('|').ElementAt(1) == ObjetoMetodo)
                                {
                                    string[] Clases = ListaClases.ElementAt(ListaClases.Count - 1).Split('|');

                                    DatosLinea.TipoPadre = "Clase";
                                    DatosLinea.BibPadre  = Archivo;
                                    DatosLinea.ObjPadre  = Clases[0];
                                    DatosLinea.TipoHijo  = Item.Split('|').ElementAt(2);
                                    DatosLinea.BibHijo   = string.IsNullOrEmpty(ClaseOriginal) ? Item.Split('|').ElementAt(0) : ClaseOriginal;
                                    DatosLinea.ObjHijo   = Item.Split('|').ElementAt(1);

                                    bool Variable = EsVariable(DatosLinea.ObjHijo, 1);
                                    if (!string.IsNullOrEmpty(DatosLinea.ObjHijo) && !Variable)
                                    {
                                        ++DependenciaID;
                                        Resultado.Add(DatosLinea.TipoPadre + "|" + DatosLinea.BibPadre + "|" + DatosLinea.ObjPadre + "|" + DatosLinea.TipoHijo + "|" + DatosLinea.BibHijo + "|" + DatosLinea.ObjHijo + "|" + Ruta + "|" + NoLinea + "|" + Extension + "|" + DependenciaID + "|" + UltimoPadre + "|" + LineaOriginal.Replace("|", string.Empty));
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        if (Librerias.Count > 0)
                        {
                            foreach (string Libreria in Librerias)
                            {
                                string LibreriaAux = Libreria.Split('.').Length <= 1 ? Libreria : Libreria.Split('.').Last();
                                if (LibreriaAux.Length <= 1)
                                {
                                    LibreriaAux = "No Valida";
                                }
                                Regex = new Regex(@"" + LibreriaAux);
                                Match = Regex.Match(LineaOriginal);

                                if (Match.Success)
                                {
                                    string Espacio = Libreria.Split('.').Length == 1 ? Libreria :
                                                     Libreria.Substring(0, Libreria.Length - Libreria.Split('.').Last().Length - 1);
                                    Regex = new Regex(@"" + Match.Value + @"\s*\w+");
                                    Match = Regex.Match(LineaOriginal);
                                    if (Match.Success && Match.Value.Split(' ').Length > 1)
                                    {
                                        string Instancia      = Match.Value.Split(' ').Last();
                                        string ClaseInstancia = Match.Value.Split(' ').First();

                                        if (!string.IsNullOrEmpty(ClaseInstancia) && !string.IsNullOrEmpty(Instancia))
                                        {
                                            Instancias.Add(ClaseInstancia + "|" + Instancia + "|" + Espacio);
                                        }

                                        if (string.IsNullOrEmpty(UltimoMetodo))
                                        {
                                            string[] ClaseLista = ListaClases.ElementAt(ListaClases.Count - 1).Split('|');

                                            DatosLinea.TipoPadre = "Clase";
                                            DatosLinea.BibPadre  = Archivo;
                                            DatosLinea.ObjPadre  = ClaseLista[0];
                                        }
                                        else
                                        {
                                            DatosLinea.TipoPadre = "Metodo";
                                            DatosLinea.BibPadre  = Archivo;
                                            DatosLinea.ObjPadre  = UltimoMetodo;
                                        }
                                        DatosLinea.TipoHijo = "Clase";
                                        DatosLinea.BibHijo  = ClaseInstancia;
                                        DatosLinea.ObjHijo  = ClaseInstancia;

                                        bool Variable = EsVariable(DatosLinea.ObjHijo, 1);
                                        if (!string.IsNullOrEmpty(DatosLinea.ObjHijo) && !Variable)
                                        {
                                            ++DependenciaID;
                                            Resultado.Add(DatosLinea.TipoPadre + "|" + DatosLinea.BibPadre + "|" + DatosLinea.ObjPadre + "|" + DatosLinea.TipoHijo + "|" + DatosLinea.BibHijo + "|" + DatosLinea.ObjHijo + "|" + Ruta + "|" + NoLinea + "|" + Extension + "|" + DependenciaID + "|" + UltimoPadre + "|" + LineaOriginal.Replace("|", string.Empty));
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            return(DependenciaID);
        }