Exemplo n.º 1
0
 private void HandleInheritance(CSharpClassModel model, INamedTypeSymbol classSymbol)
 {
     if (classSymbol.BaseType != null && classSymbol.BaseType.ContainingAssembly.Name != "mscorlib")
     {
         model.BaseClass = classSymbol.BaseType.Name;
     }
 }
Exemplo n.º 2
0
 public TypeScriptClassModel ConvertClass(CSharpClassModel classModel)
 {
     return(new TypeScriptClassModel()
     {
         Name = classModel.Name,
         BaseClass = classModel.BaseClass,
         IsGeneric = classModel.IsGeneric,
         TypeParameters = classModel.TypeParameters.Select(tp => new TypeScriptTypeParameterModel()
         {
             Name = tp.Name,
         }).ToList(),
         Imports = classModel.Dependencies.Select(d => new TypeScriptImportModel()
         {
             Name = d.Name,
             FilePath = "",
             DependencyKind = d.DependencyKind
         }).ToList(),
         Properties = classModel.Properties.Select(p => new TypeScriptPropertyModel()
         {
             Name = p.Name,
             IsOptional = p.Type.IsNullable,
             Type = typeConverter.ConvertType(p.Type)
         }).ToList()
     });
 }
Exemplo n.º 3
0
        private void HandleDependencies(CSharpClassModel model, INamedTypeSymbol classSymbol)
        {
            var depService   = new DependencyService();
            var dependencies = depService.GetTypeDependencies(classSymbol);

            foreach (var dep in dependencies)
            {
                model.Dependencies.Add(new CSharpDependencyModel()
                {
                    Name           = dep.Name,
                    Namespace      = dep.ContainingNamespace.ToString(),
                    DependencyKind = dep.TypeKind == TypeKind.Class ? DependencyKind.Model : DependencyKind.Enum
                });
            }
        }
Exemplo n.º 4
0
        private void HandleGenerics(CSharpClassModel model, INamedTypeSymbol classSymbol)
        {
            if (classSymbol.IsGenericType && !classSymbol.TypeParameters.IsDefaultOrEmpty)
            {
                model.IsGeneric = true;

                foreach (var typeParameter in classSymbol.TypeParameters)
                {
                    model.TypeParameters.Add(new CSharpTypeParameterModel()
                    {
                        Name = typeParameter.Name
                    });
                }
            }
        }
Exemplo n.º 5
0
        public CSharpClassModel AnalyzeClassSymbol(INamedTypeSymbol classSymbol)
        {
            var classModel = new CSharpClassModel()
            {
                Name = classSymbol.Name
            };

            var members = classSymbol.GetMembers().ToList();

            HandleInheritance(classModel, classSymbol);
            HandleGenerics(classModel, classSymbol);
            HandleDependencies(classModel, classSymbol);

            var properties = members.Where(m => m.Kind == SymbolKind.Property).ToList();

            foreach (var property in properties)
            {
                var propertySymbol = property as IPropertySymbol;

                // for generic types we want to generate the interface instead of the specific, substituted property types
                if (!propertySymbol.OriginalDefinition.Equals(propertySymbol))
                {
                    propertySymbol = propertySymbol.OriginalDefinition;
                }

                var propertyModel = new CSharpPropertyModel()
                {
                    Name = propertySymbol.Name,
                    Type = _typeAnalyzer.AnalyzeType(propertySymbol.Type)
                };

                classModel.Properties.Add(propertyModel);
            }

            return(classModel);
        }