コード例 #1
0
        private TypeVertex GetVertex(TypeReference tref, string className, DetermineClassDeps dcd)
        {
            TypeVertex V;

            if (dcd.IsExternalType(tref))
            {
                className = DetermineClassDeps.AssemblyNameofType(tref);
            }
            if (classMap.ContainsKey(className))
            {
                V = classMap[className];
            }
            else
            {
                V         = (TypeVertex)this.AddVertex();
                V.Name    = className;
                V.TypeRef = tref;
                if (dcd.IsExternalType(tref))
                {
                    V.ImutableExternalType = true;
                }
                classMap[className] = V;
            }
            return(V);
        }
コード例 #2
0
        public void LoadClassDependencies(DetermineClassDeps dcd, bool treatExternalTypesAsSingleImutable)
        {
            foreach (TypeDefinition tdef in dcd.ClassDependencies.Keys)
            {
                string className = tdef.FullName;
                foreach (UsedClass uc in dcd.ClassDependencies[tdef])
                {
                    string refclassName = uc.Type.FullName;
                    if (!String.IsNullOrEmpty(_examininationNSN))
                    {
                        if (!
                            (
                                (tdef.FullName.StartsWith(_examininationNSP) || tdef.FullName.StartsWith(_examininationNSN)) &&
                                (uc.Type.FullName.StartsWith(_examininationNSN) || uc.Type.FullName.StartsWith(_examininationNSP))
                            ))
                        {
                            continue;
                        }
                    }

                    TypeVertex usingVertex = GetVertex(tdef, className, dcd);
                    TypeVertex refVertex   = GetVertex(uc.Type, refclassName, dcd);

                    if (AllowParallel || !this.ContainsEdge(usingVertex, refVertex))
                    {
                        NamedEdge edge = (NamedEdge)this.AddEdge(usingVertex, refVertex);
                        edge.Name = uc.Use.ToString();
                    }
                }
            }
        }
コード例 #3
0
ファイル: TestACA.cs プロジェクト: ScottWeinstein/ILUnMerge
 public void Setup()
 {
     dcd = new ACATool.DetermineClassDeps();
     dcd.AssemblyFile = this.GetType().Assembly.Location;
         //@"C:\dev\N\play\ACATool\TestAssem\bin\Debug\TestAssem.dll";
     dcd.GetAllTypes();
 }
コード例 #4
0
        private void WriteAssemRefsItemGroup(XmlTextWriter xproj, CondensedVertex va)
        {
            xproj.WriteComment("Assembly Refs");
            xproj.WriteStartElement("ItemGroup");
            foreach (CondensedVertex projRef in Graph.AdjacentVertices(va))
            {
                if (projRef.ImutableExternalType)
                {
                    xproj.WriteStartElement("Reference");
                    string aRefShortName = "";

                    string aRefFQN = DetermineClassDeps.AssemblyNameofType(projRef.ContainedTypes[0]);


                    if (aRefFQN.StartsWith("mscorlib"))
                    {
                        aRefFQN = "System,";
                    }

                    int idx = aRefFQN.IndexOf(",");
                    if (idx > 0)
                    {
                        aRefShortName = aRefFQN.Substring(0, idx);
                    }

                    if (aRefFQN.StartsWith("System"))
                    {
                        xproj.WriteAttributeString("Include", aRefShortName);
                    }
                    else
                    {
                        xproj.WriteAttributeString("Include", aRefFQN);
                        string[] exts = new string[2] {
                            ".dll", ".exe"
                        };
                        foreach (string ext in exts)
                        {
                            string hintPath = Path.Combine(Path.GetDirectoryName(AssemblyFileName), aRefShortName) + ext;
                            if (File.Exists(hintPath))
                            {
                                xproj.WriteElementString("SpecificVersion", false.ToString());
                                //todo - manage directories better
                                xproj.WriteElementString("HintPath", Path.Combine("..", hintPath));
                                break;
                            }
                        }
                    }
                    xproj.WriteEndElement();
                }
            }
            xproj.WriteEndElement();
        }
