Beispiel #1
0
 private IProjectContent AddAllAssemblyReferences(CSharpSolution solution, Project msbuildProject, IProjectContent pc)
 {
     foreach (var assemblyFile in ResolveAssemblyReferences(msbuildProject))
     {
         var assembly = solution.LoadAssembly(assemblyFile);
         pc = pc.AddAssemblyReferences(new[] { assembly });
     }
     return(pc);
 }
Beispiel #2
0
        public CSharpProject(CSharpSolution solution, string title, string fileName)
        {
            Files            = new List <CSharpFile>();
            CompilerSettings = new CompilerSettings();
            Solution         = solution;
            Title            = title;
            FileName         = fileName;

            LoadCSharpProject(solution, fileName);
        }
Beispiel #3
0
        public CSharpProject(CSharpSolution solution, string title, string fileName)
        {
            Files = new List<CSharpFile>();
            CompilerSettings = new CompilerSettings();
            Solution = solution;
            Title = title;
            FileName = fileName;

            LoadCSharpProject(solution, fileName);
        }
Beispiel #4
0
        private SDSolution ParseSolution(CSharpSolution solution, ICoreConfigSection sharpDoxConfig, Dictionary<string, string> tokens, bool structured)
        {
            var sdSolution = new SDSolution(solution.SolutionFile);
            var targetFxParser = new SDTargetFxParser();

            _currentProjectIndex = 1;
            _totalProjects = solution.Projects.Count;
            for (var i = 0; i < solution.Projects.Count; i++)
            {
                ExecuteOnStepProgress((int)(((double)i / (double)solution.Projects.Count) * 50) + 20);

                var project = solution.Projects[i];
                var projectFileName = project.FileName;
                var targetFx = targetFxParser.GetTargetFx(projectFileName);

                var sdRepository = sdSolution.GetExistingOrNew(targetFx);
                if (structured)
                {
                    StructureParseNamespaces(project, sdRepository);
                    StructureParseTypes(project, sdRepository);
                }
                else
                {
                    ParseNamespaces(project, sdRepository, sharpDoxConfig, tokens);
                    ParseTypes(project, sdRepository, sharpDoxConfig);

                    // Because of excluding privates, internals and protected members
                    // it is possible, that a namespace has no visible namespaces at all.
                    // It is necessary to remove empty namespaces.
                    RemoveEmptyNamespaces(sdRepository);
                }
                _currentProjectIndex++;
            }

            ExecuteOnStepProgress(80);
            if (!structured)
            {
                var i = 0;
                foreach (var sdRepository in sdSolution.Repositories)
                {
                    ParseMethodCalls(solution, sdRepository);
                    ResolveUses(sdRepository);
                }
            }

            return sdSolution;
        }
Beispiel #5
0
        private void LoadCSharpProject(CSharpSolution solution, string fileName)
        {
            try
            {
                var msbuildProject = LoadAndInitProject(solution, fileName);

                var pc = CreateCSharpProjectContent(fileName);
                pc = AddCompileFilesToProject(msbuildProject, pc);
                pc = AddAllAssemblyReferences(solution, msbuildProject, pc);
                pc = AddAllProjectReferences(msbuildProject, pc);

                ProjectContent = pc;
            }
            catch (InvalidProjectFileException invalidproject)
            {
                Trace.TraceWarning(invalidproject.ToString());
            }
        }
Beispiel #6
0
        private void LoadCSharpProject(CSharpSolution solution, string fileName)
        {
            try
            {
                var msbuildProject = LoadAndInitProject(solution, fileName);

                var pc = CreateCSharpProjectContent(fileName);
                pc = AddCompileFilesToProject(msbuildProject, pc);
                pc = AddAllAssemblyReferences(solution, msbuildProject, pc);
                pc = AddAllProjectReferences(msbuildProject, pc);

                ProjectContent = pc;
            }
            catch (InvalidProjectFileException invalidproject)
            {
                Trace.TraceWarning(invalidproject.ToString());
            }
        }
Beispiel #7
0
        private Project LoadAndInitProject(CSharpSolution solution, string fileName)
        {
            var globalProperties = new Dictionary<string, string>();
            globalProperties.Add("SolutionDir", solution.Directory);

            var msbuildProject = 
                new Project(fileName, globalProperties, null, 
                ProjectCollection.GlobalProjectCollection, ProjectLoadSettings.IgnoreMissingImports);

            AssemblyName = msbuildProject.GetPropertyValue("AssemblyName");
            CompilerSettings.AllowUnsafeBlocks = GetBoolProperty(msbuildProject, "AllowUnsafeBlocks") ?? false;
            CompilerSettings.CheckForOverflow = GetBoolProperty(msbuildProject, "CheckForOverflowUnderflow") ?? false;

            var defineConstants = msbuildProject.GetPropertyValue("DefineConstants");
            foreach (var symbol in defineConstants.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries))
                CompilerSettings.ConditionalSymbols.Add(symbol.Trim());

            return msbuildProject;
        }
Beispiel #8
0
        private Project LoadAndInitProject(CSharpSolution solution, string fileName)
        {
            var globalProperties = new Dictionary <string, string>();

            globalProperties.Add("SolutionDir", solution.Directory);

            var msbuildProject =
                new Project(fileName, globalProperties, null,
                            ProjectCollection.GlobalProjectCollection, ProjectLoadSettings.IgnoreMissingImports);

            AssemblyName = msbuildProject.GetPropertyValue("AssemblyName");
            CompilerSettings.AllowUnsafeBlocks = GetBoolProperty(msbuildProject, "AllowUnsafeBlocks") ?? false;
            CompilerSettings.CheckForOverflow  = GetBoolProperty(msbuildProject, "CheckForOverflowUnderflow") ?? false;

            var defineConstants = msbuildProject.GetPropertyValue("DefineConstants");

            foreach (var symbol in defineConstants.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
            {
                CompilerSettings.ConditionalSymbols.Add(symbol.Trim());
            }

            return(msbuildProject);
        }
Beispiel #9
0
 internal MethodCallParser(SDRepository repository, CSharpSolution solution) : base(repository) 
 {
     _solution = solution;
 }
Beispiel #10
0
        private CSharpSolution LoadSolution(string solutionFile)
        {
            var solution = new CSharpSolution();

            solution.OnLoadingProject += (m) => ExecuteOnStepMessage(string.Format(_parserStrings.ReadingProject, m));
            solution.OnLoadedProject += (t, i) => ExecuteOnStepProgress((int)(((double)i / (double)t) * 20));

            solution.LoadSolution(solutionFile);

            return solution;
        }
Beispiel #11
0
 private void ParseMethodCalls(CSharpSolution solution, SDRepository sdRepository)
 {
     var methodCallParser = new MethodCallParser(sdRepository, solution);
     methodCallParser.OnItemParseStart += (n) => { ExecuteOnStepMessage(_parserStrings.ParsingMethod + ": " + n); };
     methodCallParser.ParseMethodCalls();            
 }
Beispiel #12
0
 private IProjectContent AddAllAssemblyReferences(CSharpSolution solution, Project msbuildProject, IProjectContent pc)
 {
     foreach (var assemblyFile in ResolveAssemblyReferences(msbuildProject))
     {
         var assembly = solution.LoadAssembly(assemblyFile);
         pc = pc.AddAssemblyReferences(new[] { assembly });
     }
     return pc;
 }