internal ProjectPartialClassCollectionWithCodeAnalysis(LoadedProjectWithCodeAnalysis project)
 {
     abstractClasses = project.Members(document => document.Classes.PartialClasses.AbstractClasses);
     classes         = project.Members(document => document.Classes.PartialClasses.Classes);
     sealedClasses   = project.Members(document => document.Classes.PartialClasses.SealedClasses);
     staticClasses   = project.Members(document => document.Classes.PartialClasses.StaticClasses);
 }
Beispiel #2
0
        private static async Task GenerateVisitorInterface()
        {
            string baseDirectory = Path.GetFullPath(
                Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"..\..\..\.."));
            ProjectWithCodeAnalysis project = await ProjectWithCodeAnalysis.OpenAsync(
                Path.Combine(baseDirectory, @"CSharpDom.CodeAnalysis\CSharpDom.CodeAnalysis.csproj"));

            LoadedProjectWithCodeAnalysis loadedProject = await project.LoadAsync();

            Interface            visitorInterface = new Interface("ICodeAnalysisVisitor");
            IEnumerable <string> classNames       =
                from @class in loadedProject.AllClasses
                let baseClassName = @class.BaseClass?.Name
                                    where baseClassName != null &&
                                    baseClassName.StartsWith("Editable") &&
                                    !baseClassName.Contains("Expression") &&
                                    !baseClassName.Contains("Statement")
                                    let className = @class.Name
                                                    orderby className
                                                    select className;

            foreach (string className in classNames)
            {
                string parameterName = Regex.Replace(className, "WithCodeAnalysis$", "");
                parameterName = parameterName.Substring(0, 1).ToLower() + parameterName.Substring(1);
                InterfaceMethod method = new InterfaceMethod($"Visit{className}")
                {
                    ReturnType = new TypeReference(typeof(void)),
                    Parameters = new Collection <MethodParameter>()
                    {
                        new MethodParameter(parameterName, new TypeReference(className))
                    }
                };
                visitorInterface.Body.Methods.Add(method);
            }

            Console.WriteLine(visitorInterface.ToString());
        }