/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/VisualBasicTest/Semantics/SpeculationAnalyzerTests.vb
151 строка
5 KB
Tomáš Matoušek
Refactoring of extension methods in source packages (#78620) - take 2 (#78894)
26 июн 2025, 18:42
Не верифицирован
26 июн 2025, 18:42
05fc006
Код
Авторство
О чём код?
' 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.IO Imports System.Threading Imports Microsoft.CodeAnalysis.Collections Imports Microsoft.CodeAnalysis.Editor.UnitTests.Semantics Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Imports Microsoft.CodeAnalysis.VisualBasic.Utilities Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Semantics Public Class SpeculationAnalyzerTests Inherits SpeculationAnalyzerTestsBase <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/672396")> Public Sub SpeculationAnalyzerExtensionMethodExplicitInvocation() ' We consider a change here to be a change in semantics as an instance call became a static call. In ' practice this is fine as the only thing that makes this change i complexification, and we don't test for ' semantics changed after that as the purpose of complexification is to put us in a safe place to make ' changes that won't break semantics. Test(<Code> Module Oombr <System.Runtime.CompilerServices.Extension> Public Sub Vain(arg As Integer) End Sub Sub Main() Call [|5.Vain()|] End Sub End Module </Code>.Value, "Vain(5)", semanticChanges:=True) End Sub <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/28412")> Public Sub SpeculationAnalyzerIndexerPropertyWithRedundantCast() Test(<Code> Class Indexer Default Public ReadOnly Property Item(ByVal x As Integer) As Integer Get Return x End Get End Property End Class Class A Public ReadOnly Property Foo As Indexer End Class Class B Inherits A End Class Class Program Sub Main() Dim b As B = New B() Dim y As Integer = [|DirectCast(b, A)|].Foo(2) End Sub End Class </Code>.Value, "b", False) End Sub <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/28412")> Public Sub SpeculationAnalyzerIndexerPropertyWithRequiredCast() Test(<Code> Class Indexer Default Public ReadOnly Property Item(ByVal x As Integer) As Integer Get Return x End Get End Property End Class Class A Public ReadOnly Property Foo As Indexer End Class Class B Inherits A Public Shadows ReadOnly Property Foo As Indexer End Class Class Program Sub Main() Dim b As B = New B() Dim y As Integer = [|DirectCast(b, A)|].Foo(2) End Sub End Class </Code>.Value, "b", True) End Sub <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/28412")> Public Sub SpeculationAnalyzerDelegatePropertyWithRedundantCast() Test(<Code> Public Delegate Sub MyDelegate() Class A Public ReadOnly Property Foo As MyDelegate End Class Class B Inherits A End Class Class Program Sub Main() Dim b As B = New B() [|DirectCast(b, A)|].Foo.Invoke() End Sub End Class </Code>.Value, "b", False) End Sub <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/28412")> Public Sub SpeculationAnalyzerDelegatePropertyWithRequiredCast() Test(<Code> Public Delegate Sub MyDelegate() Class A Public ReadOnly Property Foo As MyDelegate End Class Class B Inherits A Public Shadows ReadOnly Property Foo As MyDelegate End Class Class Program Sub Main() Dim b As B = New B() [|DirectCast(b, A)|].Foo.Invoke() End Sub End Class </Code>.Value, "b", True) End Sub Protected Overrides Function Parse(text As String) As SyntaxTree Return SyntaxFactory.ParseSyntaxTree(text) End Function Protected Overrides Function IsExpressionNode(node As SyntaxNode) As Boolean Return TypeOf node Is ExpressionSyntax End Function Protected Overrides Function CreateCompilation(tree As SyntaxTree) As Compilation Return VisualBasicCompilation.Create( CompilationName, {DirectCast(tree, VisualBasicSyntaxTree)}, References, TestOptions.ReleaseDll.WithSpecificDiagnosticOptions({KeyValuePair.Create("BC0219", ReportDiagnostic.Suppress)})) End Function Protected Overrides Function CompilationSucceeded(compilation As Compilation, temporaryStream As Stream) As Boolean Dim langCompilation = DirectCast(compilation, VisualBasicCompilation) Return Not langCompilation.GetDiagnostics().Any() AndAlso Not langCompilation.Emit(temporaryStream).Diagnostics.Any() End Function Protected Overrides Function ReplacementChangesSemantics(initialNode As SyntaxNode, replacementNode As SyntaxNode, initialModel As SemanticModel) As Boolean Return New SpeculationAnalyzer(DirectCast(initialNode, ExpressionSyntax), DirectCast(replacementNode, ExpressionSyntax), initialModel, CancellationToken.None).ReplacementChangesSemantics() End Function End Class End Namespace