/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Extensions/VariableDeclaratorSyntaxExtensions.vb
66 строк
3 KB
Manish Vasani
Remove unused usings reported on command line build, but not in the IDE
07 апр 2020, 23:03
07 апр 2020, 23:03
0ed2920
Код
Авторство
О чём код?
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. Imports System.Runtime.CompilerServices Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions Friend Module VariableDeclaratorSyntaxExtensions <Extension()> Public Function HasInitializer(variableDeclarator As VariableDeclaratorSyntax) As Boolean Return variableDeclarator.Initializer IsNot Nothing OrElse (variableDeclarator.AsClause IsNot Nothing AndAlso TypeOf variableDeclarator.AsClause Is AsNewClauseSyntax) End Function <Extension()> Public Function GetInitializer(variableDeclarator As VariableDeclaratorSyntax) As ExpressionSyntax If variableDeclarator.Initializer IsNot Nothing Then Return variableDeclarator.Initializer.Value ElseIf variableDeclarator.AsClause IsNot Nothing AndAlso TypeOf variableDeclarator.AsClause Is AsNewClauseSyntax Then Return DirectCast(variableDeclarator.AsClause, AsNewClauseSyntax).NewExpression End If Return Nothing End Function <Extension()> Public Function Type(variableDeclarator As VariableDeclaratorSyntax, semanticModel As SemanticModel) As ITypeSymbol If TypeOf variableDeclarator.AsClause Is AsNewClauseSyntax Then Dim asNewType = DirectCast(variableDeclarator.AsClause, AsNewClauseSyntax).NewExpression.Type() If asNewType IsNot Nothing Then Return TryCast(semanticModel.GetSymbolInfo(asNewType).Symbol, ITypeSymbol) End If Else ' In the case that the variable declarator doesn't have an As New clause, it should ' only have a single name. Dim name = variableDeclarator.Names.Single() Dim localSymbol = TryCast(semanticModel.GetDeclaredSymbol(name), ILocalSymbol) Return localSymbol.Type End If Return Nothing End Function <Extension()> Public Function IsTypeInferred(variableDeclarator As VariableDeclaratorSyntax, semanticModel As SemanticModel) As Boolean If Not semanticModel.OptionInfer OrElse variableDeclarator.AsClause IsNot Nothing Then Return False End If If variableDeclarator.IsParentKind(SyntaxKind.FieldDeclaration) AndAlso Not DirectCast(variableDeclarator.Parent, FieldDeclarationSyntax).Modifiers.Any(SyntaxKind.ConstKeyword) Then Return False End If Dim initializer = variableDeclarator.GetInitializer() If initializer Is Nothing OrElse initializer.IsMissing Then Return False End If Return True End Function End Module End Namespace