コード例 #5
0
        public void Execute()
        {
            DetermineClassDeps  dcd = new DetermineClassDeps();
            TypeDependencyGraph tdg = new TypeDependencyGraph(false);

            dcd.AssemblyFile      = AssemblyFileName;
            dcd.IgnoreOutsideRefs = false;
            dcd.Execute();
            tdg.LoadClassDependencies(dcd, true);
            this._graph = tdg.CondenseGraph();

            WritePDBasXML pdbxmlWritterTask = new WritePDBasXML();

            pdbxmlWritterTask.AssemblyName = new TaskItem(this.AssemblyFileName);

            if (pdbxmlWritterTask.Execute())
            {
                this._pDBDataFile = pdbxmlWritterTask.PDBAsXmlFile.ItemSpec;
                pdbXPathDoc       = new XPathDocument(PDBDataFile);
                pdbNav            = pdbXPathDoc.CreateNavigator();
            }



            Directory.CreateDirectory(OutputDirectory);
            foreach (CondensedVertex va in Graph.Vertices)
            {
                if (va.ImutableExternalType)
                {
                    continue;
                }
                va.AssemblyName = GetAssemblyName(va);
                if (va.AssemblyName.StartsWith("<"))
                {
                    continue;
                }

                va.AssemblyGUID = Guid.NewGuid();
                va.ProjectFile  = va.AssemblyName + ".csproj"; // );//Path.Combine(OutputDirectory,
            }

            foreach (CondensedVertex vassem in Graph.Vertices)
            {
                CreateProjectFile(vassem);
            }

            CreateSolutionFile();
        }
コード例 #6
0
        public void Execute()
        {
            DetermineClassDeps dcd = new DetermineClassDeps();
            TypeDependencyGraph tdg = new TypeDependencyGraph(false);
            dcd.AssemblyFile = AssemblyFileName;
            dcd.IgnoreOutsideRefs = false;
            dcd.Execute();
            tdg.LoadClassDependencies(dcd, true);
            this._graph = tdg.CondenseGraph();

            WritePDBasXML pdbxmlWritterTask = new WritePDBasXML();
            pdbxmlWritterTask.AssemblyName = new TaskItem(this.AssemblyFileName);

            if (pdbxmlWritterTask.Execute())
            {
                this._pDBDataFile = pdbxmlWritterTask.PDBAsXmlFile.ItemSpec;
                pdbXPathDoc = new XPathDocument(PDBDataFile);
                pdbNav = pdbXPathDoc.CreateNavigator();
            }

            Directory.CreateDirectory(OutputDirectory);
            foreach (CondensedVertex va in Graph.Vertices)
            {
                if (va.ImutableExternalType) continue;
                va.AssemblyName =  GetAssemblyName(va);
                if (va.AssemblyName.StartsWith("<"))
                    continue;

                va.AssemblyGUID = Guid.NewGuid();
                va.ProjectFile = va.AssemblyName + ".csproj"; // );//Path.Combine(OutputDirectory,
            }

            foreach (CondensedVertex vassem in Graph.Vertices)
            {
                CreateProjectFile(vassem);
            }

            CreateSolutionFile();
        }
コード例 #7
0
        public void LoadClassDependencies(DetermineClassDeps dcd,bool treatExternalTypesAsSingleImutable)
        {
            foreach (TypeDefinition tdef in dcd.ClassDependencies.Keys)
            {
                string className = tdef.FullName;
                foreach (UsedClass uc in dcd.ClassDependencies[tdef])
                {
                    string refclassName = uc.Type.FullName;
                    if (!String.IsNullOrEmpty(_examininationNSN))
                    {
                        if (!
                            (
                            (tdef.FullName.StartsWith(_examininationNSP) || tdef.FullName.StartsWith(_examininationNSN)) &&
                            (uc.Type.FullName.StartsWith(_examininationNSN) || uc.Type.FullName.StartsWith(_examininationNSP))
                            ))
                            continue;
                    }

                    TypeVertex usingVertex = GetVertex(tdef, className,dcd);
                    TypeVertex refVertex = GetVertex(uc.Type, refclassName,dcd);

                    if (AllowParallel || !this.ContainsEdge(usingVertex, refVertex))
                    {
                        NamedEdge edge = (NamedEdge)this.AddEdge(usingVertex, refVertex);
                        edge.Name = uc.Use.ToString();
                    }
                }
            }
        }
コード例 #8
0
 private TypeVertex GetVertex(TypeReference tref, string className,DetermineClassDeps dcd)
 {
     TypeVertex V;
     if (dcd.IsExternalType(tref))
         className = DetermineClassDeps.AssemblyNameofType(tref);
     if (classMap.ContainsKey(className))
     {
         V = classMap[className];
     }
     else
     {
         V = (TypeVertex)this.AddVertex();
         V.Name = className;
         V.TypeRef = tref;
         if (dcd.IsExternalType(tref))
             V.ImutableExternalType = true;
         classMap[className] = V;
     }
     return V;
 }