Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge release/dev16.6-preview1 to release/dev16.6-preview1-vs-deps #40908

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions eng/Versions.props
Expand Up @@ -6,9 +6,9 @@
-->
<PropertyGroup>
<MajorVersion>3</MajorVersion>
<MinorVersion>5</MinorVersion>
<MinorVersion>6</MinorVersion>
<PatchVersion>0</PatchVersion>
<PreReleaseVersionLabel>beta3</PreReleaseVersionLabel>
<PreReleaseVersionLabel>beta1</PreReleaseVersionLabel>
<VersionPrefix>$(MajorVersion).$(MinorVersion).$(PatchVersion)</VersionPrefix>
<SemanticVersioningV1>true</SemanticVersioningV1>
<!--
Expand Down
Expand Up @@ -1129,7 +1129,12 @@ internal void GetUnaliasedReferencedAssemblies(ArrayBuilder<AssemblySymbol> asse

private protected override MetadataReference? CommonGetMetadataReference(IAssemblySymbol assemblySymbol)
{
return GetMetadataReference(assemblySymbol.EnsureCSharpSymbolOrNull(nameof(assemblySymbol)));
if (assemblySymbol is Symbols.PublicModel.AssemblySymbol { UnderlyingAssemblySymbol: var underlyingSymbol })
{
return GetMetadataReference(underlyingSymbol);
}

return null;
}

internal MetadataReference? GetMetadataReference(AssemblySymbol? assemblySymbol)
Expand Down
Expand Up @@ -2267,6 +2267,20 @@ public void GetMetadataReferenceAPITest()
Assert.NotNull(reference2);
}

[Fact]
[WorkItem(40466, "https://github.com/dotnet/roslyn/issues/40466")]
public void GetMetadataReference_VisualBasicSymbols()
{
var comp = CreateCompilation("");

var vbComp = CreateVisualBasicCompilation("", referencedAssemblies: TargetFrameworkUtil.GetReferences(TargetFramework.Standard));
var assembly = (IAssemblySymbol)vbComp.GetBoundReferenceManager().GetReferencedAssemblies().First().Value;

Assert.Null(comp.GetMetadataReference(assembly));
Assert.Null(comp.GetMetadataReference(vbComp.Assembly));
Assert.Null(comp.GetMetadataReference((IAssemblySymbol)null));
}

