I have a c# solution that contains some class files. With Roslyn I am able to parse a solution to obtain a list of projects within the solution. From there, I can get the documents in each project. Then, I can get a list of every ClassDeclarationSyntax. This is the starting point.
        foreach (var v in _solution.Projects)
        {
            //Console.WriteLine(v.Name.ToString());
            foreach (var document in v.Documents)
            {
                SemanticModel model = document.GetSemanticModelAsync().Result;
                var classes = document.GetSyntaxRootAsync().Result.DescendantNodes().OfType<ClassDeclarationSyntax>();
                foreach(var cl in classes)
                {
// Starting around this point...
                    ClassDiagramClass cls = new ClassDiagramClass(cl, model);
                    diagramClasses.Add(cls);
                }
            }
        }
From these objects I want to be able to get the Namespace of the variables used within each class. See file 1 has a method "getBar()" that returns an object of type B.Bar. The namespace is important because it tells you which type of Bar is really being returned.
File1.cs
using B;
namespace A {
    public class foo(){
        public Bar getBar(){ return new Bar();}
    }
}
File2.cs
namespace B {
    public class Bar(){
    }
}
File3.cs
namespace C {
    public class Bar(){
    }
}
The issue is that I am not sure how to get to the Namespace value from where I am in the code right now. Any ideas?
The namespace is semantic information, so you need to get it from the semantic model:
model.GetTypeInfo(cl).Type.ContainingNamespace
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With