diff --git a/src/Tools/ExternalAccess/Razor/RazorUri.cs b/src/Tools/ExternalAccess/Razor/RazorUri.cs index dd0e03df5dab1..98fc55b7e25c4 100644 --- a/src/Tools/ExternalAccess/Razor/RazorUri.cs +++ b/src/Tools/ExternalAccess/Razor/RazorUri.cs @@ -14,4 +14,19 @@ public static Uri CreateAbsoluteUri(string absolutePath) public static string GetDocumentFilePathFromUri(Uri uri) => ProtocolConversions.GetDocumentFilePathFromUri(uri); + + public static bool IsGeneratedDocumentUri(Uri generatedDocumentUri) + => generatedDocumentUri.Scheme == SourceGeneratedDocumentUri.Scheme; + + public static string GetHintNameFromGeneratedDocumentUri(Solution solution, Uri generatedDocumentUri) + { + Contract.ThrowIfFalse(IsGeneratedDocumentUri(generatedDocumentUri)); + + if (SourceGeneratedDocumentUri.DeserializeIdentity(solution, generatedDocumentUri) is not { } identity) + { + throw new InvalidOperationException($"Could not deserialize Uri into a source generated Uri: {generatedDocumentUri}"); + } + + return identity.HintName; + } }