/// <summary> /// Guesses the base type kind basing on name. /// </summary> /// <param name="baseType"></param> /// <returns></returns> public static Roslyn.TypeKind GuessBaseTypeKindFromName(BaseTypeSyntax baseType) { var helper = new BaseTypeReference(baseType); var name = helper.Name; var firstLetter = name[0]; if (firstLetter == 'I') { return Roslyn.TypeKind.Interface; } return Roslyn.TypeKind.Class; }
/// <summary> /// Used for assessing whether <see cref="SeparateClassAndInterfacesBasedOnNames"/> can be used for separating class and interfaces. /// </summary> /// <param name="baseTypes"></param> /// <returns></returns> public static bool CanSeparateClassAndInterfacesBasedOnNames(IEnumerable<BaseTypeSyntax> baseTypes) { int nameStartsWithIBaseTypes = 0; int nameDoesNotStartWithIBaseTypes = 0; foreach (var baseType in baseTypes) { var helper = new BaseTypeReference(baseType); var name = helper.Name; var firstLetter = name[0]; if (firstLetter == 'I') { nameStartsWithIBaseTypes++; } else { nameDoesNotStartWithIBaseTypes++; } } return nameDoesNotStartWithIBaseTypes <= 1; }
/// <summary> /// Initializes a new instance of the <see cref="ClassDeclaration"/> class. /// </summary> /// <param name="classDeclarationNode"></param> /// <param name="semanticModel"></param> public ClassDeclaration(ClassDeclarationSyntax classDeclarationNode, SemanticModel semanticModel) : base(classDeclarationNode, semanticModel) { this.interfaces = null; this.baseClass = null; }
/// <summary> /// Initializes a new instance of the <see cref="ClassDeclaration"/> class. /// </summary> /// <param name="classDeclarationNode"></param> /// <param name="semanticModel"></param> public ClassDeclaration(ClassDeclarationSyntax classDeclarationNode, SemanticModel semanticModel) : base(classDeclarationNode, semanticModel) { this.interfaces = null; this.baseClass = null; }
/// <summary> /// Initializes a new instance of the <see cref="ClassDeclaration"/> class. /// </summary> /// <param name="classDeclarationNode"></param> public ClassDeclaration(ClassDeclarationSyntax classDeclarationNode) : base(classDeclarationNode) { this.interfaces = null; this.baseClass = null; }
/// <summary> /// Guesses the base type kind basing on the name of the base type. /// </summary> /// <param name="baseTypes"></param> /// <returns></returns> /// <remarks> /// /// </remarks> public static IEnumerable<BaseTypeInfo> SeparateClassAndInterfacesBasedOnNames(IEnumerable<BaseTypeSyntax> baseTypes) { if (!CanSeparateClassAndInterfacesBasedOnNames(baseTypes)) { throw new ArgumentException(nameof(baseTypes), "The provided collection of base types cannot be evaluated via this approach"); } var infos = new List<BaseTypeInfo>(); foreach (var baseType in baseTypes) { var helper = new BaseTypeReference(baseType); var name = helper.Name; var firstLetter = name[0]; if (firstLetter == 'I') { infos.Add(new BaseTypeInfo() { Node = baseType, Kind = Roslyn.TypeKind.Interface }); } else { infos.Add(new BaseTypeInfo() { Node = baseType, Kind = Roslyn.TypeKind.Class }); } } return infos; }
/// <summary> /// Initializes a new instance of the <see cref="ClassDeclaration"/> class. /// </summary> /// <param name="classDeclarationNode"></param> public ClassDeclaration(ClassDeclarationSyntax classDeclarationNode) : base(classDeclarationNode) { this.interfaces = null; this.baseClass = null; }
private static void TestRetrieveTypeName(BaseTypeSyntax baseTypeNode, string expected) { Assert.IsNotNull(baseTypeNode, "Found node should be of type `{0}`!", typeof(BaseTypeSyntax).Name); BaseTypeReference baseTypeReference = new BaseTypeReference(baseTypeNode); string name = baseTypeReference.Name; Assert.IsNotNull(name, "Type name should not be null!"); Assert.AreNotEqual(string.Empty, name, "Type name should not be empty!"); Assert.AreEqual(expected, name, "Type name is not the one in source!"); }