private ITypeSymbol GetTypeSymbol(SemanticModel semModel, BasePropertyDeclarationSyntax prop, PropertyDetails propDetails) { ITypeSymbol typeSymbol = null; if (propDetails.PropertyType.IsGenericTypeName()) { Logger?.RecordInfo(StringRes.Info_GettingGenericType); if (prop.Type is GenericNameSyntax gns) { typeSymbol = this.GetTypeSymbolWithFallback(gns, semModel, prop.SyntaxTree); } else if (prop.Type is QualifiedNameSyntax qns) { var t = ((GenericNameSyntax)qns.Right).TypeArgumentList.Arguments.First(); typeSymbol = this.GetTypeSymbolWithFallback(t, semModel, prop.SyntaxTree); } else { Logger?.RecordInfo(StringRes.Info_PropertyTypeNotRecognizedAsGeneric.WithParams(propDetails.PropertyType)); } } if (typeSymbol == null) { typeSymbol = this.GetTypeSymbolWithFallback(prop.Type, semModel, prop.SyntaxTree); } if (typeSymbol == null) { Logger?.RecordInfo(StringRes.Info_PropertyCannotBeAnalyzed.WithParams(prop.ToString())); } return(typeSymbol); }