[Fact]
public void ConsistentParseOptions()
{
Expand Down
Expand Up @@ -1232,7 +1232,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function

Private Protected Overrides Function CommonGetMetadataReference(assemblySymbol As IAssemblySymbol) As MetadataReference
Return GetMetadataReference(assemblySymbol.EnsureVbSymbolOrNothing(Of AssemblySymbol)(NameOf(assemblySymbol)))
Dim symbol = TryCast(assemblySymbol, AssemblySymbol)
If symbol IsNot Nothing Then
Return GetMetadataReference(symbol)
End If

Return Nothing
End Function

Public Overrides ReadOnly Property ReferencedAssemblyNames As IEnumerable(Of AssemblyIdentity)
Expand Down
Expand Up @@ -2257,6 +2257,19 @@ End Class
Assert.NotNull(reference2)
End Sub

<WorkItem(40466, "https://github.com/dotnet/roslyn/issues/40466")>
<Fact>
Public Sub GetMetadataReference_CSharpSymbols()
Dim comp As Compilation = CreateCompilation("")

Dim csComp = CreateCSharpCompilation("", referencedAssemblies:=TargetFrameworkUtil.GetReferences(TargetFramework.Standard))
Dim assembly = csComp.GetBoundReferenceManager().GetReferencedAssemblies().First().Value

Assert.Null(comp.GetMetadataReference(DirectCast(assembly.GetISymbol(), IAssemblySymbol)))
Assert.Null(comp.GetMetadataReference(csComp.Assembly))
Assert.Null(comp.GetMetadataReference(Nothing))
End Sub


<Fact()>
Public Sub EqualityOfMergedNamespaces()
Expand Down
Expand Up @@ -13,6 +13,7 @@
using Microsoft.CodeAnalysis.LanguageServer;
using Microsoft.VisualStudio.LanguageServer.Client;
using Microsoft.VisualStudio.LanguageServer.Protocol;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using StreamJsonRpc;

Expand Down Expand Up @@ -52,11 +53,27 @@ internal class InProcLanguageServer
[JsonRpcMethod(Methods.InitializeName)]
public Task<InitializeResult> Initialize(JToken input, CancellationToken cancellationToken)
{
// The VS LSP protocol package changed the type of 'tagSupport' from bool to an object.
// Our version of the LSP protocol package is older and assumes that the type is bool, so deserialization fails.
// Since we don't really read this field, just no-op the error until we can update our package references.
// https://github.com/dotnet/roslyn/issues/40829 tracks updating this.
var settings = new JsonSerializerSettings
{
Error = (sender, args) =>
{
if (object.Equals(args.ErrorContext.Member, "tagSupport") && args.ErrorContext.OriginalObject.GetType() == typeof(PublishDiagnosticsSetting))
{
args.ErrorContext.Handled = true;
}
}
};
var serializer = JsonSerializer.Create(settings);

// InitializeParams only references ClientCapabilities, but the VS LSP client
// sends additional VS specific capabilities, so directly deserialize them into the VSClientCapabilities
// to avoid losing them.
_clientCapabilities = input["capabilities"].ToObject<VSClientCapabilities>();
return _protocol.InitializeAsync(_workspace.CurrentSolution, input.ToObject<InitializeParams>(), _clientCapabilities, cancellationToken);
_clientCapabilities = input["capabilities"].ToObject<VSClientCapabilities>(serializer);
return _protocol.InitializeAsync(_workspace.CurrentSolution, input.ToObject<InitializeParams>(serializer), _clientCapabilities, cancellationToken);
}

[JsonRpcMethod(Methods.InitializedName)]
Expand Down
Expand Up @@ -96,7 +96,7 @@ private async Task<List<VSPublishSymbolParams>> GetVsSearchResultsAsync(Solution
{
var result = await jsonRpc.InvokeWithCancellationAsync<JObject>(
Methods.InitializeName,
new object[] { Process.GetCurrentProcess().Id, "test", new Uri("file://test"), new ClientCapabilities(), TraceSetting.Off },
new object[] { new InitializeParams() },
CancellationToken.None);

Assert.True(result["capabilities"]["workspaceStreamingSymbolProvider"].ToObject<bool>());
Expand Down
11 changes: 4 additions & 7 deletions src/Workspaces/Remote/ServiceHub/Services/LanguageServer.cs
Expand Up @@ -10,8 +10,7 @@
using Microsoft.CodeAnalysis.LanguageServer;
using Microsoft.CodeAnalysis.NavigateTo;
using Microsoft.VisualStudio.LanguageServer.Protocol;
using Newtonsoft.Json;
using Roslyn.Utilities;
using Newtonsoft.Json.Linq;
using StreamJsonRpc;
using LSP = Microsoft.VisualStudio.LanguageServer.Protocol;

Expand Down Expand Up @@ -41,17 +40,15 @@ public LanguageServer(Stream stream, IServiceProvider serviceProvider)
}

[JsonRpcMethod(Methods.InitializeName)]
public object Initialize(int? processId, string rootPath, Uri rootUri, ClientCapabilities capabilities, TraceSetting trace, CancellationToken cancellationToken)
public Task<InitializeResult> Initialize(JToken input, CancellationToken cancellationToken)
{
// our LSP server only supports WorkspaceStreamingSymbolProvider capability
// for now
return new InitializeResult()
return Task.FromResult(new InitializeResult()
{
Capabilities = new VSServerCapabilities()
{
WorkspaceStreamingSymbolProvider = true
}
};
});
}

[JsonRpcMethod(Methods.InitializedName)]
Expand Down